Skip to content

Commit 05a3d0d

Browse files
committed
(bug) apply exec controller classes using instrumentation
1 parent ea9c1da commit 05a3d0d

File tree

6 files changed

+94
-51
lines changed

6 files changed

+94
-51
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.ratpack.v1_7;
7+
8+
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
9+
import static net.bytebuddy.matcher.ElementMatchers.named;
10+
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
11+
12+
import com.google.common.collect.ImmutableList;
13+
import io.opentelemetry.instrumentation.ratpack.v1_7.OpenTelemetryExecInitializer;
14+
import io.opentelemetry.instrumentation.ratpack.v1_7.OpenTelemetryExecInterceptor;
15+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
16+
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
17+
import net.bytebuddy.asm.Advice;
18+
import net.bytebuddy.description.type.TypeDescription;
19+
import net.bytebuddy.matcher.ElementMatcher;
20+
import ratpack.exec.ExecInitializer;
21+
import ratpack.exec.ExecInterceptor;
22+
23+
public class DefaultExecControllerInstrumentation implements TypeInstrumentation {
24+
25+
@Override
26+
public ElementMatcher<TypeDescription> typeMatcher() {
27+
return named("ratpack.exec.internal.DefaultExecController");
28+
}
29+
30+
@Override
31+
public void transform(TypeTransformer transformer) {
32+
transformer.applyAdviceToMethod(
33+
named("setInitializers")
34+
.and(takesArgument(0, named("com.google.common.collect.ImmutableList"))),
35+
DefaultExecControllerInstrumentation.class.getName() + "$SetInitializersAdvice");
36+
37+
transformer.applyAdviceToMethod(
38+
named("setInterceptors")
39+
.and(takesArgument(0, named("com.google.common.collect.ImmutableList"))),
40+
DefaultExecControllerInstrumentation.class.getName() + "$SetInterceptorsAdvice");
41+
42+
transformer.applyAdviceToMethod(
43+
isConstructor(),
44+
DefaultExecControllerInstrumentation.class.getName() + "$ConstructorAdvice");
45+
}
46+
47+
public static class SetInitializersAdvice {
48+
@Advice.OnMethodEnter(suppress = Throwable.class)
49+
public static void enter(
50+
@Advice.Argument(value = 0, readOnly = false)
51+
ImmutableList<? extends ExecInitializer> initializers) {
52+
initializers =
53+
ImmutableList.<ExecInitializer>builder()
54+
.addAll(initializers)
55+
.add(OpenTelemetryExecInitializer.INSTANCE)
56+
.build();
57+
}
58+
}
59+
60+
public static class SetInterceptorsAdvice {
61+
@Advice.OnMethodEnter(suppress = Throwable.class)
62+
public static void enter(
63+
@Advice.Argument(value = 0, readOnly = false)
64+
ImmutableList<? extends ExecInterceptor> interceptors) {
65+
interceptors =
66+
ImmutableList.<ExecInterceptor>builder()
67+
.addAll(interceptors)
68+
.add(OpenTelemetryExecInterceptor.INSTANCE)
69+
.build();
70+
}
71+
}
72+
73+
public static class ConstructorAdvice {
74+
75+
@SuppressWarnings("UnusedVariable")
76+
@Advice.OnMethodExit(suppress = Throwable.class)
77+
public static void exit(
78+
@Advice.FieldValue(value = "initializers", readOnly = false)
79+
ImmutableList<? extends ExecInitializer> initializers,
80+
@Advice.FieldValue(value = "interceptors", readOnly = false)
81+
ImmutableList<? extends ExecInterceptor> interceptors) {
82+
initializers = ImmutableList.of(OpenTelemetryExecInitializer.INSTANCE);
83+
interceptors = ImmutableList.of(OpenTelemetryExecInterceptor.INSTANCE);
84+
}
85+
}
86+
}

instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackInstrumentationModule.java

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3737
@Override
3838
public List<TypeInstrumentation> typeInstrumentations() {
3939
return asList(
40+
new DefaultExecControllerInstrumentation(),
4041
new ServerRegistryInstrumentation(),
4142
new HttpClientInstrumentation(),
4243
new RequestActionSupportInstrumentation());

instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/ServerRegistryInstrumentation.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.bytebuddy.asm.Advice;
1515
import net.bytebuddy.description.type.TypeDescription;
1616
import net.bytebuddy.matcher.ElementMatcher;
17+
import ratpack.handling.HandlerDecorator;
1718
import ratpack.registry.Registry;
1819

1920
public class ServerRegistryInstrumentation implements TypeInstrumentation {
@@ -34,9 +35,12 @@ public void transform(TypeTransformer transformer) {
3435
public static class BuildAdvice {
3536

3637
@Advice.OnMethodExit(suppress = Throwable.class)
37-
public static void injectTracing(@Advice.Return(readOnly = false) Registry registry)
38-
throws Exception {
39-
registry = registry.join(Registry.of(RatpackSingletons.telemetry()::configureServerRegistry));
38+
public static void injectTracing(@Advice.Return(readOnly = false) Registry registry) {
39+
registry =
40+
registry.join(
41+
Registry.single(
42+
HandlerDecorator.prepend(
43+
RatpackSingletons.telemetry().getOpenTelemetryServerHandler())));
4044
}
4145
}
4246
}

instrumentation/ratpack/ratpack-1.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackForkedHttpClientTest.java

-16
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,25 @@
55

66
package io.opentelemetry.javaagent.instrumentation.ratpack.v1_7;
77

8-
import com.google.common.collect.ImmutableList;
98
import io.netty.channel.ConnectTimeoutException;
109
import io.opentelemetry.api.common.AttributeKey;
1110
import io.opentelemetry.instrumentation.ratpack.client.AbstractRatpackForkedHttpClientTest;
12-
import io.opentelemetry.instrumentation.ratpack.v1_7.OpenTelemetryExecInitializer;
1311
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1412
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
1513
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
1614
import io.opentelemetry.semconv.NetworkAttributes;
1715
import java.net.URI;
1816
import java.util.HashSet;
1917
import java.util.Set;
20-
import org.junit.jupiter.api.BeforeAll;
2118
import org.junit.jupiter.api.condition.OS;
2219
import org.junit.jupiter.api.extension.RegisterExtension;
23-
import ratpack.exec.internal.DefaultExecController;
2420
import ratpack.http.client.HttpClientReadTimeoutException;
2521

2622
class RatpackForkedHttpClientTest extends AbstractRatpackForkedHttpClientTest {
2723

2824
@RegisterExtension
2925
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();
3026

31-
@BeforeAll
32-
@Override
33-
protected void setUpClient() throws Exception {
34-
exec.run(
35-
unused -> {
36-
((DefaultExecController) exec.getController())
37-
.setInitializers(ImmutableList.of(OpenTelemetryExecInitializer.INSTANCE));
38-
client = buildHttpClient();
39-
singleConnectionClient = buildHttpClient(spec -> spec.poolSize(1));
40-
});
41-
}
42-
4327
@Override
4428
protected Set<AttributeKey<?>> computeHttpAttributes(URI uri) {
4529
Set<AttributeKey<?>> attributes = new HashSet<>(super.computeHttpAttributes(uri));

instrumentation/ratpack/ratpack-1.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackHttpClientTest.java

-16
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,25 @@
55

66
package io.opentelemetry.javaagent.instrumentation.ratpack.v1_7;
77

8-
import com.google.common.collect.ImmutableList;
98
import io.netty.channel.ConnectTimeoutException;
109
import io.opentelemetry.api.common.AttributeKey;
1110
import io.opentelemetry.instrumentation.ratpack.client.AbstractRatpackHttpClientTest;
12-
import io.opentelemetry.instrumentation.ratpack.v1_7.OpenTelemetryExecInitializer;
1311
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1412
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
1513
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
1614
import io.opentelemetry.semconv.NetworkAttributes;
1715
import java.net.URI;
1816
import java.util.HashSet;
1917
import java.util.Set;
20-
import org.junit.jupiter.api.BeforeAll;
2118
import org.junit.jupiter.api.condition.OS;
2219
import org.junit.jupiter.api.extension.RegisterExtension;
23-
import ratpack.exec.internal.DefaultExecController;
2420
import ratpack.http.client.HttpClientReadTimeoutException;
2521

2622
class RatpackHttpClientTest extends AbstractRatpackHttpClientTest {
2723

2824
@RegisterExtension
2925
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();
3026

31-
@BeforeAll
32-
@Override
33-
protected void setUpClient() throws Exception {
34-
exec.run(
35-
unused -> {
36-
((DefaultExecController) exec.getController())
37-
.setInitializers(ImmutableList.of(OpenTelemetryExecInitializer.INSTANCE));
38-
client = buildHttpClient();
39-
singleConnectionClient = buildHttpClient(spec -> spec.poolSize(1));
40-
});
41-
}
42-
4327
@Override
4428
protected Set<AttributeKey<?>> computeHttpAttributes(URI uri) {
4529
Set<AttributeKey<?>> attributes = new HashSet<>(super.computeHttpAttributes(uri));

instrumentation/ratpack/ratpack-1.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackPooledHttpClientTest.java

-16
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,25 @@
55

66
package io.opentelemetry.javaagent.instrumentation.ratpack.v1_7;
77

8-
import com.google.common.collect.ImmutableList;
98
import io.netty.channel.ConnectTimeoutException;
109
import io.opentelemetry.api.common.AttributeKey;
1110
import io.opentelemetry.instrumentation.ratpack.client.AbstractRatpackPooledHttpClientTest;
12-
import io.opentelemetry.instrumentation.ratpack.v1_7.OpenTelemetryExecInitializer;
1311
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1412
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
1513
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
1614
import io.opentelemetry.semconv.NetworkAttributes;
1715
import java.net.URI;
1816
import java.util.HashSet;
1917
import java.util.Set;
20-
import org.junit.jupiter.api.BeforeAll;
2118
import org.junit.jupiter.api.condition.OS;
2219
import org.junit.jupiter.api.extension.RegisterExtension;
23-
import ratpack.exec.internal.DefaultExecController;
2420
import ratpack.http.client.HttpClientReadTimeoutException;
2521

2622
class RatpackPooledHttpClientTest extends AbstractRatpackPooledHttpClientTest {
2723

2824
@RegisterExtension
2925
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();
3026

31-
@BeforeAll
32-
@Override
33-
protected void setUpClient() throws Exception {
34-
exec.run(
35-
unused -> {
36-
((DefaultExecController) exec.getController())
37-
.setInitializers(ImmutableList.of(OpenTelemetryExecInitializer.INSTANCE));
38-
client = buildHttpClient();
39-
singleConnectionClient = buildHttpClient(spec -> spec.poolSize(1));
40-
});
41-
}
42-
4327
@Override
4428
protected Set<AttributeKey<?>> computeHttpAttributes(URI uri) {
4529
Set<AttributeKey<?>> attributes = new HashSet<>(super.computeHttpAttributes(uri));

0 commit comments

Comments
 (0)