Skip to content

Commit 6ef294d

Browse files
authored
Instrument EMR's relocated AWS SDK (#8157)
* Support configuring a different namespace in AWS-SDK module
1 parent 350b2cd commit 6ef294d

File tree

5 files changed

+56
-10
lines changed

5 files changed

+56
-10
lines changed

dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AWSHttpClientInstrumentation.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@
2222
*/
2323
public class AWSHttpClientInstrumentation
2424
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
25+
private final String namespace;
26+
27+
public AWSHttpClientInstrumentation(String namespace) {
28+
this.namespace = namespace;
29+
}
2530

2631
@Override
2732
public String instrumentedType() {
28-
return "com.amazonaws.http.AmazonHttpClient";
33+
return namespace + ".http.AmazonHttpClient";
2934
}
3035

3136
@Override

dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkModule.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@
99

1010
/** Groups the instrumentations for AWS SDK 1.11.0+. */
1111
@AutoService(InstrumenterModule.class)
12-
public final class AwsSdkModule extends InstrumenterModule.Tracing {
12+
public class AwsSdkModule extends InstrumenterModule.Tracing {
13+
private final String namespace;
1314

1415
public AwsSdkModule() {
15-
super("aws-sdk");
16+
this("com.amazonaws", "aws-sdk");
17+
}
18+
19+
protected AwsSdkModule(String namespace, String instrumentationName) {
20+
super(instrumentationName);
21+
this.namespace = namespace;
1622
}
1723

1824
@Override
@@ -30,18 +36,18 @@ public String[] helperClassNames() {
3036
@Override
3137
public Map<String, String> contextStore() {
3238
Map<String, String> map = new java.util.HashMap<>();
33-
map.put("com.amazonaws.services.sqs.model.ReceiveMessageResult", "java.lang.String");
39+
map.put(namespace + ".services.sqs.model.ReceiveMessageResult", "java.lang.String");
3440
map.put(
35-
"com.amazonaws.AmazonWebServiceRequest",
41+
namespace + ".AmazonWebServiceRequest",
3642
"datadog.trace.bootstrap.instrumentation.api.AgentSpan");
3743
return map;
3844
}
3945

4046
@Override
4147
public List<Instrumenter> typeInstrumentations() {
4248
return Arrays.asList(
43-
new AWSHttpClientInstrumentation(),
44-
new RequestExecutorInstrumentation(),
45-
new HandlerChainFactoryInstrumentation());
49+
new AWSHttpClientInstrumentation(namespace),
50+
new RequestExecutorInstrumentation(namespace),
51+
new HandlerChainFactoryInstrumentation(namespace));
4652
}
4753
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package datadog.trace.instrumentation.aws.v0;
2+
3+
import static java.util.Collections.singletonMap;
4+
5+
import com.google.auto.service.AutoService;
6+
import datadog.trace.agent.tooling.InstrumenterModule;
7+
import java.util.Map;
8+
9+
/** Repackaged AWS SDK instrumentations for Amazon EMR. */
10+
@AutoService(InstrumenterModule.class)
11+
public class EmrSdkModule extends AwsSdkModule {
12+
public EmrSdkModule() {
13+
super("com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws", "emr-aws-sdk");
14+
}
15+
16+
@Override
17+
public String muzzleDirective() {
18+
return "emr-aws-sdk";
19+
}
20+
21+
@Override
22+
public Map<String, String> adviceShading() {
23+
return singletonMap("com.amazonaws", "com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws");
24+
}
25+
}

dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/HandlerChainFactoryInstrumentation.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
*/
1616
public final class HandlerChainFactoryInstrumentation
1717
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
18+
private final String namespace;
19+
20+
public HandlerChainFactoryInstrumentation(String namespace) {
21+
this.namespace = namespace;
22+
}
1823

1924
@Override
2025
public String instrumentedType() {
21-
return "com.amazonaws.handlers.HandlerChainFactory";
26+
return namespace + ".handlers.HandlerChainFactory";
2227
}
2328

2429
@Override

dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/RequestExecutorInstrumentation.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@
1919
*/
2020
public final class RequestExecutorInstrumentation
2121
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
22+
private final String namespace;
23+
24+
public RequestExecutorInstrumentation(String namespace) {
25+
this.namespace = namespace;
26+
}
2227

2328
@Override
2429
public String instrumentedType() {
25-
return "com.amazonaws.http.AmazonHttpClient$RequestExecutor";
30+
return namespace + ".http.AmazonHttpClient$RequestExecutor";
2631
}
2732

2833
@Override

0 commit comments

Comments
 (0)