Skip to content

Commit 2859205

Browse files
authored
Declarative config: Cloud component providers (open-telemetry#2014)
1 parent b351839 commit 2859205

File tree

31 files changed

+395
-11
lines changed

31 files changed

+395
-11
lines changed

aws-resources/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.aws.resource")
99

1010
dependencies {
1111
api("io.opentelemetry:opentelemetry-api")
12+
compileOnly("io.opentelemetry:opentelemetry-api-incubator")
1213
api("io.opentelemetry:opentelemetry-sdk")
1314

1415
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
@@ -20,6 +21,7 @@ dependencies {
2021
implementation("com.squareup.okhttp3:okhttp")
2122

2223
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
24+
testImplementation("io.opentelemetry:opentelemetry-api-incubator")
2325
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
2426

2527
testImplementation("com.linecorp.armeria:armeria-junit5")
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.aws.resource.internal;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.contrib.aws.resource.BeanstalkResource;
10+
import io.opentelemetry.contrib.aws.resource.Ec2Resource;
11+
import io.opentelemetry.contrib.aws.resource.EcsResource;
12+
import io.opentelemetry.contrib.aws.resource.EksResource;
13+
import io.opentelemetry.contrib.aws.resource.LambdaResource;
14+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
15+
import io.opentelemetry.sdk.resources.Resource;
16+
import io.opentelemetry.sdk.resources.ResourceBuilder;
17+
18+
public class AwsResourceDetector implements ComponentProvider<Resource> {
19+
20+
@Override
21+
public Class<Resource> getType() {
22+
return Resource.class;
23+
}
24+
25+
@Override
26+
public String getName() {
27+
return "aws";
28+
}
29+
30+
@Override
31+
public Resource create(DeclarativeConfigProperties config) {
32+
ResourceBuilder builder = Resource.builder();
33+
builder.putAll(BeanstalkResource.get());
34+
builder.putAll(Ec2Resource.get());
35+
builder.putAll(EcsResource.get());
36+
builder.putAll(EksResource.get());
37+
builder.putAll(LambdaResource.get());
38+
return builder.build();
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.contrib.aws.resource.internal.AwsResourceDetector
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.aws.resource;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.common.ComponentLoader;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import org.junit.jupiter.api.Test;
13+
14+
class ResourceComponentProviderTest {
15+
16+
@Test
17+
@SuppressWarnings("rawtypes")
18+
void providerIsLoaded() {
19+
Iterable<ComponentProvider> providers =
20+
ComponentLoader.forClassLoader(ResourceComponentProviderTest.class.getClassLoader())
21+
.load(ComponentProvider.class);
22+
assertThat(providers).extracting(ComponentProvider::getName).containsExactly("aws");
23+
}
24+
}

azure-resources/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ java {
1515

1616
dependencies {
1717
api("io.opentelemetry:opentelemetry-api")
18+
compileOnly("io.opentelemetry:opentelemetry-api-incubator")
1819
api("io.opentelemetry:opentelemetry-sdk")
1920

2021
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
@@ -26,6 +27,7 @@ dependencies {
2627

2728
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
2829
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
30+
testImplementation("io.opentelemetry:opentelemetry-api-incubator")
2931
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
3032

3133
// testImplementation("org.mockito:mockito-core")

azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAksResourceProvider.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_AKS;
99
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.K8S_CLUSTER_NAME;
1010

11-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1211
import io.opentelemetry.sdk.resources.Resource;
1312
import java.util.HashMap;
1413
import java.util.Map;
@@ -56,12 +55,12 @@ public AzureAksResourceProvider() {
5655
@Override
5756
public int order() {
5857
// run after the fast cloud resource providers that only check environment variables
59-
// and before the AKS provider
58+
// and before the VM provider
6059
return 100;
6160
}
6261

6362
@Override
64-
public Resource createResource(ConfigProperties configProperties) {
63+
public Resource createResource() {
6564
if (environment.get(KUBERNETES_SERVICE_HOST) == null) {
6665
return Resource.empty();
6766
}

azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureAppServiceResourceProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import io.opentelemetry.api.common.Attributes;
1818
import io.opentelemetry.api.common.AttributesBuilder;
1919
import io.opentelemetry.api.internal.StringUtils;
20-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
2120
import io.opentelemetry.sdk.resources.Resource;
2221
import java.util.HashMap;
2322
import java.util.Map;
@@ -60,7 +59,7 @@ public AzureAppServiceResourceProvider() {
6059
}
6160

6261
@Override
63-
public Resource createResource(ConfigProperties config) {
62+
public Resource createResource() {
6463
return Resource.create(getAttributes());
6564
}
6665

azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureContainersResourceProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import io.opentelemetry.api.common.AttributeKey;
1313
import io.opentelemetry.api.common.Attributes;
1414
import io.opentelemetry.api.common.AttributesBuilder;
15-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1615
import io.opentelemetry.sdk.resources.Resource;
1716
import java.util.HashMap;
1817
import java.util.Map;
@@ -45,7 +44,7 @@ public AzureContainersResourceProvider() {
4544
}
4645

4746
@Override
48-
public Resource createResource(ConfigProperties config) {
47+
public Resource createResource() {
4948
return Resource.create(getAttributes());
5049
}
5150

azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureFunctionsResourceProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import io.opentelemetry.api.common.AttributeKey;
1616
import io.opentelemetry.api.common.Attributes;
1717
import io.opentelemetry.api.common.AttributesBuilder;
18-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1918
import io.opentelemetry.sdk.resources.Resource;
2019
import java.util.HashMap;
2120
import java.util.Map;
@@ -47,7 +46,7 @@ public AzureFunctionsResourceProvider() {
4746
}
4847

4948
@Override
50-
public Resource createResource(ConfigProperties config) {
49+
public Resource createResource() {
5150
return Resource.create(getAttributes());
5251
}
5352

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.azure.resource;
7+
8+
import io.opentelemetry.api.common.Attributes;
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.resources.ResourceBuilder;
13+
14+
public class AzureResourceDetector implements ComponentProvider<Resource> {
15+
16+
@Override
17+
public Class<Resource> getType() {
18+
return Resource.class;
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return "azure";
24+
}
25+
26+
@Override
27+
public Resource create(DeclarativeConfigProperties config) {
28+
Builder builder = new Builder();
29+
builder.add(new AzureFunctionsResourceProvider());
30+
builder.add(new AzureAppServiceResourceProvider());
31+
builder.add(new AzureContainersResourceProvider());
32+
builder.addIfEmpty(new AzureAksResourceProvider());
33+
builder.addIfEmpty(new AzureVmResourceProvider());
34+
return builder.builder.build();
35+
}
36+
37+
private static class Builder {
38+
final ResourceBuilder builder = Resource.builder();
39+
int attributesCount = 0;
40+
41+
private void add(CloudResourceProvider provider) {
42+
Attributes attributes = provider.createResource().getAttributes();
43+
builder.putAll(attributes);
44+
attributesCount += attributes.size();
45+
}
46+
47+
private void addIfEmpty(CloudResourceProvider provider) {
48+
if (attributesCount == 0) {
49+
add(provider);
50+
}
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)