diff --git a/instrumentation/vertx/vertx-web-3.0/javaagent/build.gradle.kts b/instrumentation/vertx/vertx-web-3.0/javaagent/build.gradle.kts index ea68aebda4f9..b2ec0043e0df 100644 --- a/instrumentation/vertx/vertx-web-3.0/javaagent/build.gradle.kts +++ b/instrumentation/vertx/vertx-web-3.0/javaagent/build.gradle.kts @@ -13,6 +13,8 @@ muzzle { dependencies { compileOnly("io.vertx:vertx-web:3.0.0") + compileOnly("io.vertx:vertx-codegen:3.0.0") + compileOnly("io.vertx:vertx-docgen:3.0.0") // We need both version as different versions of Vert.x use different versions of Netty testInstrumentation(project(":instrumentation:netty:netty-4.0:javaagent")) diff --git a/instrumentation/vertx/vertx-web-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/RoutingContextHandlerWrapper.java b/instrumentation/vertx/vertx-web-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/RoutingContextHandlerWrapper.java index a9120a5ee929..f2fcff70b4a7 100644 --- a/instrumentation/vertx/vertx-web-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/RoutingContextHandlerWrapper.java +++ b/instrumentation/vertx/vertx-web-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/RoutingContextHandlerWrapper.java @@ -5,13 +5,16 @@ package io.opentelemetry.javaagent.instrumentation.vertx; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.context.propagation.TextMapSetter; import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; import io.vertx.core.Handler; +import io.vertx.core.http.HttpServerRequest; import io.vertx.ext.web.RoutingContext; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.UndeclaredThrowableException; @@ -37,6 +40,7 @@ public void handle(RoutingContext context) { route = route.substring(0, route.length() - 1); } HttpServerRoute.update(otelContext, HttpServerRouteSource.NESTED_CONTROLLER, route); + injectContextToDownstream(otelContext, context.request()); try (Scope ignore = RouteHolder.init(otelContext, route).makeCurrent()) { handler.handle(context); @@ -49,6 +53,21 @@ public void handle(RoutingContext context) { } } + private static void injectContextToDownstream( + Context otelContext, HttpServerRequest serverRequest) { + TextMapSetter setter = + (carrier, key, value) -> { + if (carrier != null) { + carrier.headers().set(key, value); + } + }; + + GlobalOpenTelemetry.get() + .getPropagators() + .getTextMapPropagator() + .inject(otelContext, serverRequest, setter); + } + private static String getRoute(Context otelContext, RoutingContext routingContext) { String route = routingContext.currentRoute().getPath(); String existingRoute = RouteHolder.get(otelContext);