Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instrument EMR's relocated AWS SDK #8157

Merged
merged 2 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,15 @@
*/
public class AWSHttpClientInstrumentation
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
private final String namespace;

public AWSHttpClientInstrumentation(String namespace) {
this.namespace = namespace;
}

@Override
public String instrumentedType() {
return "com.amazonaws.http.AmazonHttpClient";
return namespace + ".http.AmazonHttpClient";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@

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

public AwsSdkModule() {
super("aws-sdk");
this("com.amazonaws", "aws-sdk");
}

protected AwsSdkModule(String namespace, String instrumentationName) {
super(instrumentationName);
this.namespace = namespace;
}

@Override
Expand All @@ -30,18 +36,18 @@ public String[] helperClassNames() {
@Override
public Map<String, String> contextStore() {
Map<String, String> map = new java.util.HashMap<>();
map.put("com.amazonaws.services.sqs.model.ReceiveMessageResult", "java.lang.String");
map.put(namespace + ".services.sqs.model.ReceiveMessageResult", "java.lang.String");
map.put(
"com.amazonaws.AmazonWebServiceRequest",
namespace + ".AmazonWebServiceRequest",
"datadog.trace.bootstrap.instrumentation.api.AgentSpan");
return map;
}

@Override
public List<Instrumenter> typeInstrumentations() {
return Arrays.asList(
new AWSHttpClientInstrumentation(),
new RequestExecutorInstrumentation(),
new HandlerChainFactoryInstrumentation());
new AWSHttpClientInstrumentation(namespace),
new RequestExecutorInstrumentation(namespace),
new HandlerChainFactoryInstrumentation(namespace));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package datadog.trace.instrumentation.aws.v0;

import static java.util.Collections.singletonMap;

import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.InstrumenterModule;
import java.util.Map;

/** Repackaged AWS SDK instrumentations for Amazon EMR. */
@AutoService(InstrumenterModule.class)
public class EmrSdkModule extends AwsSdkModule {
public EmrSdkModule() {
super("com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws", "emr-aws-sdk");
}

@Override
public String muzzleDirective() {
return "emr-aws-sdk";
}

@Override
public Map<String, String> adviceShading() {
return singletonMap("com.amazonaws", "com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@
*/
public final class HandlerChainFactoryInstrumentation
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
private final String namespace;

public HandlerChainFactoryInstrumentation(String namespace) {
this.namespace = namespace;
}

@Override
public String instrumentedType() {
return "com.amazonaws.handlers.HandlerChainFactory";
return namespace + ".handlers.HandlerChainFactory";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,15 @@
*/
public final class RequestExecutorInstrumentation
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
private final String namespace;

public RequestExecutorInstrumentation(String namespace) {
this.namespace = namespace;
}

@Override
public String instrumentedType() {
return "com.amazonaws.http.AmazonHttpClient$RequestExecutor";
return namespace + ".http.AmazonHttpClient$RequestExecutor";
}

@Override
Expand Down
Loading