Skip to content

Commit 77dbf39

Browse files
authored
Remove library-autoconfigure dependency from aws-sdk-2.2/javaagent (#13748)
1 parent 68cf3c4 commit 77dbf39

File tree

11 files changed

+244
-64
lines changed

11 files changed

+244
-64
lines changed

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ muzzle {
9797
}
9898

9999
dependencies {
100-
implementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:library-autoconfigure"))
101100
implementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:library"))
102101

103102
library("software.amazon.awssdk:aws-core:2.2.0")

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkInstrumentationModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
77

88
import com.google.auto.service.AutoService;
9-
import io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.TracingExecutionInterceptor;
109
import io.opentelemetry.javaagent.extension.instrumentation.HelperResourceBuilder;
1110
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1211
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -32,7 +31,7 @@ public void registerHelperResources(HelperResourceBuilder helperResourceBuilder)
3231
public void injectClasses(ClassInjector injector) {
3332
injector
3433
.proxyBuilder(
35-
"io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.TracingExecutionInterceptor")
34+
"io.opentelemetry.javaagent.instrumentation.awssdk.v2_2.TracingExecutionInterceptor")
3635
.inject(InjectionMode.CLASS_ONLY);
3736
}
3837

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
7+
8+
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
9+
import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory;
10+
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
11+
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
12+
import java.util.List;
13+
14+
public final class AwsSdkSingletons {
15+
16+
private static final AwsSdkTelemetry TELEMETRY = new AwsSdkTelemetryFactory().telemetry();
17+
18+
public static AwsSdkTelemetry telemetry() {
19+
return TELEMETRY;
20+
}
21+
22+
private static class AwsSdkTelemetryFactory extends AbstractAwsSdkTelemetryFactory {
23+
24+
@Override
25+
protected List<String> getCapturedHeaders() {
26+
return ExperimentalConfig.get().getMessagingHeaders();
27+
}
28+
29+
@Override
30+
protected boolean messagingReceiveInstrumentationEnabled() {
31+
return ExperimentalConfig.get().messagingReceiveInstrumentationEnabled();
32+
}
33+
34+
@Override
35+
protected boolean getBoolean(String name, boolean defaultValue) {
36+
return AgentInstrumentationConfig.get().getBoolean(name, defaultValue);
37+
}
38+
}
39+
40+
private AwsSdkSingletons() {}
41+
}

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/DefaultBedrockRuntimeAsyncClientBuilderInstrumentation.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static net.bytebuddy.matcher.ElementMatchers.named;
99

10-
import io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.AwsSdkSingletons;
1110
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1211
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1312
import net.bytebuddy.asm.Advice;

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/DefaultSqsAsyncClientBuilderInstrumentation.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static net.bytebuddy.matcher.ElementMatchers.named;
99

10-
import io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.AwsSdkSingletons;
1110
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1211
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1312
import net.bytebuddy.asm.Advice;

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/DefaultSqsClientBuilderInstrumentation.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static net.bytebuddy.matcher.ElementMatchers.named;
99

10-
import io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.AwsSdkSingletons;
1110
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1211
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1312
import net.bytebuddy.asm.Advice;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
7+
8+
import java.io.InputStream;
9+
import java.nio.ByteBuffer;
10+
import java.util.Optional;
11+
import org.reactivestreams.Publisher;
12+
import software.amazon.awssdk.core.SdkRequest;
13+
import software.amazon.awssdk.core.SdkResponse;
14+
import software.amazon.awssdk.core.async.AsyncRequestBody;
15+
import software.amazon.awssdk.core.interceptor.Context;
16+
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
17+
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
18+
import software.amazon.awssdk.core.sync.RequestBody;
19+
import software.amazon.awssdk.http.SdkHttpRequest;
20+
import software.amazon.awssdk.http.SdkHttpResponse;
21+
22+
/**
23+
* A {@link ExecutionInterceptor} for use as an SPI by the AWS SDK to automatically trace all
24+
* requests.
25+
*/
26+
public class TracingExecutionInterceptor implements ExecutionInterceptor {
27+
28+
private final ExecutionInterceptor delegate =
29+
AwsSdkSingletons.telemetry().newExecutionInterceptor();
30+
31+
@Override
32+
public void beforeExecution(
33+
Context.BeforeExecution context, ExecutionAttributes executionAttributes) {
34+
delegate.beforeExecution(context, executionAttributes);
35+
}
36+
37+
@Override
38+
public SdkRequest modifyRequest(
39+
Context.ModifyRequest context, ExecutionAttributes executionAttributes) {
40+
return delegate.modifyRequest(context, executionAttributes);
41+
}
42+
43+
@Override
44+
public void beforeMarshalling(
45+
Context.BeforeMarshalling context, ExecutionAttributes executionAttributes) {
46+
delegate.beforeMarshalling(context, executionAttributes);
47+
}
48+
49+
@Override
50+
public void afterMarshalling(
51+
Context.AfterMarshalling context, ExecutionAttributes executionAttributes) {
52+
delegate.afterMarshalling(context, executionAttributes);
53+
}
54+
55+
@Override
56+
public SdkHttpRequest modifyHttpRequest(
57+
Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) {
58+
return delegate.modifyHttpRequest(context, executionAttributes);
59+
}
60+
61+
@Override
62+
public Optional<RequestBody> modifyHttpContent(
63+
Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) {
64+
return delegate.modifyHttpContent(context, executionAttributes);
65+
}
66+
67+
@Override
68+
public Optional<AsyncRequestBody> modifyAsyncHttpContent(
69+
Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) {
70+
return delegate.modifyAsyncHttpContent(context, executionAttributes);
71+
}
72+
73+
@Override
74+
public void beforeTransmission(
75+
Context.BeforeTransmission context, ExecutionAttributes executionAttributes) {
76+
delegate.beforeTransmission(context, executionAttributes);
77+
}
78+
79+
@Override
80+
public void afterTransmission(
81+
Context.AfterTransmission context, ExecutionAttributes executionAttributes) {
82+
delegate.afterTransmission(context, executionAttributes);
83+
}
84+
85+
@Override
86+
public SdkHttpResponse modifyHttpResponse(
87+
Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) {
88+
return delegate.modifyHttpResponse(context, executionAttributes);
89+
}
90+
91+
@Override
92+
public Optional<Publisher<ByteBuffer>> modifyAsyncHttpResponseContent(
93+
Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) {
94+
return delegate.modifyAsyncHttpResponseContent(context, executionAttributes);
95+
}
96+
97+
@Override
98+
public Optional<InputStream> modifyHttpResponseContent(
99+
Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) {
100+
return delegate.modifyHttpResponseContent(context, executionAttributes);
101+
}
102+
103+
@Override
104+
public void beforeUnmarshalling(
105+
Context.BeforeUnmarshalling context, ExecutionAttributes executionAttributes) {
106+
delegate.beforeUnmarshalling(context, executionAttributes);
107+
}
108+
109+
@Override
110+
public void afterUnmarshalling(
111+
Context.AfterUnmarshalling context, ExecutionAttributes executionAttributes) {
112+
delegate.afterUnmarshalling(context, executionAttributes);
113+
}
114+
115+
@Override
116+
public SdkResponse modifyResponse(
117+
Context.ModifyResponse context, ExecutionAttributes executionAttributes) {
118+
return delegate.modifyResponse(context, executionAttributes);
119+
}
120+
121+
@Override
122+
public void afterExecution(
123+
Context.AfterExecution context, ExecutionAttributes executionAttributes) {
124+
delegate.afterExecution(context, executionAttributes);
125+
}
126+
127+
@Override
128+
public Throwable modifyException(
129+
Context.FailedExecution context, ExecutionAttributes executionAttributes) {
130+
return delegate.modifyException(context, executionAttributes);
131+
}
132+
133+
@Override
134+
public void onExecutionFailure(
135+
Context.FailedExecution context, ExecutionAttributes executionAttributes) {
136+
delegate.onExecutionFailure(context, executionAttributes);
137+
}
138+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.javaagent.instrumentation.awssdk.v2_2.TracingExecutionInterceptor

instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ plugins {
55
base.archivesName.set("${base.archivesName.get()}-autoconfigure")
66

77
dependencies {
8-
compileOnly(project(":javaagent-extension-api"))
9-
108
implementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:library"))
119

1210
library("software.amazon.awssdk:aws-core:2.2.0")

instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AwsSdkSingletons.java

Lines changed: 12 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,82 +7,38 @@
77

88
import static java.util.Collections.emptyList;
99

10-
import io.opentelemetry.api.GlobalOpenTelemetry;
1110
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
1211
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
13-
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
14-
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
12+
import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory;
1513
import java.util.List;
1614

1715
public final class AwsSdkSingletons {
1816

19-
private static final boolean HAS_INSTRUMENTATION_CONFIG = hasAgentConfiguration();
20-
private static final AwsSdkTelemetry TELEMETRY =
21-
AwsSdkTelemetry.builder(GlobalOpenTelemetry.get())
22-
.setCapturedHeaders(getCapturedHeaders())
23-
.setCaptureExperimentalSpanAttributes(captureExperimentalSpanAttributes())
24-
.setMessagingReceiveInstrumentationEnabled(messagingReceiveInstrumentationEnabled())
25-
.setUseConfiguredPropagatorForMessaging(useMessagingPropagator())
26-
.setRecordIndividualHttpError(recordIndividualHttpError())
27-
.setGenaiCaptureMessageContent(genaiCaptureMessageContent())
28-
.build();
17+
private static final AwsSdkTelemetry TELEMETRY = new AwsSdkTelemetryFactory().telemetry();
2918

30-
private static boolean hasAgentConfiguration() {
31-
try {
32-
Class.forName("io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig");
33-
return true;
34-
} catch (ClassNotFoundException e) {
35-
return false;
36-
}
19+
public static AwsSdkTelemetry telemetry() {
20+
return TELEMETRY;
3721
}
3822

39-
private static List<String> getCapturedHeaders() {
40-
if (HAS_INSTRUMENTATION_CONFIG) {
41-
return ExperimentalConfig.get().getMessagingHeaders();
42-
} else {
23+
private static class AwsSdkTelemetryFactory extends AbstractAwsSdkTelemetryFactory {
24+
25+
@Override
26+
protected List<String> getCapturedHeaders() {
4327
return ConfigPropertiesUtil.getList(
4428
"otel.instrumentation.messaging.experimental.capture-headers", emptyList());
4529
}
46-
}
4730

48-
private static boolean captureExperimentalSpanAttributes() {
49-
return getBoolean("otel.instrumentation.aws-sdk.experimental-span-attributes", false);
50-
}
51-
52-
private static boolean messagingReceiveInstrumentationEnabled() {
53-
if (HAS_INSTRUMENTATION_CONFIG) {
54-
return ExperimentalConfig.get().messagingReceiveInstrumentationEnabled();
55-
} else {
31+
@Override
32+
protected boolean messagingReceiveInstrumentationEnabled() {
5633
return ConfigPropertiesUtil.getBoolean(
5734
"otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false);
5835
}
59-
}
60-
61-
private static boolean useMessagingPropagator() {
62-
return getBoolean(
63-
"otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging", false);
64-
}
65-
66-
private static boolean recordIndividualHttpError() {
67-
return getBoolean(
68-
"otel.instrumentation.aws-sdk.experimental-record-individual-http-error", false);
69-
}
70-
71-
private static boolean genaiCaptureMessageContent() {
72-
return getBoolean("otel.instrumentation.genai.capture-message-content", false);
73-
}
7436

75-
private static boolean getBoolean(String name, boolean defaultValue) {
76-
if (HAS_INSTRUMENTATION_CONFIG) {
77-
return AgentInstrumentationConfig.get().getBoolean(name, defaultValue);
78-
} else {
37+
@Override
38+
protected boolean getBoolean(String name, boolean defaultValue) {
7939
return ConfigPropertiesUtil.getBoolean(name, defaultValue);
8040
}
8141
}
8242

83-
public static AwsSdkTelemetry telemetry() {
84-
return TELEMETRY;
85-
}
86-
8743
private AwsSdkSingletons() {}
8844
}

0 commit comments

Comments
 (0)