Skip to content

Commit 237450e

Browse files
committed
add declarative config support for AWS X-Ray
1 parent 5028194 commit 237450e

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

aws-xray/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies {
1111
api("io.opentelemetry:opentelemetry-sdk-trace")
1212

1313
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
14+
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1415

1516
implementation("com.squareup.okhttp3:okhttp")
1617
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
@@ -28,6 +29,7 @@ dependencies {
2829

2930
testImplementation("com.linecorp.armeria:armeria-junit5")
3031
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
32+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
3133
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
3234
testImplementation("com.google.guava:guava")
3335
testImplementation("org.slf4j:slf4j-simple")

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
4949

5050
private final Resource resource;
5151
private final Clock clock;
52+
private final String endpoint;
5253
private final Sampler initialSampler;
5354
private final XraySamplerClient client;
5455
private final ScheduledExecutorService executor;
@@ -81,6 +82,7 @@ public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) {
8182
long pollingIntervalNanos) {
8283
this.resource = resource;
8384
this.clock = clock;
85+
this.endpoint = endpoint;
8486
this.initialSampler = initialSampler;
8587
client = new XraySamplerClient(endpoint);
8688
executor =
@@ -240,4 +242,9 @@ XraySamplerClient getClient() {
240242
Resource getResource() {
241243
return resource;
242244
}
245+
246+
@Override
247+
public String toString() {
248+
return "AwsXrayRemoteSampler{endpoint=" + endpoint + '}';
249+
}
243250
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.awsxray;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.resources.Resource;
12+
import io.opentelemetry.sdk.trace.samplers.Sampler;
13+
14+
/**
15+
* File configuration SPI implementation for {@link AwsXrayRemoteSampler}.
16+
*
17+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
18+
* at any time.
19+
*/
20+
@SuppressWarnings("rawtypes")
21+
@AutoService(ComponentProvider.class)
22+
public class AwsXrayRemoteSamplerComponentProvider implements ComponentProvider<Sampler> {
23+
@Override
24+
public Class<Sampler> getType() {
25+
return Sampler.class;
26+
}
27+
28+
@Override
29+
public String getName() {
30+
return "xray";
31+
}
32+
33+
@Override
34+
public Sampler create(DeclarativeConfigProperties config) {
35+
Resource resource = io.opentelemetry.contrib.awsxray.ResourceHolder.getResource();
36+
AwsXrayRemoteSamplerBuilder builder = AwsXrayRemoteSampler.newBuilder(resource);
37+
38+
String endpoint = config.getString("endpoint");
39+
if (endpoint != null) {
40+
builder.setEndpoint(endpoint);
41+
}
42+
43+
return builder.build();
44+
}
45+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.awsxray;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.junit.jupiter.api.Test;
15+
16+
class AwsXrayRemoteSamplerComponentProviderTest {
17+
@Test
18+
void endToEnd() {
19+
String yaml =
20+
"file_format: 1.0-rc.1\n"
21+
+ "tracer_provider:\n"
22+
+ " sampler:\n"
23+
+ " xray:\n"
24+
+ " endpoint: 'https://example.com'\n";
25+
26+
OpenTelemetrySdk openTelemetrySdk =
27+
DeclarativeConfiguration.parseAndCreate(
28+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
29+
30+
assertThat(openTelemetrySdk.getSdkTracerProvider().toString())
31+
.contains("AwsXrayRemoteSampler{endpoint=https://example.com}");
32+
}
33+
}

0 commit comments

Comments
 (0)