|
10 | 10 | import static datadog.trace.instrumentation.java.concurrent.ConcurrentInstrumentationNames.EXECUTOR_INSTRUMENTATION_NAME; |
11 | 11 | import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; |
12 | 12 | import static net.bytebuddy.matcher.ElementMatchers.isTypeInitializer; |
| 13 | +import static net.bytebuddy.matcher.ElementMatchers.returns; |
| 14 | +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; |
13 | 15 | import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; |
14 | 16 |
|
15 | 17 | import com.google.auto.service.AutoService; |
@@ -61,6 +63,10 @@ public AsyncPropagatingDisableInstrumentation() { |
61 | 63 | "io.netty.util.concurrent.GlobalEventExecutor", |
62 | 64 | // shaded version |
63 | 65 | "io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor"); |
| 66 | + private static final ElementMatcher<TypeDescription> NETTY_IDLE_STATE_HANDLER = |
| 67 | + namedOneOf( |
| 68 | + "io.netty.handler.timeout.IdleStateHandler", |
| 69 | + "io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler"); |
64 | 70 | private static final ElementMatcher<TypeDescription> JAVA_HTTP_CLIENT = |
65 | 71 | extendsClass(named("java.net.http.HttpClient")); |
66 | 72 | private static final String LETTUCE_HANDSHAKE_HANDLER = |
@@ -108,6 +114,8 @@ public String[] knownMatchingTypes() { |
108 | 114 | LETTUCE_HANDSHAKE_HANDLER, |
109 | 115 | "io.netty.util.concurrent.GlobalEventExecutor", |
110 | 116 | "io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor", |
| 117 | + "io.netty.handler.timeout.IdleStateHandler", |
| 118 | + "io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler", |
111 | 119 | "com.linecorp.armeria.client.HttpClientFactory", |
112 | 120 | "com.linecorp.armeria.client.HttpChannelPool" |
113 | 121 | }; |
@@ -220,6 +228,17 @@ public void methodAdvice(MethodTransformer transformer) { |
220 | 228 | isTypeInitializer().and(isDeclaredBy(RXJAVA3_DISABLED_TYPE_INITIALIZERS)), advice); |
221 | 229 | transformer.applyAdvice( |
222 | 230 | isTypeInitializer().and(isDeclaredBy(NETTY_GLOBAL_EVENT_EXECUTOR)), advice); |
| 231 | + transformer.applyAdvice( |
| 232 | + named("initialize") |
| 233 | + .and(returns(void.class)) |
| 234 | + .and( |
| 235 | + takesArgument( |
| 236 | + 0, |
| 237 | + namedOneOf( |
| 238 | + "io.netty.channel.ChannelHandlerContext", |
| 239 | + "io.grpc.netty.shaded.io.netty.channel.ChannelHandlerContext"))) |
| 240 | + .and(isDeclaredBy(NETTY_IDLE_STATE_HANDLER)), |
| 241 | + advice); |
223 | 242 | transformer.applyAdvice(namedOneOf("sendAsync").and(isDeclaredBy(JAVA_HTTP_CLIENT)), advice); |
224 | 243 | transformer.applyAdvice( |
225 | 244 | named("channelRegistered").and(isDeclaredBy(named(LETTUCE_HANDSHAKE_HANDLER))), advice); |
|
0 commit comments