From ba04ebafb94bc27a5ac5c12c2c53995ed6adad3d Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Thu, 29 Aug 2024 13:30:15 -0500 Subject: [PATCH 1/2] Add declarative config support for aws xray propagators --- aws-xray-propagator/build.gradle.kts | 2 ++ .../propagator/AwsXrayLambdaPropagator.java | 5 +++ .../awsxray/propagator/AwsXrayPropagator.java | 5 +++ .../AwsConfigurablePropagator.java | 3 +- .../internal/AwsXrayComponentProvider.java | 28 +++++++++++++++ .../AwsXrayLambdaComponentProvider.java | 28 +++++++++++++++ .../AwsXrayLambdaConfigurablePropagator.java | 3 +- ...nfigure.spi.ConfigurablePropagatorProvider | 2 +- ...toconfigure.spi.internal.ComponentProvider | 2 ++ .../internal/AwsComponentProviderTest.java | 34 +++++++++++++++++++ settings.gradle.kts | 2 ++ 11 files changed, 111 insertions(+), 3 deletions(-) rename aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/{ => internal}/AwsConfigurablePropagator.java (84%) create mode 100644 aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayComponentProvider.java create mode 100644 aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaComponentProvider.java rename aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/{ => internal}/AwsXrayLambdaConfigurablePropagator.java (84%) create mode 100644 aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider create mode 100644 aws-xray-propagator/src/test/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsComponentProviderTest.java diff --git a/aws-xray-propagator/build.gradle.kts b/aws-xray-propagator/build.gradle.kts index ed72d4ff0..ded1089f9 100644 --- a/aws-xray-propagator/build.gradle.kts +++ b/aws-xray-propagator/build.gradle.kts @@ -13,5 +13,7 @@ dependencies { testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") testImplementation("io.opentelemetry:opentelemetry-sdk-trace") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") + // TODO: remove -SNAPSHOT before merging + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator:1.42.0-alpha-SNAPSHOT") testImplementation("uk.org.webcompere:system-stubs-jupiter:2.0.3") } diff --git a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaPropagator.java b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaPropagator.java index f09f8163a..a6b6a2ab4 100644 --- a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaPropagator.java +++ b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaPropagator.java @@ -79,6 +79,11 @@ public Context extract(Context context, @Nullable C carrier, TextMapGetter Context extract(Context context, @Nullable C carrier, TextMapGetter Context getContextFromHeader( Context context, @Nullable C carrier, TextMapGetter getter) { String traceHeader = getter.get(carrier, TRACE_HEADER_KEY); diff --git a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsConfigurablePropagator.java b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsConfigurablePropagator.java similarity index 84% rename from aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsConfigurablePropagator.java rename to aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsConfigurablePropagator.java index 7027f464e..1a4b871a2 100644 --- a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsConfigurablePropagator.java +++ b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsConfigurablePropagator.java @@ -3,9 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.contrib.awsxray.propagator; +package io.opentelemetry.contrib.awsxray.propagator.internal; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider; diff --git a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayComponentProvider.java b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayComponentProvider.java new file mode 100644 index 000000000..fdec190d0 --- /dev/null +++ b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayComponentProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.awsxray.propagator.internal; + +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties; + +public class AwsXrayComponentProvider implements ComponentProvider { + @Override + public Class getType() { + return TextMapPropagator.class; + } + + @Override + public String getName() { + return "xray"; + } + + @Override + public TextMapPropagator create(StructuredConfigProperties config) { + return AwsXrayPropagator.getInstance(); + } +} diff --git a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaComponentProvider.java b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaComponentProvider.java new file mode 100644 index 000000000..86550a22e --- /dev/null +++ b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaComponentProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.awsxray.propagator.internal; + +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties; + +public class AwsXrayLambdaComponentProvider implements ComponentProvider { + @Override + public Class getType() { + return TextMapPropagator.class; + } + + @Override + public String getName() { + return "xray-lambda"; + } + + @Override + public TextMapPropagator create(StructuredConfigProperties config) { + return AwsXrayLambdaPropagator.getInstance(); + } +} diff --git a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaConfigurablePropagator.java b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaConfigurablePropagator.java similarity index 84% rename from aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaConfigurablePropagator.java rename to aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaConfigurablePropagator.java index 57e030b4a..548288256 100644 --- a/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaConfigurablePropagator.java +++ b/aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsXrayLambdaConfigurablePropagator.java @@ -3,9 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.contrib.awsxray.propagator; +package io.opentelemetry.contrib.awsxray.propagator.internal; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider; diff --git a/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider b/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider index 95ace8d1c..cebbbbbef 100644 --- a/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider +++ b/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider @@ -1 +1 @@ -io.opentelemetry.contrib.awsxray.propagator.AwsConfigurablePropagator +io.opentelemetry.contrib.awsxray.propagator.internal.AwsConfigurablePropagator diff --git a/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..f62656e7b --- /dev/null +++ b/aws-xray-propagator/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1,2 @@ +io.opentelemetry.contrib.awsxray.propagator.internal.AwsXrayComponentProvider +io.opentelemetry.contrib.awsxray.propagator.internal.AwsXrayLambdaComponentProvider diff --git a/aws-xray-propagator/src/test/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsComponentProviderTest.java b/aws-xray-propagator/src/test/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsComponentProviderTest.java new file mode 100644 index 000000000..6a1920be3 --- /dev/null +++ b/aws-xray-propagator/src/test/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsComponentProviderTest.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.awsxray.propagator.internal; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator; +import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfiguration; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import org.junit.jupiter.api.Test; + +class AwsComponentProviderTest { + + @Test + void endToEnd() { + String yaml = "file_format: 0.1\n" + "propagator:\n" + " composite: [xray, xray-lambda]\n"; + + OpenTelemetrySdk openTelemetrySdk = + FileConfiguration.parseAndCreate( + new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8))); + TextMapPropagator expectedPropagator = + TextMapPropagator.composite( + AwsXrayPropagator.getInstance(), AwsXrayLambdaPropagator.getInstance()); + assertThat(openTelemetrySdk.getPropagators().getTextMapPropagator().toString()) + .isEqualTo(expectedPropagator.toString()); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 917288732..4aa6725fe 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,6 +12,8 @@ plugins { dependencyResolutionManagement { repositories { + // TODO: remove mavenLocal() before merging + mavenLocal() mavenCentral() } } From cc0887be0992aff96ce48f2d4aba3bc0dc3b6084 Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Mon, 16 Sep 2024 09:55:31 -0500 Subject: [PATCH 2/2] remove dependency version --- aws-xray-propagator/build.gradle.kts | 4 ++-- settings.gradle.kts | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/aws-xray-propagator/build.gradle.kts b/aws-xray-propagator/build.gradle.kts index ded1089f9..7384b462b 100644 --- a/aws-xray-propagator/build.gradle.kts +++ b/aws-xray-propagator/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") testImplementation("io.opentelemetry:opentelemetry-sdk-trace") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") - // TODO: remove -SNAPSHOT before merging - testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator:1.42.0-alpha-SNAPSHOT") + + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator") testImplementation("uk.org.webcompere:system-stubs-jupiter:2.0.3") } diff --git a/settings.gradle.kts b/settings.gradle.kts index 4aa6725fe..917288732 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,8 +12,6 @@ plugins { dependencyResolutionManagement { repositories { - // TODO: remove mavenLocal() before merging - mavenLocal() mavenCentral() } }