diff --git a/Cargo.lock b/Cargo.lock index 36877245..7694254b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1585,6 +1585,7 @@ dependencies = [ "reqwest", "serde_json", "tokio", + "tower-http", "tracing", "tree_hash", "url", @@ -5668,6 +5669,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.0", + "bytes", + "http", + "http-body", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-layer" version = "0.3.3" diff --git a/Cargo.toml b/Cargo.toml index 22dc2386..9872cfe3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,6 +66,7 @@ tokio = { version = "1.37.0", features = ["full"] } toml = "0.8.13" tonic = { version = "0.12.3", features = ["channel", "prost", "tls"] } tonic-build = "0.12.3" +tower-http = { version = "0.6", features = ["trace"] } tracing = "0.1.40" tracing-appender = "0.2.3" tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } diff --git a/crates/pbs/Cargo.toml b/crates/pbs/Cargo.toml index 4cc3d2b2..d3aaace8 100644 --- a/crates/pbs/Cargo.toml +++ b/crates/pbs/Cargo.toml @@ -20,6 +20,7 @@ prometheus.workspace = true reqwest.workspace = true serde_json.workspace = true tokio.workspace = true +tower-http.workspace = true tracing.workspace = true tree_hash.workspace = true url.workspace = true diff --git a/crates/pbs/src/routes/router.rs b/crates/pbs/src/routes/router.rs index aafcd8db..69c1954d 100644 --- a/crates/pbs/src/routes/router.rs +++ b/crates/pbs/src/routes/router.rs @@ -11,7 +11,8 @@ use cb_common::pbs::{ BUILDER_V1_API_PATH, BUILDER_V2_API_PATH, GET_HEADER_PATH, GET_STATUS_PATH, REGISTER_VALIDATOR_PATH, RELOAD_PATH, SUBMIT_BLOCK_PATH, }; -use tracing::{trace, warn}; +use tower_http::trace::TraceLayer; +use tracing::{info, trace, warn}; use uuid::Uuid; use super::{ @@ -27,7 +28,7 @@ use crate::{ pub fn create_app_router>(state: PbsStateGuard) -> Router { // DefaultBodyLimit is 2Mib by default, so we only increase it for a few routes - // thay may need more + // that may need more let v1_builder_routes = Router::new() .route(GET_HEADER_PATH, get(handle_get_header::)) @@ -51,7 +52,13 @@ pub fn create_app_router>(state: PbsStateGu let v2_builder_router = Router::new().nest(BUILDER_V2_API_PATH, v2_builder_routes); let reload_router = Router::new().route(RELOAD_PATH, post(handle_reload::)); let builder_api = - Router::new().merge(v1_builder_router).merge(v2_builder_router).merge(reload_router); + Router::new().merge(v1_builder_router).merge(v2_builder_router).merge(reload_router).layer( + TraceLayer::new_for_http().on_response( + |response: &Response, latency: std::time::Duration, _: &tracing::Span| { + info!("Responded with {} in {} ms", response.status(), latency.as_millis()); + }, + ), + ); let app = if let Some(extra_routes) = A::extra_routes() { builder_api.merge(extra_routes)