Skip to content

Commit 30912cb

Browse files
committed
feat(vertx): inject context to downstream
Closes #15284
1 parent 1f8fee5 commit 30912cb

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

instrumentation/vertx/vertx-web-3.0/javaagent/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ muzzle {
1313

1414
dependencies {
1515
compileOnly("io.vertx:vertx-web:3.0.0")
16+
compileOnly("io.vertx:vertx-codegen:3.0.0")
17+
compileOnly("io.vertx:vertx-docgen:3.0.0")
1618

1719
// We need both version as different versions of Vert.x use different versions of Netty
1820
testInstrumentation(project(":instrumentation:netty:netty-4.0:javaagent"))

instrumentation/vertx/vertx-web-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/RoutingContextHandlerWrapper.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55

66
package io.opentelemetry.javaagent.instrumentation.vertx;
77

8+
import io.opentelemetry.api.GlobalOpenTelemetry;
89
import io.opentelemetry.api.trace.Span;
910
import io.opentelemetry.context.Context;
1011
import io.opentelemetry.context.Scope;
12+
import io.opentelemetry.context.propagation.TextMapSetter;
1113
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
1214
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
1315
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource;
1416
import io.vertx.core.Handler;
17+
import io.vertx.core.http.HttpServerRequest;
1518
import io.vertx.ext.web.RoutingContext;
1619
import java.lang.reflect.InvocationTargetException;
1720
import 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,21 @@ public void handle(RoutingContext context) {
4953
}
5054
}
5155

56+
private static void injectContextToDownstream(
57+
Context otelContext, HttpServerRequest serverRequest) {
58+
TextMapSetter<HttpServerRequest> setter =
59+
(carrier, key, value) -> {
60+
if (carrier != null) {
61+
carrier.headers().set(key, value);
62+
}
63+
};
64+
65+
GlobalOpenTelemetry.get()
66+
.getPropagators()
67+
.getTextMapPropagator()
68+
.inject(otelContext, serverRequest, setter);
69+
}
70+
5271
private static String getRoute(Context otelContext, RoutingContext routingContext) {
5372
String route = routingContext.currentRoute().getPath();
5473
String existingRoute = RouteHolder.get(otelContext);

0 commit comments

Comments
 (0)