From 39fbac354ff0b320c87a84492e05107c989b5e11 Mon Sep 17 00:00:00 2001 From: Dmitry Rodionov Date: Mon, 27 Feb 2023 14:38:46 +0200 Subject: [PATCH] WIP --- pageserver/src/http/routes.rs | 45 +++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/pageserver/src/http/routes.rs b/pageserver/src/http/routes.rs index d2d9f24efb..3bc563586f 100644 --- a/pageserver/src/http/routes.rs +++ b/pageserver/src/http/routes.rs @@ -1,9 +1,14 @@ use std::collections::HashMap; +use std::str::FromStr; use std::sync::Arc; use anyhow::{anyhow, Context, Result}; -use hyper::StatusCode; +use futures::Future; +use hyper::body::HttpBody; +use hyper::header::HeaderName; +use hyper::http::HeaderValue; use hyper::{Body, Request, Response, Uri}; +use hyper::{Method, StatusCode}; use metrics::launch_timestamp::LaunchTimestamp; use pageserver_api::models::DownloadRemoteLayersTaskSpawnRequest; use remote_storage::GenericRemoteStorage; @@ -1157,6 +1162,42 @@ pub fn make_router( "/v1/tenant/:tenant_id/timeline/:timeline_id/layer/:layer_file_name", evict_timeline_layer_handler, ) - .get("/v1/panic", always_panic_handler) + .get( + "/v1/panic", + wrap_span("always_panic_handler", always_panic_handler), + ) .any(handler_404)) } + +fn wrap_span( + handler_name: &'static str, + handler: H, +) -> impl Fn(Request) -> R +where + H: Fn(Request) -> R + Send + Sync + 'static, + B: HttpBody + Send + Sync + 'static, + E: Into>, + R: Future, E>> + Send + 'static, +{ + move |r| -> R { + async { + let headers = r.headers_mut(); + let name = HeaderName::from_str("UUID").expect("created header name"); + let request_id = "foo"; + let value = HeaderValue::from_str(&request_id).unwrap(); + headers.insert(name, value); + if r.method() == Method::GET { + tracing::debug!("{} {} {}", r.method(), r.uri().path(), request_id); + } else { + tracing::info!("{} {} {}", r.method(), r.uri().path(), request_id); + } + handler(r) + .instrument(info_span!( + "request", + handler = handler_name, + request_id = request_id + )) + .await + } + } +}