11use std:: sync:: Arc ;
22
3- use color_eyre:: SectionExt ;
43use opentelemetry:: {
54 global,
65 trace:: { FutureExt , Span , SpanKind , TraceContextExt , Tracer } ,
@@ -17,7 +16,8 @@ use poem::{
1716 } ,
1817 Endpoint , FromRequest , IntoResponse , PathPattern , Request , Response , Result ,
1918} ;
20- use tracing_opentelemetry;
19+ use tracing:: { info_span, Instrument } ;
20+ use tracing_opentelemetry:: { self , OpenTelemetrySpanExt } ;
2121
2222/// Middleware that injects the OpenTelemetry trace ID into the response headers.
2323#[ derive( Default ) ]
@@ -108,16 +108,15 @@ where
108108
109109 span. add_event ( "request.started" . to_string ( ) , vec ! [ ] ) ;
110110
111+ let tracing_span = info_span ! ( "request.started" ) ;
112+ let parent_context = Context :: current_with_span ( span) ;
113+ tracing_span. set_parent ( parent_context. clone ( ) ) ;
114+
111115 async move {
112116 let res = self . inner . call ( req) . await ;
113117 let cx = Context :: current ( ) ;
114118 let span = cx. span ( ) ;
115119
116- let guard = tracing_opentelemetry:: OpenTelemetrySpanExt :: set_parent (
117- & tracing:: span:: Span :: current ( ) ,
118- cx. clone ( )
119- ) ;
120-
121120 match res {
122121 Ok ( resp) => {
123122 let mut resp = resp. into_response ( ) ;
@@ -184,7 +183,8 @@ where
184183 }
185184 }
186185 }
187- . with_context ( Context :: current_with_span ( span) )
186+ . with_context ( parent_context)
187+ . instrument ( tracing_span)
188188 . await
189189 }
190190}
0 commit comments