Skip to content

Commit 6f13fa2

Browse files
committed
add declarative config support for AWS X-Ray
1 parent 720067f commit 6f13fa2

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
@@ -12,6 +12,7 @@ dependencies {
1212

1313
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
1414
implementation("io.opentelemetry.semconv:opentelemetry-semconv:1.37.0")
15+
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1516

1617
implementation("com.squareup.okhttp3:okhttp")
1718
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
@@ -30,6 +31,7 @@ dependencies {
3031

3132
testImplementation("com.linecorp.armeria:armeria-junit5")
3233
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
34+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
3335
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
3436
testImplementation("com.google.guava:guava")
3537
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
@@ -58,6 +58,7 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
5858

5959
private final Resource resource;
6060
private final Clock clock;
61+
private final String endpoint;
6162
private final Sampler initialSampler;
6263
private final XraySamplerClient client;
6364
private final ScheduledExecutorService executor;
@@ -92,6 +93,7 @@ public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) {
9293
long pollingIntervalNanos) {
9394
this.resource = resource;
9495
this.clock = clock;
96+
this.endpoint = endpoint;
9597
this.initialSampler = initialSampler;
9698
client = new XraySamplerClient(endpoint);
9799
executor =
@@ -296,4 +298,9 @@ XraySamplerClient getClient() {
296298
Resource getResource() {
297299
return resource;
298300
}
301+
302+
@Override
303+
public String toString() {
304+
return "AwsXrayRemoteSampler{endpoint=" + endpoint + '}';
305+
}
299306
}
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)