Skip to content

Commit 641bffe

Browse files
committed
azure component provider
1 parent 9eb3634 commit 641bffe

File tree

6 files changed

+85
-2
lines changed

6 files changed

+85
-2
lines changed

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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public AzureAksResourceProvider() {
5656
@Override
5757
public int order() {
5858
// run after the fast cloud resource providers that only check environment variables
59-
// and before the AKS provider
59+
// and before the VM provider
6060
return 100;
6161
}
6262

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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.ResourceProvider;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import io.opentelemetry.sdk.resources.Resource;
13+
import io.opentelemetry.sdk.resources.ResourceBuilder;
14+
15+
public class AzureResourceDetector implements ComponentProvider<Resource> {
16+
17+
@Override
18+
public Class<Resource> getType() {
19+
return Resource.class;
20+
}
21+
22+
@Override
23+
public String getName() {
24+
return "azure";
25+
}
26+
27+
@Override
28+
public Resource create(DeclarativeConfigProperties config) {
29+
Builder builder = new Builder();
30+
builder.add(new AzureFunctionsResourceProvider());
31+
builder.add(new AzureAppServiceResourceProvider());
32+
builder.add(new AzureContainersResourceProvider());
33+
builder.addIfEmpty(new AzureAksResourceProvider());
34+
builder.addIfEmpty(new AzureVmResourceProvider());
35+
return builder.builder.build();
36+
}
37+
38+
static class Builder {
39+
ResourceBuilder builder = Resource.builder();
40+
int attributesCount = 0;
41+
42+
@SuppressWarnings("NullAway")
43+
private void add(
44+
ResourceProvider provider) {
45+
Attributes attributes = provider.createResource(null).getAttributes();
46+
builder.putAll(attributes);
47+
attributesCount += attributes.size();
48+
}
49+
50+
private void addIfEmpty(
51+
ResourceProvider provider) {
52+
if (attributesCount == 0) {
53+
add(provider);
54+
}
55+
}
56+
57+
}
58+
59+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public AzureVmResourceProvider() {
8484
public int order() {
8585
// run after the fast cloud resource providers that only check environment variables
8686
// and after the AKS provider
87-
return 100;
87+
return 101;
8888
}
8989

9090
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.contrib.azure.resource.AzureResourceDetector
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.opentelemetry.contrib.azure.resource;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
6+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
7+
import java.util.List;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class ComponentProviderTest {
11+
12+
@Test
13+
@SuppressWarnings("rawtypes")
14+
void providerIsLoaded() {
15+
List<ComponentProvider> providers = SpiHelper.create(
16+
ComponentProviderTest.class.getClassLoader())
17+
.load(ComponentProvider.class);
18+
assertThat(providers).extracting(ComponentProvider::getName)
19+
.containsExactly("azure");
20+
}
21+
}

0 commit comments

Comments
 (0)