|
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 = |
@@ -107,6 +113,8 @@ public String[] knownMatchingTypes() { |
107 | 113 | LETTUCE_HANDSHAKE_HANDLER, |
108 | 114 | "io.netty.util.concurrent.GlobalEventExecutor", |
109 | 115 | "io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor", |
| 116 | + "io.netty.handler.timeout.IdleStateHandler", |
| 117 | + "io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler", |
110 | 118 | "com.linecorp.armeria.client.HttpClientFactory", |
111 | 119 | "com.linecorp.armeria.client.HttpChannelPool" |
112 | 120 | }; |
@@ -215,6 +223,17 @@ public void methodAdvice(MethodTransformer transformer) { |
215 | 223 | isTypeInitializer().and(isDeclaredBy(RXJAVA3_DISABLED_TYPE_INITIALIZERS)), advice); |
216 | 224 | transformer.applyAdvice( |
217 | 225 | isTypeInitializer().and(isDeclaredBy(NETTY_GLOBAL_EVENT_EXECUTOR)), advice); |
| 226 | + transformer.applyAdvice( |
| 227 | + named("initialize") |
| 228 | + .and(returns(void.class)) |
| 229 | + .and( |
| 230 | + takesArgument( |
| 231 | + 0, |
| 232 | + namedOneOf( |
| 233 | + "io.netty.channel.ChannelHandlerContext", |
| 234 | + "io.grpc.netty.shaded.io.netty.channel.ChannelHandlerContext"))) |
| 235 | + .and(isDeclaredBy(NETTY_IDLE_STATE_HANDLER)), |
| 236 | + advice); |
218 | 237 | transformer.applyAdvice(namedOneOf("sendAsync").and(isDeclaredBy(JAVA_HTTP_CLIENT)), advice); |
219 | 238 | transformer.applyAdvice( |
220 | 239 | named("channelRegistered").and(isDeclaredBy(named(LETTUCE_HANDSHAKE_HANDLER))), advice); |
|
0 commit comments