diff --git a/aws-resources/build.gradle.kts b/aws-resources/build.gradle.kts index ede0dad59..580ecb44f 100644 --- a/aws-resources/build.gradle.kts +++ b/aws-resources/build.gradle.kts @@ -9,6 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.aws.resource") dependencies { api("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") api("io.opentelemetry:opentelemetry-sdk") implementation("io.opentelemetry.semconv:opentelemetry-semconv") @@ -20,6 +21,7 @@ dependencies { implementation("com.squareup.okhttp3:okhttp") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") testImplementation("com.linecorp.armeria:armeria-junit5") diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/internal/AwsResourceDetector.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/internal/AwsResourceDetector.java new file mode 100644 index 000000000..ae4255570 --- /dev/null +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/internal/AwsResourceDetector.java @@ -0,0 +1,40 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.aws.resource.internal; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.contrib.aws.resource.BeanstalkResource; +import io.opentelemetry.contrib.aws.resource.Ec2Resource; +import io.opentelemetry.contrib.aws.resource.EcsResource; +import io.opentelemetry.contrib.aws.resource.EksResource; +import io.opentelemetry.contrib.aws.resource.LambdaResource; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; + +public class AwsResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "aws"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + ResourceBuilder builder = Resource.builder(); + builder.putAll(BeanstalkResource.get()); + builder.putAll(Ec2Resource.get()); + builder.putAll(EcsResource.get()); + builder.putAll(EksResource.get()); + builder.putAll(LambdaResource.get()); + return builder.build(); + } +} diff --git a/aws-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/aws-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..ea6d743f4 --- /dev/null +++ b/aws-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1 @@ +io.opentelemetry.contrib.aws.resource.internal.AwsResourceDetector diff --git a/aws-resources/src/test/java/io/opentelemetry/contrib/aws/resource/ResourceComponentProviderTest.java b/aws-resources/src/test/java/io/opentelemetry/contrib/aws/resource/ResourceComponentProviderTest.java new file mode 100644 index 000000000..1534aca17 --- /dev/null +++ b/aws-resources/src/test/java/io/opentelemetry/contrib/aws/resource/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.aws.resource; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).containsExactly("aws"); + } +} diff --git a/azure-resources/build.gradle.kts b/azure-resources/build.gradle.kts index 33af12d84..c17d14787 100644 --- a/azure-resources/build.gradle.kts +++ b/azure-resources/build.gradle.kts @@ -15,6 +15,7 @@ java { dependencies { api("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") api("io.opentelemetry:opentelemetry-sdk") implementation("io.opentelemetry.semconv:opentelemetry-semconv") @@ -26,6 +27,7 @@ dependencies { testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") // testImplementation("org.mockito:mockito-core") diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAksResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAksResourceProvider.java index 4d3b92280..9823c6f9e 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAksResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAksResourceProvider.java @@ -8,7 +8,6 @@ import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_AKS; import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.K8S_CLUSTER_NAME; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.util.HashMap; import java.util.Map; @@ -56,12 +55,12 @@ public AzureAksResourceProvider() { @Override public int order() { // run after the fast cloud resource providers that only check environment variables - // and before the AKS provider + // and before the VM provider return 100; } @Override - public Resource createResource(ConfigProperties configProperties) { + public Resource createResource() { if (environment.get(KUBERNETES_SERVICE_HOST) == null) { return Resource.empty(); } diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAppServiceResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAppServiceResourceProvider.java index 71cf699e6..74ad96334 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAppServiceResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAppServiceResourceProvider.java @@ -17,7 +17,6 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.internal.StringUtils; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.util.HashMap; import java.util.Map; @@ -60,7 +59,7 @@ public AzureAppServiceResourceProvider() { } @Override - public Resource createResource(ConfigProperties config) { + public Resource createResource() { return Resource.create(getAttributes()); } diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureContainersResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureContainersResourceProvider.java index 2f641148f..63d0f4428 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureContainersResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureContainersResourceProvider.java @@ -12,7 +12,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.util.HashMap; import java.util.Map; @@ -45,7 +44,7 @@ public AzureContainersResourceProvider() { } @Override - public Resource createResource(ConfigProperties config) { + public Resource createResource() { return Resource.create(getAttributes()); } diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureFunctionsResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureFunctionsResourceProvider.java index 1b86c6212..e35fe95c4 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureFunctionsResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureFunctionsResourceProvider.java @@ -15,7 +15,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.util.HashMap; import java.util.Map; @@ -47,7 +46,7 @@ public AzureFunctionsResourceProvider() { } @Override - public Resource createResource(ConfigProperties config) { + public Resource createResource() { return Resource.create(getAttributes()); } diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureResourceDetector.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureResourceDetector.java new file mode 100644 index 000000000..556e1d60c --- /dev/null +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureResourceDetector.java @@ -0,0 +1,53 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.azure.resource; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; + +public class AzureResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "azure"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + Builder builder = new Builder(); + builder.add(new AzureFunctionsResourceProvider()); + builder.add(new AzureAppServiceResourceProvider()); + builder.add(new AzureContainersResourceProvider()); + builder.addIfEmpty(new AzureAksResourceProvider()); + builder.addIfEmpty(new AzureVmResourceProvider()); + return builder.builder.build(); + } + + private static class Builder { + final ResourceBuilder builder = Resource.builder(); + int attributesCount = 0; + + private void add(CloudResourceProvider provider) { + Attributes attributes = provider.createResource().getAttributes(); + builder.putAll(attributes); + attributesCount += attributes.size(); + } + + private void addIfEmpty(CloudResourceProvider provider) { + if (attributesCount == 0) { + add(provider); + } + } + } +} diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureVmResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureVmResourceProvider.java index 139b808d4..38c983b4a 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureVmResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureVmResourceProvider.java @@ -22,7 +22,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.io.IOException; import java.util.HashMap; @@ -88,7 +87,7 @@ public int order() { } @Override - public Resource createResource(ConfigProperties config) { + public Resource createResource() { return client .get() .map(body -> parseMetadata(body, COMPUTE_MAPPING, AZURE_VM)) diff --git a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/CloudResourceProvider.java b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/CloudResourceProvider.java index 181a22889..3c7fcc862 100644 --- a/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/CloudResourceProvider.java +++ b/azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/CloudResourceProvider.java @@ -17,4 +17,12 @@ public abstract class CloudResourceProvider implements ConditionalResourceProvid public final boolean shouldApply(ConfigProperties config, Resource existing) { return existing.getAttribute(CLOUD_PROVIDER) == null; } + + @Override + public final Resource createResource(ConfigProperties config) { + // not using config in any providers + return createResource(); + } + + abstract Resource createResource(); } diff --git a/azure-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/azure-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..373780ff0 --- /dev/null +++ b/azure-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1 @@ +io.opentelemetry.contrib.azure.resource.AzureResourceDetector diff --git a/azure-resources/src/test/java/io/opentelemetry/contrib/azure/resource/ResourceComponentProviderTest.java b/azure-resources/src/test/java/io/opentelemetry/contrib/azure/resource/ResourceComponentProviderTest.java new file mode 100644 index 000000000..f04e256ff --- /dev/null +++ b/azure-resources/src/test/java/io/opentelemetry/contrib/azure/resource/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.azure.resource; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).containsExactly("azure"); + } +} diff --git a/cloudfoundry-resources/build.gradle.kts b/cloudfoundry-resources/build.gradle.kts index e768f7389..3324504b5 100644 --- a/cloudfoundry-resources/build.gradle.kts +++ b/cloudfoundry-resources/build.gradle.kts @@ -9,6 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.cloudfoundry.resources") dependencies { api("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") api("io.opentelemetry:opentelemetry-sdk") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") @@ -19,6 +20,7 @@ dependencies { testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") } diff --git a/cloudfoundry-resources/src/main/java/io/opentelemetry/contrib/cloudfoundry/resources/CloudFoundryResourceDetector.java b/cloudfoundry-resources/src/main/java/io/opentelemetry/contrib/cloudfoundry/resources/CloudFoundryResourceDetector.java new file mode 100644 index 000000000..02b9a6b09 --- /dev/null +++ b/cloudfoundry-resources/src/main/java/io/opentelemetry/contrib/cloudfoundry/resources/CloudFoundryResourceDetector.java @@ -0,0 +1,28 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.cloudfoundry.resources; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; + +public class CloudFoundryResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "cloud_foundry"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + return CloudFoundryResource.get(); + } +} diff --git a/cloudfoundry-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/cloudfoundry-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..96092ce3d --- /dev/null +++ b/cloudfoundry-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1 @@ +io.opentelemetry.contrib.cloudfoundry.resources.CloudFoundryResourceDetector diff --git a/cloudfoundry-resources/src/test/java/io/opentelemetry/contrib/cloudfoundry/resources/ResourceComponentProviderTest.java b/cloudfoundry-resources/src/test/java/io/opentelemetry/contrib/cloudfoundry/resources/ResourceComponentProviderTest.java new file mode 100644 index 000000000..2e1e434b2 --- /dev/null +++ b/cloudfoundry-resources/src/test/java/io/opentelemetry/contrib/cloudfoundry/resources/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.cloudfoundry.resources; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).containsExactly("cloud_foundry"); + } +} diff --git a/gcp-resources/build.gradle.kts b/gcp-resources/build.gradle.kts index 998c15870..cc227ed6e 100644 --- a/gcp-resources/build.gradle.kts +++ b/gcp-resources/build.gradle.kts @@ -9,6 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.gcp.resource") dependencies { api("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") api("io.opentelemetry:opentelemetry-sdk") // Provides GCP resource detection support @@ -21,6 +22,7 @@ dependencies { implementation("com.fasterxml.jackson.core:jackson-core") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") testImplementation("org.mockito:mockito-core") diff --git a/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/internal/GcpResourceDetector.java b/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/internal/GcpResourceDetector.java new file mode 100644 index 000000000..35adbeded --- /dev/null +++ b/gcp-resources/src/main/java/io/opentelemetry/contrib/gcp/resource/internal/GcpResourceDetector.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.gcp.resource.internal; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; + +public class GcpResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "gcp"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + ResourceBuilder builder = Resource.builder(); + builder.putAll(new GCPResourceProvider().getAttributes()); + return builder.build(); + } +} diff --git a/gcp-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/gcp-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..e65bbc840 --- /dev/null +++ b/gcp-resources/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1 @@ +io.opentelemetry.contrib.gcp.resource.internal.GcpResourceDetector diff --git a/gcp-resources/src/test/java/io/opentelemetry/contrib/gcp/resource/ResourceComponentProviderTest.java b/gcp-resources/src/test/java/io/opentelemetry/contrib/gcp/resource/ResourceComponentProviderTest.java new file mode 100644 index 000000000..b80d6c427 --- /dev/null +++ b/gcp-resources/src/test/java/io/opentelemetry/contrib/gcp/resource/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.gcp.resource; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).containsExactly("gcp"); + } +} diff --git a/maven-extension/build.gradle.kts b/maven-extension/build.gradle.kts index d14faa992..a2972d0ea 100644 --- a/maven-extension/build.gradle.kts +++ b/maven-extension/build.gradle.kts @@ -16,6 +16,7 @@ dependencies { compileOnly("javax.inject:javax.inject:1") implementation("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") implementation("io.opentelemetry:opentelemetry-sdk") implementation("io.opentelemetry:opentelemetry-sdk-trace") implementation("io.opentelemetry:opentelemetry-sdk-metrics") @@ -32,6 +33,7 @@ dependencies { compileOnly("org.apache.maven:maven-core:3.5.0") // do not auto-update, support older mvn versions compileOnly("org.slf4j:slf4j-api") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") testImplementation("org.apache.maven:maven-core:3.5.0") testImplementation("org.slf4j:slf4j-simple") } diff --git a/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceDetector.java b/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceDetector.java new file mode 100644 index 000000000..47ff50759 --- /dev/null +++ b/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceDetector.java @@ -0,0 +1,28 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.maven.resources; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; + +public class MavenResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "maven"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + return MavenResourceProvider.create(); + } +} diff --git a/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceProvider.java b/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceProvider.java index 66e7b028b..9b75d11d0 100644 --- a/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceProvider.java +++ b/maven-extension/src/main/java/io/opentelemetry/maven/resources/MavenResourceProvider.java @@ -23,6 +23,10 @@ public class MavenResourceProvider implements ResourceProvider { @Override public Resource createResource(ConfigProperties config) { + return create(); + } + + static Resource create() { return Resource.builder() .put(ServiceAttributes.SERVICE_NAME, MavenOtelSemanticAttributes.SERVICE_NAME_VALUE) .put(ServiceAttributes.SERVICE_VERSION, getMavenRuntimeVersion()) diff --git a/maven-extension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/maven-extension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider new file mode 100644 index 000000000..baac89a6a --- /dev/null +++ b/maven-extension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider @@ -0,0 +1 @@ +io.opentelemetry.maven.resources.MavenResourceDetector diff --git a/maven-extension/src/test/java/io/opentelemetry/maven/resources/ResourceComponentProviderTest.java b/maven-extension/src/test/java/io/opentelemetry/maven/resources/ResourceComponentProviderTest.java new file mode 100644 index 000000000..e992f24da --- /dev/null +++ b/maven-extension/src/test/java/io/opentelemetry/maven/resources/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.maven.resources; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).contains("maven"); + } +} diff --git a/resource-providers/build.gradle.kts b/resource-providers/build.gradle.kts index 1dc20be51..4dc0a28d5 100644 --- a/resource-providers/build.gradle.kts +++ b/resource-providers/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { compileOnly("com.google.auto.service:auto-service") compileOnly("io.opentelemetry:opentelemetry-api") + compileOnly("io.opentelemetry:opentelemetry-api-incubator") compileOnly("io.opentelemetry:opentelemetry-sdk") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") @@ -18,4 +19,5 @@ dependencies { testImplementation("io.opentelemetry.semconv:opentelemetry-semconv") testImplementation("com.google.auto.service:auto-service") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-api-incubator") } diff --git a/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerResourceDetector.java b/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerResourceDetector.java new file mode 100644 index 000000000..7d5d399c4 --- /dev/null +++ b/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerResourceDetector.java @@ -0,0 +1,31 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.resourceproviders; + +import com.google.auto.service.AutoService; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.resources.Resource; + +@SuppressWarnings("rawtypes") +@AutoService(ComponentProvider.class) +public class AppServerResourceDetector implements ComponentProvider { + + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "app_server"; + } + + @Override + public Resource create(DeclarativeConfigProperties config) { + return new AppServerServiceNameProvider().create(); + } +} diff --git a/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerServiceNameProvider.java b/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerServiceNameProvider.java index 505dbef84..5ce7196f2 100644 --- a/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerServiceNameProvider.java +++ b/resource-providers/src/main/java/io/opentelemetry/contrib/resourceproviders/AppServerServiceNameProvider.java @@ -38,6 +38,10 @@ public AppServerServiceNameProvider() { @Override public Resource createResource(ConfigProperties config) { + return create(); + } + + Resource create() { String serviceName = detectServiceName(); if (serviceName == null) { logger.log( diff --git a/resource-providers/src/test/java/io/opentelemetry/contrib/resourceproviders/ResourceComponentProviderTest.java b/resource-providers/src/test/java/io/opentelemetry/contrib/resourceproviders/ResourceComponentProviderTest.java new file mode 100644 index 000000000..91ea7b216 --- /dev/null +++ b/resource-providers/src/test/java/io/opentelemetry/contrib/resourceproviders/ResourceComponentProviderTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.resourceproviders; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import org.junit.jupiter.api.Test; + +class ResourceComponentProviderTest { + + @Test + @SuppressWarnings("rawtypes") + void providerIsLoaded() { + Iterable providers = + ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader()) + .load(ComponentProvider.class); + assertThat(providers).extracting(ComponentProvider::getName).contains("app_server"); + } +}