RequestMeta as AutoValue
This commit is contained in:
parent
b0621bbd2d
commit
609b57ee48
|
@ -51,6 +51,9 @@ dependencies {
|
|||
|
||||
compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-sqs', version: '1.11.106'
|
||||
|
||||
compileOnly deps.autoValueAnnotations
|
||||
annotationProcessor deps.autoValue
|
||||
|
||||
// Include httpclient instrumentation for testing because it is a dependency for aws-sdk.
|
||||
testInstrumentation project(':instrumentation:apache-httpclient:apache-httpclient-4.0:javaagent')
|
||||
testLibrary group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.106'
|
||||
|
|
|
@ -54,7 +54,8 @@ public class AwsClientInstrumentation implements TypeInstrumentation {
|
|||
if (!hasAgentHandler) {
|
||||
handlers.add(
|
||||
new TracingRequestHandler(
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class)));
|
||||
InstrumentationContext.get(
|
||||
AmazonWebServiceRequest.class, RequestMeta.Builder.class)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,6 @@ public class AwsSdkInstrumentationModule extends InstrumentationModule {
|
|||
public Map<String, String> contextStore() {
|
||||
return singletonMap(
|
||||
"com.amazonaws.AmazonWebServiceRequest",
|
||||
"io.opentelemetry.javaagent.instrumentation.awssdk.v1_11.RequestMeta");
|
||||
"io.opentelemetry.javaagent.instrumentation.awssdk.v1_11.RequestMeta$Builder");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,14 +60,14 @@ public class RequestInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
@Advice.Argument(0) String value, @Advice.This AmazonWebServiceRequest request) {
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class);
|
||||
RequestMeta requestMeta = contextStore.get(request);
|
||||
if (requestMeta == null) {
|
||||
requestMeta = new RequestMeta();
|
||||
contextStore.put(request, requestMeta);
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.Builder.class);
|
||||
RequestMeta.Builder requestMetaBuilder = contextStore.get(request);
|
||||
if (requestMetaBuilder == null) {
|
||||
requestMetaBuilder = RequestMeta.builder();
|
||||
contextStore.put(request, requestMetaBuilder);
|
||||
}
|
||||
requestMeta.setBucketName(value);
|
||||
requestMetaBuilder.setBucketName(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,14 +75,14 @@ public class RequestInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
@Advice.Argument(0) String value, @Advice.This AmazonWebServiceRequest request) {
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class);
|
||||
RequestMeta requestMeta = contextStore.get(request);
|
||||
if (requestMeta == null) {
|
||||
requestMeta = new RequestMeta();
|
||||
contextStore.put(request, requestMeta);
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.Builder.class);
|
||||
RequestMeta.Builder requestMetaBuilder = contextStore.get(request);
|
||||
if (requestMetaBuilder == null) {
|
||||
requestMetaBuilder = RequestMeta.builder();
|
||||
contextStore.put(request, requestMetaBuilder);
|
||||
}
|
||||
requestMeta.setQueueUrl(value);
|
||||
requestMetaBuilder.setQueueUrl(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,14 +90,14 @@ public class RequestInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
@Advice.Argument(0) String value, @Advice.This AmazonWebServiceRequest request) {
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class);
|
||||
RequestMeta requestMeta = contextStore.get(request);
|
||||
if (requestMeta == null) {
|
||||
requestMeta = new RequestMeta();
|
||||
contextStore.put(request, requestMeta);
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.Builder.class);
|
||||
RequestMeta.Builder requestMetaBuilder = contextStore.get(request);
|
||||
if (requestMetaBuilder == null) {
|
||||
requestMetaBuilder = RequestMeta.builder();
|
||||
contextStore.put(request, requestMetaBuilder);
|
||||
}
|
||||
requestMeta.setQueueName(value);
|
||||
requestMetaBuilder.setQueueName(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,14 +105,14 @@ public class RequestInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
@Advice.Argument(0) String value, @Advice.This AmazonWebServiceRequest request) {
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class);
|
||||
RequestMeta requestMeta = contextStore.get(request);
|
||||
if (requestMeta == null) {
|
||||
requestMeta = new RequestMeta();
|
||||
contextStore.put(request, requestMeta);
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.Builder.class);
|
||||
RequestMeta.Builder requestMetaBuilder = contextStore.get(request);
|
||||
if (requestMetaBuilder == null) {
|
||||
requestMetaBuilder = RequestMeta.builder();
|
||||
contextStore.put(request, requestMetaBuilder);
|
||||
}
|
||||
requestMeta.setStreamName(value);
|
||||
requestMetaBuilder.setStreamName(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,14 +120,14 @@ public class RequestInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
@Advice.Argument(0) String value, @Advice.This AmazonWebServiceRequest request) {
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.class);
|
||||
RequestMeta requestMeta = contextStore.get(request);
|
||||
if (requestMeta == null) {
|
||||
requestMeta = new RequestMeta();
|
||||
contextStore.put(request, requestMeta);
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore =
|
||||
InstrumentationContext.get(AmazonWebServiceRequest.class, RequestMeta.Builder.class);
|
||||
RequestMeta.Builder requestMetaBuilder = contextStore.get(request);
|
||||
if (requestMetaBuilder == null) {
|
||||
requestMetaBuilder = RequestMeta.builder();
|
||||
contextStore.put(request, requestMetaBuilder);
|
||||
}
|
||||
requestMeta.setTableName(value);
|
||||
requestMetaBuilder.setTableName(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,78 +6,47 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.awssdk.v1_11;
|
||||
|
||||
import com.amazonaws.handlers.HandlerContextKey;
|
||||
import java.util.Objects;
|
||||
import com.google.auto.value.AutoValue;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class RequestMeta {
|
||||
@AutoValue
|
||||
public abstract class RequestMeta {
|
||||
// Note: aws1.x sdk doesn't have any truly async clients so we can store scope in request context
|
||||
// safely.
|
||||
public static final HandlerContextKey<ContextScopePair> CONTEXT_SCOPE_PAIR_CONTEXT_KEY =
|
||||
new HandlerContextKey<>(RequestMeta.class.getName() + ".ContextScopePair");
|
||||
|
||||
private String bucketName;
|
||||
private String queueUrl;
|
||||
private String queueName;
|
||||
private String streamName;
|
||||
private String tableName;
|
||||
|
||||
public String getBucketName() {
|
||||
return bucketName;
|
||||
public static Builder builder() {
|
||||
return new AutoValue_RequestMeta.Builder();
|
||||
}
|
||||
|
||||
public void setBucketName(String bucketName) {
|
||||
this.bucketName = bucketName;
|
||||
@AutoValue.Builder
|
||||
public abstract static class Builder {
|
||||
public abstract Builder setBucketName(String bucketName);
|
||||
|
||||
public abstract Builder setQueueUrl(String queueUrl);
|
||||
|
||||
public abstract Builder setStreamName(String streamName);
|
||||
|
||||
public abstract Builder setTableName(String tableName);
|
||||
|
||||
public abstract Builder setQueueName(String queueName);
|
||||
|
||||
public abstract RequestMeta build();
|
||||
}
|
||||
|
||||
public String getQueueUrl() {
|
||||
return queueUrl;
|
||||
}
|
||||
@Nullable
|
||||
public abstract String getBucketName();
|
||||
|
||||
public void setQueueUrl(String queueUrl) {
|
||||
this.queueUrl = queueUrl;
|
||||
}
|
||||
@Nullable
|
||||
public abstract String getQueueUrl();
|
||||
|
||||
public String getQueueName() {
|
||||
return queueName;
|
||||
}
|
||||
@Nullable
|
||||
public abstract String getQueueName();
|
||||
|
||||
public void setQueueName(String queueName) {
|
||||
this.queueName = queueName;
|
||||
}
|
||||
@Nullable
|
||||
public abstract String getStreamName();
|
||||
|
||||
public String getStreamName() {
|
||||
return streamName;
|
||||
}
|
||||
|
||||
public void setStreamName(String streamName) {
|
||||
this.streamName = streamName;
|
||||
}
|
||||
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public void setTableName(String tableName) {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof RequestMeta)) {
|
||||
return false;
|
||||
}
|
||||
RequestMeta other = (RequestMeta) obj;
|
||||
return Objects.equals(bucketName, other.bucketName)
|
||||
&& Objects.equals(queueUrl, other.queueUrl)
|
||||
&& Objects.equals(queueName, other.queueName)
|
||||
&& Objects.equals(streamName, other.streamName)
|
||||
&& Objects.equals(tableName, other.tableName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(bucketName, queueUrl, queueName, streamName, tableName);
|
||||
}
|
||||
@Nullable
|
||||
public abstract String getTableName();
|
||||
}
|
||||
|
|
|
@ -21,13 +21,15 @@ import io.opentelemetry.context.Context;
|
|||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.javaagent.instrumentation.api.ContextStore;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/** Tracing Request Handler. */
|
||||
public class TracingRequestHandler extends RequestHandler2 {
|
||||
|
||||
private final ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore;
|
||||
private final ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore;
|
||||
|
||||
public TracingRequestHandler(ContextStore<AmazonWebServiceRequest, RequestMeta> contextStore) {
|
||||
public TracingRequestHandler(
|
||||
ContextStore<AmazonWebServiceRequest, RequestMeta.Builder> contextStore) {
|
||||
this.contextStore = contextStore;
|
||||
}
|
||||
|
||||
|
@ -37,7 +39,10 @@ public class TracingRequestHandler extends RequestHandler2 {
|
|||
AmazonWebServiceRequest originalRequest = request.getOriginalRequest();
|
||||
SpanKind kind = (isSqsProducer(originalRequest) ? SpanKind.PRODUCER : SpanKind.CLIENT);
|
||||
|
||||
RequestMeta requestMeta = contextStore.get(originalRequest);
|
||||
RequestMeta requestMeta =
|
||||
Optional.ofNullable(contextStore.get(originalRequest))
|
||||
.map(RequestMeta.Builder::build)
|
||||
.orElse(null);
|
||||
Context parentContext = Context.current();
|
||||
if (!tracer().shouldStartSpan(parentContext)) {
|
||||
return;
|
||||
|
@ -93,7 +98,10 @@ public class TracingRequestHandler extends RequestHandler2 {
|
|||
private void createConsumerSpan(Message message, Request<?> request, Response<?> response) {
|
||||
Context parentContext = SqsParentContext.ofSystemAttributes(message.getAttributes());
|
||||
AmazonWebServiceRequest originalRequest = request.getOriginalRequest();
|
||||
RequestMeta requestMeta = contextStore.get(originalRequest);
|
||||
RequestMeta requestMeta =
|
||||
Optional.ofNullable(contextStore.get(originalRequest))
|
||||
.map(RequestMeta.Builder::build)
|
||||
.orElse(null);
|
||||
Context context = tracer().startSpan(SpanKind.CONSUMER, parentContext, request, requestMeta);
|
||||
tracer().end(context, response);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue