55
66package io .opentelemetry .javaagent .instrumentation .vertx ;
77
8+ import io .opentelemetry .api .GlobalOpenTelemetry ;
89import io .opentelemetry .api .trace .Span ;
910import io .opentelemetry .context .Context ;
1011import io .opentelemetry .context .Scope ;
12+ import io .opentelemetry .context .propagation .TextMapSetter ;
1113import io .opentelemetry .instrumentation .api .instrumenter .LocalRootSpan ;
1214import io .opentelemetry .instrumentation .api .semconv .http .HttpServerRoute ;
1315import io .opentelemetry .instrumentation .api .semconv .http .HttpServerRouteSource ;
1416import io .vertx .core .Handler ;
17+ import io .vertx .core .http .HttpServerRequest ;
1518import io .vertx .ext .web .RoutingContext ;
1619import java .lang .reflect .InvocationTargetException ;
1720import java .lang .reflect .UndeclaredThrowableException ;
@@ -37,6 +40,7 @@ public void handle(RoutingContext context) {
3740 route = route .substring (0 , route .length () - 1 );
3841 }
3942 HttpServerRoute .update (otelContext , HttpServerRouteSource .NESTED_CONTROLLER , route );
43+ injectContextToDownstream (otelContext ,context .request ());
4044
4145 try (Scope ignore = RouteHolder .init (otelContext , route ).makeCurrent ()) {
4246 handler .handle (context );
@@ -49,6 +53,18 @@ public void handle(RoutingContext context) {
4953 }
5054 }
5155
56+ private static void injectContextToDownstream (Context otelContext , HttpServerRequest serverRequest ){
57+ TextMapSetter <HttpServerRequest > setter = (carrier , key , value ) -> {
58+ if (carrier != null ) {
59+ carrier .headers ().set (key , value );
60+ }
61+ };
62+
63+ GlobalOpenTelemetry .get ().getPropagators ()
64+ .getTextMapPropagator ()
65+ .inject (otelContext , serverRequest , setter );
66+ }
67+
5268 private static String getRoute (Context otelContext , RoutingContext routingContext ) {
5369 String route = routingContext .currentRoute ().getPath ();
5470 String existingRoute = RouteHolder .get (otelContext );
0 commit comments