Skip to content

Commit 66355fe

Browse files
authored
Merge pull request #148 from DataDog/tyler/remove-super-matchers
Migrate expensive integrations using super matchers to byte buddy.
2 parents 5135004 + 51f903a commit 66355fe

File tree

29 files changed

+575
-406
lines changed

29 files changed

+575
-406
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ Thumbs.db
4949
/bin
5050
/out
5151
*/out
52+
dd-java-agent/integrations/*/out
5253
dd-trace-examples/*/out

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/instrumentation/annotation/TraceAnnotationsTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public class TraceAnnotationsTest {
2121

2222
@Before
2323
public void beforeTest() throws Exception {
24+
Class.forName("com.datadoghq.agent.InstrumentationRulesManager")
25+
.getMethod("registerClassLoad")
26+
.invoke(null);
2427
try {
2528
GlobalTracer.register(tracer);
2629
} catch (final Exception e) {

dd-java-agent/dd-java-agent.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ dependencies {
2121
compile project(':dd-java-agent:tooling')
2222
compile project(':dd-trace-annotations')
2323

24-
24+
compile project(':dd-java-agent:integrations:aws-sdk')
25+
compile project(':dd-java-agent:integrations:servlet-2')
26+
compile project(':dd-java-agent:integrations:servlet-3')
2527
compile project(':dd-java-agent:integrations:spring-web')
2628

2729
compile deps.bytebuddy

dd-java-agent/integrations/aws-sdk/aws-sdk.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,18 @@ versionScan {
1212
"com.amazonaws.http.request.HttpRequestFactory": null,
1313
]
1414
}
15+
16+
apply from: "${rootDir}/gradle/java.gradle"
17+
18+
dependencies {
19+
compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.11.119'
20+
21+
compile project(':dd-trace')
22+
compile project(':dd-java-agent:tooling')
23+
24+
compile deps.bytebuddy
25+
compile deps.opentracing
26+
27+
compile group: 'io.opentracing.contrib', name: 'opentracing-aws-sdk', version: '0.0.2'
28+
compile group: 'com.google.auto.service', name: 'auto-service', version: '1.0-rc3'
29+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package dd.inst.aws;
2+
3+
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
4+
import static dd.trace.ExceptionHandlers.defaultExceptionHandler;
5+
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
6+
import static net.bytebuddy.matcher.ElementMatchers.named;
7+
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
8+
9+
import com.amazonaws.client.builder.AwsClientBuilder;
10+
import com.amazonaws.handlers.RequestHandler2;
11+
import com.google.auto.service.AutoService;
12+
import dd.trace.Instrumenter;
13+
import io.opentracing.contrib.aws.TracingRequestHandler;
14+
import io.opentracing.util.GlobalTracer;
15+
import java.util.Arrays;
16+
import java.util.List;
17+
import net.bytebuddy.agent.builder.AgentBuilder;
18+
import net.bytebuddy.asm.Advice;
19+
20+
@AutoService(Instrumenter.class)
21+
public final class AWSClientInstrumentation implements Instrumenter {
22+
23+
@Override
24+
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
25+
return agentBuilder
26+
.type(
27+
named("com.amazonaws.client.builder.AwsSyncClientBuilder")
28+
.or(named("com.amazonaws.client.builder.AwsAsyncClientBuilder")),
29+
classLoaderHasClasses(
30+
"com.amazonaws.http.client.HttpClientFactory",
31+
"com.amazonaws.http.apache.utils.ApacheUtils"))
32+
.transform(
33+
new AgentBuilder.Transformer.ForAdvice()
34+
.advice(
35+
named("build").and(takesArguments(0)).and(isPublic()),
36+
AWSClientAdvice.class.getName())
37+
.withExceptionHandler(defaultExceptionHandler()))
38+
.asDecorator();
39+
}
40+
41+
public static class AWSClientAdvice {
42+
43+
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
44+
public static void addHandler(@Advice.This final AwsClientBuilder builder) {
45+
46+
final RequestHandler2 handler = new TracingRequestHandler(GlobalTracer.get());
47+
48+
List<RequestHandler2> handlers = builder.getRequestHandlers();
49+
50+
if (handlers == null || handlers.isEmpty()) {
51+
handlers = Arrays.asList(handler);
52+
} else {
53+
// Check if we already added the handler
54+
if (!(handlers.get(0) instanceof TracingRequestHandler)) {
55+
handlers.add(0, handler);
56+
}
57+
}
58+
builder.setRequestHandlers(handler);
59+
}
60+
}
61+
}

dd-java-agent/integrations/helpers/helpers.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,10 @@ dependencies {
2222
compile group: 'io.opentracing.contrib', name: 'opentracing-cassandra-driver', version: '0.0.2'
2323
compile group: 'io.opentracing.contrib', name: 'opentracing-apache-httpclient', version: '0.0.2'
2424

25-
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
26-
// compileOnly group: 'javax.servlet', name: 'servlet-api', version: '2.3'
2725
compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
2826
compileOnly group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'
2927
compileOnly group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.6.0'
3028
compileOnly group: 'javax.jms', name: 'javax.jms-api', version: '2.0.1'
31-
compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.11.119'
3229
compileOnly group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0'
3330
compileOnly group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
3431
}

dd-java-agent/integrations/helpers/src/main/java/com/datadoghq/agent/integration/AWSClientHelper.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

dd-java-agent/integrations/helpers/src/main/java/com/datadoghq/agent/integration/Servlet2Helper.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

dd-java-agent/integrations/helpers/src/main/java/com/datadoghq/agent/integration/Servlet3Helper.java

Lines changed: 0 additions & 99 deletions
This file was deleted.

dd-java-agent/integrations/servlet-2/servlet-2.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,18 @@ versionScan {
99
"javax.servlet.FilterChain" : null,
1010
]
1111
}
12+
13+
apply from: "${rootDir}/gradle/java.gradle"
14+
15+
dependencies {
16+
compileOnly group: 'javax.servlet', name: 'servlet-api', version: '2.3'
17+
compileOnly group: 'io.opentracing.contrib', name: 'opentracing-web-servlet-filter', version: '0.0.9'
18+
19+
compile project(':dd-trace')
20+
compile project(':dd-java-agent:tooling')
21+
22+
compile deps.bytebuddy
23+
compile deps.opentracing
24+
25+
compile group: 'com.google.auto.service', name: 'auto-service', version: '1.0-rc3'
26+
}

0 commit comments

Comments
 (0)