diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/BeanstalkResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/BeanstalkResourceProvider.java index f10959465..258c4ad21 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/BeanstalkResourceProvider.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/BeanstalkResourceProvider.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.resources.Resource; /** {@link ResourceProvider} for automatically configuring {@link BeanstalkResource}. */ -public final class BeanstalkResourceProvider implements ResourceProvider { +public final class BeanstalkResourceProvider extends CloudResourceProvider { @Override public Resource createResource(ConfigProperties config) { return BeanstalkResource.get(); diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/CloudResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/CloudResourceProvider.java new file mode 100644 index 000000000..2a75ed0a0 --- /dev/null +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/CloudResourceProvider.java @@ -0,0 +1,19 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.aws.resource; + +import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER; + +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ConditionalResourceProvider; +import io.opentelemetry.sdk.resources.Resource; + +abstract class CloudResourceProvider implements ConditionalResourceProvider { + @Override + public final boolean shouldApply(ConfigProperties config, Resource existing) { + return existing.getAttribute(CLOUD_PROVIDER) == null; + } +} diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/Ec2ResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/Ec2ResourceProvider.java index b1798f72d..b8378aad5 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/Ec2ResourceProvider.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/Ec2ResourceProvider.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.resources.Resource; /** {@link ResourceProvider} for automatically configuring {@link Ec2Resource}. */ -public final class Ec2ResourceProvider implements ResourceProvider { +public final class Ec2ResourceProvider extends CloudResourceProvider { @Override public Resource createResource(ConfigProperties config) { return Ec2Resource.get(); diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResourceProvider.java index be07b0f6e..cde8836ab 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResourceProvider.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResourceProvider.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.resources.Resource; /** {@link ResourceProvider} for automatically configuring {@link EcsResource}. */ -public final class EcsResourceProvider implements ResourceProvider { +public final class EcsResourceProvider extends CloudResourceProvider { @Override public Resource createResource(ConfigProperties config) { return EcsResource.get(); diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EksResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EksResourceProvider.java index 13fef7f0f..153277680 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EksResourceProvider.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EksResourceProvider.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.resources.Resource; /** {@link ResourceProvider} for automatically configuring {@link EksResource}. */ -public final class EksResourceProvider implements ResourceProvider { +public final class EksResourceProvider extends CloudResourceProvider { @Override public Resource createResource(ConfigProperties config) { return EksResource.get(); diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/LambdaResourceProvider.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/LambdaResourceProvider.java index ac6e230bf..71743ee26 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/LambdaResourceProvider.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/LambdaResourceProvider.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.resources.Resource; /** {@link ResourceProvider} for automatically configuring {@link LambdaResource}. */ -public final class LambdaResourceProvider implements ResourceProvider { +public final class LambdaResourceProvider extends CloudResourceProvider { @Override public Resource createResource(ConfigProperties config) { return LambdaResource.get(); diff --git a/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/GCPResourceProvider.java b/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/GCPResourceProvider.java index 1731e2a00..14b37d30a 100644 --- a/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/GCPResourceProvider.java +++ b/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/GCPResourceProvider.java @@ -53,13 +53,13 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ConditionalResourceProvider; import io.opentelemetry.sdk.resources.Resource; import java.util.Map; import java.util.Optional; import java.util.logging.Logger; -public class GCPResourceProvider implements ResourceProvider { +public class GCPResourceProvider implements ConditionalResourceProvider { private static final Logger LOGGER = Logger.getLogger(GCPResourceProvider.class.getSimpleName()); private final GCPPlatformDetector detector; @@ -73,6 +73,11 @@ public GCPResourceProvider() { this.detector = GCPPlatformDetector.DEFAULT_INSTANCE; } + @Override + public final boolean shouldApply(ConfigProperties config, Resource existing) { + return existing.getAttribute(CLOUD_PROVIDER) == null; + } + /** * Generates and returns the attributes for the resource. The attributes vary depending on the * type of resource detected.