Skip to content

Commit 6eb2619

Browse files
[release/v1.33.x] Undertow: run response customizer on all ServerConnection implementations (#11548)
Co-authored-by: Lauri Tulmin <[email protected]>
1 parent 45c5521 commit 6eb2619

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/HttpServerConnectionInstrumentation.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,33 @@
55

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

8+
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass;
9+
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
810
import static io.opentelemetry.javaagent.instrumentation.undertow.UndertowSingletons.helper;
911
import static net.bytebuddy.matcher.ElementMatchers.named;
10-
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1112
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1213

1314
import io.opentelemetry.context.Context;
15+
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1416
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder;
1517
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1618
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1719
import io.undertow.server.HttpServerExchange;
20+
import io.undertow.server.ServerConnection;
1821
import net.bytebuddy.asm.Advice;
1922
import net.bytebuddy.description.type.TypeDescription;
2023
import net.bytebuddy.matcher.ElementMatcher;
2124

2225
public class HttpServerConnectionInstrumentation implements TypeInstrumentation {
26+
27+
@Override
28+
public ElementMatcher<ClassLoader> classLoaderOptimization() {
29+
return hasClassesNamed("io.undertow.server.ServerConnection");
30+
}
31+
2332
@Override
2433
public ElementMatcher<TypeDescription> typeMatcher() {
25-
return namedOneOf(
26-
"io.undertow.server.protocol.http.HttpServerConnection",
27-
"io.undertow.server.protocol.http2.Http2ServerConnection");
34+
return extendsClass(named("io.undertow.server.ServerConnection"));
2835
}
2936

3037
@Override
@@ -39,10 +46,22 @@ public void transform(TypeTransformer transformer) {
3946
public static class ResponseAdvice {
4047

4148
@Advice.OnMethodEnter(suppress = Throwable.class)
42-
public static void onEnter(@Advice.Argument(0) HttpServerExchange exchange) {
49+
public static void onEnter(
50+
@Advice.Argument(0) HttpServerExchange exchange,
51+
@Advice.Local("otelCallDepth") CallDepth callDepth) {
52+
callDepth = CallDepth.forClass(ServerConnection.class);
53+
if (callDepth.getAndIncrement() > 0) {
54+
return;
55+
}
56+
4357
Context context = helper().getServerContext(exchange);
4458
HttpServerResponseCustomizerHolder.getCustomizer()
4559
.customize(context, exchange, UndertowHttpResponseMutator.INSTANCE);
4660
}
61+
62+
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
63+
public static void onExit(@Advice.Local("otelCallDepth") CallDepth callDepth) {
64+
callDepth.decrementAndGet();
65+
}
4766
}
4867
}

0 commit comments

Comments
 (0)