diff --git a/aws-xray/build.gradle.kts b/aws-xray/build.gradle.kts index 54dabba71..5daa79019 100644 --- a/aws-xray/build.gradle.kts +++ b/aws-xray/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { api("io.opentelemetry:opentelemetry-sdk-trace") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator") implementation("com.squareup.okhttp3:okhttp") implementation("io.opentelemetry.semconv:opentelemetry-semconv") @@ -28,6 +29,7 @@ dependencies { testImplementation("com.linecorp.armeria:armeria-junit5") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") testImplementation("com.google.guava:guava") testImplementation("org.slf4j:slf4j-simple") diff --git a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java index 9c997f042..0cc420576 100644 --- a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java +++ b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java @@ -49,6 +49,7 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable { private final Resource resource; private final Clock clock; + private final String endpoint; private final Sampler initialSampler; private final XraySamplerClient client; private final ScheduledExecutorService executor; @@ -81,6 +82,7 @@ public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) { long pollingIntervalNanos) { this.resource = resource; this.clock = clock; + this.endpoint = endpoint; this.initialSampler = initialSampler; client = new XraySamplerClient(endpoint); executor = @@ -240,4 +242,9 @@ XraySamplerClient getClient() { Resource getResource() { return resource; } + + @Override + public String toString() { + return "AwsXrayRemoteSampler{endpoint=" + endpoint + '}'; + } } diff --git a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProvider.java b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProvider.java new file mode 100644 index 000000000..cfebb6454 --- /dev/null +++ b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProvider.java @@ -0,0 +1,47 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.awsxray.internal; + +import com.google.auto.service.AutoService; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler; +import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSamplerBuilder; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.samplers.Sampler; + +/** + * File configuration SPI implementation for {@link AwsXrayRemoteSampler}. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ +@SuppressWarnings("rawtypes") +@AutoService(ComponentProvider.class) +public class AwsXrayRemoteSamplerComponentProvider implements ComponentProvider { + @Override + public Class getType() { + return Sampler.class; + } + + @Override + public String getName() { + return "xray"; + } + + @Override + public Sampler create(DeclarativeConfigProperties config) { + Resource resource = io.opentelemetry.contrib.awsxray.ResourceHolder.getResource(); + AwsXrayRemoteSamplerBuilder builder = AwsXrayRemoteSampler.newBuilder(resource); + + String endpoint = config.getString("endpoint"); + if (endpoint != null) { + builder.setEndpoint(endpoint); + } + + return builder.build(); + } +} diff --git a/aws-xray/src/test/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProviderTest.java b/aws-xray/src/test/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProviderTest.java new file mode 100644 index 000000000..02bf22b0b --- /dev/null +++ b/aws-xray/src/test/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProviderTest.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.awsxray.internal; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import org.junit.jupiter.api.Test; + +class AwsXrayRemoteSamplerComponentProviderTest { + @Test + void endToEnd() { + String yaml = + "file_format: 1.0-rc.1\n" + + "tracer_provider:\n" + + " sampler:\n" + + " xray:\n" + + " endpoint: 'https://example.com'\n"; + + OpenTelemetrySdk openTelemetrySdk = + DeclarativeConfiguration.parseAndCreate( + new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8))); + + assertThat(openTelemetrySdk.getSdkTracerProvider().toString()) + .contains("AwsXrayRemoteSampler{endpoint=https://example.com}"); + } +} diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-aws-xray.txt b/docs/apidiffs/current_vs_latest/opentelemetry-aws-xray.txt index 6c4fe5eda..af8789200 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-aws-xray.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-aws-xray.txt @@ -1,2 +1,4 @@ Comparing source compatibility of opentelemetry-aws-xray-1.51.0-SNAPSHOT.jar against opentelemetry-aws-xray-1.50.0.jar -No changes. \ No newline at end of file +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) java.lang.String toString()