tracing_opentelemetry_ext/
http.rs

1use axum::body::Body;
2use axum::http::Request;
3use axum::response::Response;
4pub use axum_tracing_opentelemetry::{opentelemetry_tracing_layer, opentelemetry_tracing_layer_grpc};
5use opentelemetry::propagation::TextMapPropagator;
6use opentelemetry::sdk::propagation::TraceContextPropagator;
7use opentelemetry_http::{HeaderExtractor, HeaderInjector};
8use tracing::Span;
9use tracing_opentelemetry::OpenTelemetrySpanExt;
10
11pub fn update_otel_name(req: Request<Body>) -> Request<Body> {
12    Span::current().record("otel.name", format!("{} {}", req.method(), req.uri()));
13    req
14}
15
16pub fn inject_trace_context<T>(mut res: Response<T>) -> Response<T> {
17    let ctx = Span::current().context();
18    TraceContextPropagator::new().inject_context(&ctx, &mut HeaderInjector(res.headers_mut()));
19    res
20}
21
22pub fn extract_trace_context<T>(req: &Request<T>) -> Span {
23    let context = TraceContextPropagator::new().extract(&HeaderExtractor(req.headers()));
24    let span = Span::current();
25    span.set_parent(context);
26    span
27}