From 901713323c305809dbcf20c2d33505e2c65ea5eb Mon Sep 17 00:00:00 2001 From: msi Date: Thu, 13 Nov 2025 14:52:23 -0300 Subject: Add request uuid --- web/template/src/router.rs | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'web/template/src/router.rs') diff --git a/web/template/src/router.rs b/web/template/src/router.rs index 64ec718..d3bc57c 100644 --- a/web/template/src/router.rs +++ b/web/template/src/router.rs @@ -18,30 +18,58 @@ use std::{sync::Arc, time::Duration}; use axum::{ Router, extract::State, - http::StatusCode, + http::{HeaderName, Request, StatusCode}, response::{Html, IntoResponse}, routing::get, }; use minijinja::context; use tower_http::{ - services::ServeDir, timeout::TimeoutLayer, trace::TraceLayer, + request_id::{ + MakeRequestUuid, PropagateRequestIdLayer, SetRequestIdLayer, + }, + services::ServeDir, + timeout::TimeoutLayer, + trace::TraceLayer, }; +use tracing::{error, info_span}; use crate::state::AppState; +const REQUEST_ID_HEADER: &str = "x-request-id"; + pub(crate) fn route(app_state: Arc) -> Router { + let x_request_id = HeaderName::from_static(REQUEST_ID_HEADER); + Router::new() - .route("/healthz", get(healthz)) .route("/", get(handler_home)) .route("/content", get(handler_content)) .route("/about", get(handler_about)) // TODO(msi): from config folder asssets .nest_service("/assets", ServeDir::new("assets")) .layer(( - TraceLayer::new_for_http(), + SetRequestIdLayer::new(x_request_id.clone(), MakeRequestUuid), + TraceLayer::new_for_http().make_span_with( + |request: &Request<_>| { + // Log the request id as generated. + let request_id = request.headers().get(REQUEST_ID_HEADER); + + match request_id { + Some(request_id) => info_span!( + "http_request", + request_id = ?request_id, + ), + None => { + error!("could not extract request_id"); + info_span!("http_request") + } + } + }, + ), // TODO(msi): from config TimeoutLayer::new(Duration::from_secs(10)), + PropagateRequestIdLayer::new(x_request_id) )) + .route("/healthz", get(healthz)) .with_state(app_state) } -- cgit v1.2.3