diff --git a/pubky-homeserver/src/core/extractors.rs b/pubky-homeserver/src/core/extractors.rs index 085ae4e..f7da950 100644 --- a/pubky-homeserver/src/core/extractors.rs +++ b/pubky-homeserver/src/core/extractors.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::{collections::HashMap, fmt::Display}; use axum::{ async_trait, @@ -21,6 +21,12 @@ impl PubkyHost { } } +impl Display for PubkyHost { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + #[async_trait] impl FromRequestParts for PubkyHost where diff --git a/pubky-homeserver/src/core/layers/trace.rs b/pubky-homeserver/src/core/layers/trace.rs index c1433f5..e378a81 100644 --- a/pubky-homeserver/src/core/layers/trace.rs +++ b/pubky-homeserver/src/core/layers/trace.rs @@ -2,11 +2,13 @@ use std::sync::Arc; use axum::{extract::Request, Router}; use tower_http::trace::{ - DefaultMakeSpan, DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, MakeSpan, OnFailure, - OnRequest, OnResponse, TraceLayer, + DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, OnFailure, OnRequest, OnResponse, + TraceLayer, }; use tracing::{Level, Span}; +use crate::core::extractors::PubkyHost; + pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router { let excluded_paths = Arc::new( excluded_paths @@ -23,7 +25,20 @@ pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router { tracing::span!(Level::INFO, "request", excluded = true) } else { // Use the default span for other endpoints - DefaultMakeSpan::new().make_span(request) + + let uri = if let Some(pubky_host) = request.extensions().get::() { + format!("pubky://{pubky_host}{}", request.uri()) + } else { + request.uri().to_string() + }; + + tracing::span!( + Level::INFO, + "request", + method = %request.method(), + uri = ?uri, + version = ?request.version(), + ) } }) .on_request(|request: &Request, span: &Span| { diff --git a/pubky-homeserver/src/core/routes/mod.rs b/pubky-homeserver/src/core/routes/mod.rs index 59e7d78..70439d5 100644 --- a/pubky-homeserver/src/core/routes/mod.rs +++ b/pubky-homeserver/src/core/routes/mod.rs @@ -9,7 +9,7 @@ use tower_http::cors::CorsLayer; use crate::core::AppState; -use super::layers::trace::with_trace_layer; +use super::layers::{pubky_host::PubkyHostLayer, trace::with_trace_layer}; mod auth; mod feed; @@ -37,5 +37,5 @@ pub fn create_app(state: AppState) -> Router { .layer(CorsLayer::very_permissive()) .with_state(state); - with_trace_layer(app, &TRACING_EXCLUDED_PATHS) + with_trace_layer(app, &TRACING_EXCLUDED_PATHS).layer(PubkyHostLayer) } diff --git a/pubky-homeserver/src/core/routes/tenants/mod.rs b/pubky-homeserver/src/core/routes/tenants/mod.rs index 9a6865d..c03f950 100644 --- a/pubky-homeserver/src/core/routes/tenants/mod.rs +++ b/pubky-homeserver/src/core/routes/tenants/mod.rs @@ -9,10 +9,7 @@ use axum::{ Router, }; -use crate::core::{ - layers::{authz::AuthorizationLayer, pubky_host::PubkyHostLayer}, - AppState, -}; +use crate::core::{layers::authz::AuthorizationLayer, AppState}; pub mod read; pub mod session; @@ -33,5 +30,4 @@ pub fn router(state: AppState) -> Router { // TODO: different max size for sessions and other routes? .layer(DefaultBodyLimit::max(100 * 1024 * 1024)) .layer(AuthorizationLayer::new(state.clone())) - .layer(PubkyHostLayer) }