Skip to content

Commit 645ed32

Browse files
amarzialimcculls
andauthored
Refactor several modules to separate InstrumenterModule from instrumenter (#10331)
* refactor hazelcast modules * Refactor hibernate modules * Refactor ignite module * refactor aws-sdk-2.2 * refactor the sqs-2.0 module * spotless * Update dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsModule.java Co-authored-by: Stuart McCulloch <stuart.mcculloch@datadoghq.com> * add static import --------- Co-authored-by: Stuart McCulloch <stuart.mcculloch@datadoghq.com>
1 parent d184301 commit 645ed32

41 files changed

Lines changed: 511 additions & 577 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AbstractAwsClientInstrumentation.java

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

dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsClientInstrumentation.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,23 @@
11
package datadog.trace.instrumentation.aws.v2;
22

33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4-
import static java.util.Collections.singletonMap;
54
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
65

7-
import com.google.auto.service.AutoService;
86
import datadog.trace.agent.tooling.Instrumenter;
9-
import datadog.trace.agent.tooling.InstrumenterModule;
107
import datadog.trace.bootstrap.InstrumentationContext;
118
import java.util.List;
12-
import java.util.Map;
139
import net.bytebuddy.asm.Advice;
1410
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1511

1612
/** AWS SDK v2 instrumentation */
17-
@AutoService(InstrumenterModule.class)
18-
public final class AwsClientInstrumentation extends AbstractAwsClientInstrumentation
13+
public final class AwsClientInstrumentation
1914
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
2015

2116
@Override
2217
public String instrumentedType() {
2318
return "software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder";
2419
}
2520

26-
@Override
27-
public Map<String, String> contextStore() {
28-
return singletonMap(
29-
"software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse", "java.lang.String");
30-
}
31-
3221
@Override
3322
public void methodAdvice(MethodTransformer transformer) {
3423
transformer.applyAdvice(

dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1313
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1414

15-
import com.google.auto.service.AutoService;
1615
import datadog.trace.agent.tooling.Instrumenter;
17-
import datadog.trace.agent.tooling.InstrumenterModule;
1816
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1917
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2018
import datadog.trace.context.TraceScope;
@@ -28,8 +26,7 @@
2826
* Separate instrumentation class to close aws request scope right after request has been submitted
2927
* for execution for Sync clients.
3028
*/
31-
@AutoService(InstrumenterModule.class)
32-
public final class AwsHttpClientInstrumentation extends AbstractAwsClientInstrumentation
29+
public final class AwsHttpClientInstrumentation
3330
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
3431

3532
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package datadog.trace.instrumentation.aws.v2;
2+
3+
import com.google.auto.service.AutoService;
4+
import datadog.trace.agent.tooling.Instrumenter;
5+
import datadog.trace.agent.tooling.InstrumenterModule;
6+
import java.util.Arrays;
7+
import java.util.Collections;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
/** Groups the instrumentations for AWS SDK 2.2+. */
12+
@AutoService(InstrumenterModule.class)
13+
public final class AwsSdkModule extends InstrumenterModule.Tracing {
14+
15+
public AwsSdkModule() {
16+
super("aws-sdk");
17+
}
18+
19+
@Override
20+
public String[] helperClassNames() {
21+
return new String[] {
22+
"datadog.trace.instrumentation.aws.v2.AwsSdkClientDecorator",
23+
"datadog.trace.instrumentation.aws.v2.TracingExecutionInterceptor"
24+
};
25+
}
26+
27+
@Override
28+
public Map<String, String> contextStore() {
29+
return Collections.singletonMap(
30+
"software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse", "java.lang.String");
31+
}
32+
33+
@Override
34+
public List<Instrumenter> typeInstrumentations() {
35+
return Arrays.asList(new AwsClientInstrumentation(), new AwsHttpClientInstrumentation());
36+
}
37+
}

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/AbstractSqsInstrumentation.java

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

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsClientInstrumentation.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,15 @@
33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
44
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
55

6-
import com.google.auto.service.AutoService;
76
import datadog.trace.agent.tooling.Instrumenter;
8-
import datadog.trace.agent.tooling.InstrumenterModule;
97
import datadog.trace.api.Config;
108
import java.util.List;
119
import net.bytebuddy.asm.Advice;
1210
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1311

1412
/** AWS SDK v2 instrumentation */
15-
@AutoService(InstrumenterModule.class)
16-
public final class SqsClientInstrumentation extends InstrumenterModule.Tracing
13+
public final class SqsClientInstrumentation
1714
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
18-
private static final String INSTRUMENTATION_NAME = "aws-sdk";
19-
20-
public SqsClientInstrumentation() {
21-
super(INSTRUMENTATION_NAME);
22-
}
2315

2416
@Override
2517
public String instrumentedType() {
@@ -33,13 +25,6 @@ public void methodAdvice(MethodTransformer transformer) {
3325
SqsClientInstrumentation.class.getName() + "$AwsSqsBuilderAdvice");
3426
}
3527

36-
@Override
37-
public String[] helperClassNames() {
38-
return new String[] {
39-
packageName + ".SqsInterceptor", packageName + ".MessageAttributeInjector"
40-
};
41-
}
42-
4328
public static class AwsSqsBuilderAdvice {
4429
@Advice.OnMethodExit(suppress = Throwable.class)
4530
public static void methodExit(@Advice.Return final List<ExecutionInterceptor> interceptors) {

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsJmsMessageInstrumentation.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
77

88
import com.amazon.sqs.javamessaging.message.SQSMessage;
9-
import com.google.auto.service.AutoService;
109
import datadog.trace.agent.tooling.Instrumenter;
11-
import datadog.trace.agent.tooling.InstrumenterModule;
1210
import datadog.trace.api.Config;
1311
import java.util.HashMap;
1412
import java.util.Map;
@@ -17,14 +15,9 @@
1715
import software.amazon.awssdk.services.sqs.model.Message;
1816
import software.amazon.awssdk.services.sqs.model.MessageAttributeValue;
1917

20-
@AutoService(InstrumenterModule.class)
21-
public class SqsJmsMessageInstrumentation extends AbstractSqsInstrumentation
18+
public final class SqsJmsMessageInstrumentation
2219
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
2320

24-
public SqsJmsMessageInstrumentation() {
25-
super("jms");
26-
}
27-
2821
@Override
2922
public String instrumentedType() {
3023
return "com.amazon.sqs.javamessaging.message.SQSMessage";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package datadog.trace.instrumentation.aws.v2.sqs;
2+
3+
import static java.util.Collections.singleton;
4+
5+
import com.google.auto.service.AutoService;
6+
import datadog.trace.agent.tooling.Instrumenter;
7+
import datadog.trace.agent.tooling.InstrumenterModule;
8+
import datadog.trace.api.InstrumenterConfig;
9+
import java.util.ArrayList;
10+
import java.util.Collections;
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
/** Groups the instrumentations for AWS SQS SDK 2.0+. */
15+
@AutoService(InstrumenterModule.class)
16+
public final class SqsModule extends InstrumenterModule.Tracing {
17+
18+
public SqsModule() {
19+
super("sqs", "aws-sdk");
20+
}
21+
22+
@Override
23+
public String[] helperClassNames() {
24+
return new String[] {
25+
"datadog.trace.instrumentation.aws.v2.sqs.SqsInterceptor",
26+
"datadog.trace.instrumentation.aws.v2.sqs.MessageAttributeInjector",
27+
"datadog.trace.instrumentation.aws.v2.sqs.MessageExtractAdapter",
28+
"datadog.trace.instrumentation.aws.v2.sqs.SqsDecorator",
29+
"datadog.trace.instrumentation.aws.v2.sqs.TracingIterator",
30+
"datadog.trace.instrumentation.aws.v2.sqs.TracingList",
31+
"datadog.trace.instrumentation.aws.v2.sqs.TracingListIterator"
32+
};
33+
}
34+
35+
@Override
36+
public Map<String, String> contextStore() {
37+
return Collections.singletonMap(
38+
"software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse", "java.lang.String");
39+
}
40+
41+
@Override
42+
public List<Instrumenter> typeInstrumentations() {
43+
final List<Instrumenter> ret = new ArrayList<>(4);
44+
ret.add(new SqsClientInstrumentation());
45+
ret.add(new SqsReceiveRequestInstrumentation());
46+
// we don't need to instrument messages when we're doing legacy AWS-SDK tracing
47+
if (!InstrumenterConfig.get().isLegacyInstrumentationEnabled(false, "aws-sdk")) {
48+
ret.add(new SqsReceiveResultInstrumentation());
49+
}
50+
if (InstrumenterConfig.get().isIntegrationEnabled(singleton("jms"), true)) {
51+
ret.add(new SqsJmsMessageInstrumentation());
52+
}
53+
return ret;
54+
}
55+
}

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsReceiveRequestInstrumentation.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@
55
import static java.util.Arrays.asList;
66
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
77

8-
import com.google.auto.service.AutoService;
98
import datadog.trace.agent.tooling.Instrumenter;
10-
import datadog.trace.agent.tooling.InstrumenterModule;
119
import datadog.trace.api.Config;
1210
import java.util.List;
1311
import net.bytebuddy.asm.Advice;
1412
import net.bytebuddy.description.type.TypeDescription;
1513
import net.bytebuddy.matcher.ElementMatcher;
1614

17-
@AutoService(InstrumenterModule.class)
18-
public class SqsReceiveRequestInstrumentation extends AbstractSqsInstrumentation
15+
public final class SqsReceiveRequestInstrumentation
1916
implements Instrumenter.ForSingleType,
2017
Instrumenter.WithTypeStructure,
2118
Instrumenter.HasMethodAdvice {

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsReceiveResultInstrumentation.java

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,23 @@
11
package datadog.trace.instrumentation.aws.v2.sqs;
22

33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4-
import static java.util.Collections.singletonMap;
54
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
65

7-
import com.google.auto.service.AutoService;
86
import datadog.trace.agent.tooling.Instrumenter;
9-
import datadog.trace.agent.tooling.InstrumenterModule;
10-
import datadog.trace.api.InstrumenterConfig;
117
import datadog.trace.bootstrap.InstrumentationContext;
128
import java.util.List;
13-
import java.util.Map;
149
import net.bytebuddy.asm.Advice;
1510
import software.amazon.awssdk.services.sqs.model.Message;
1611
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
1712

18-
@AutoService(InstrumenterModule.class)
19-
public class SqsReceiveResultInstrumentation extends AbstractSqsInstrumentation
13+
public final class SqsReceiveResultInstrumentation
2014
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
2115

2216
@Override
2317
public String instrumentedType() {
2418
return "software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse";
2519
}
2620

27-
@Override
28-
public boolean isEnabled() {
29-
return super.isEnabled()
30-
// we don't need to instrument messages when we're doing legacy AWS-SDK tracing
31-
&& !InstrumenterConfig.get().isLegacyInstrumentationEnabled(false, "aws-sdk");
32-
}
33-
34-
@Override
35-
public String[] helperClassNames() {
36-
return new String[] {
37-
packageName + ".MessageExtractAdapter",
38-
packageName + ".SqsDecorator",
39-
packageName + ".TracingIterator",
40-
packageName + ".TracingList",
41-
packageName + ".TracingListIterator"
42-
};
43-
}
44-
45-
@Override
46-
public Map<String, String> contextStore() {
47-
return singletonMap(
48-
"software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse", "java.lang.String");
49-
}
50-
5121
@Override
5222
public void methodAdvice(MethodTransformer transformer) {
5323
transformer.applyAdvice(

0 commit comments

Comments
 (0)