Skip to content

Commit 5e929d3

Browse files
committed
Service detector sets service.instance.id
1 parent 34b9277 commit 5e929d3

File tree

2 files changed

+73
-2
lines changed

2 files changed

+73
-2
lines changed

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ServiceResourceDetector.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1111
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1212
import io.opentelemetry.sdk.resources.Resource;
13+
import io.opentelemetry.sdk.resources.ResourceBuilder;
1314
import java.util.Collections;
15+
import java.util.UUID;
1416

1517
public class ServiceResourceDetector implements ComponentProvider<Resource> {
1618
@Override
@@ -25,11 +27,16 @@ public String getName() {
2527

2628
@Override
2729
public Resource create(DeclarativeConfigProperties config) {
30+
ResourceBuilder builder = Resource.builder();
31+
2832
ConfigProperties properties = DefaultConfigProperties.create(Collections.emptyMap());
2933
String serviceName = properties.getString("otel.service.name");
3034
if (serviceName != null) {
31-
return Resource.builder().put("service.name", serviceName).build();
35+
builder.put("service.name", serviceName).build();
3236
}
33-
return Resource.empty();
37+
38+
builder.put("service.instance.id", UUID.randomUUID().toString());
39+
40+
return builder.build();
3441
}
3542
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.sdk.extension.incubator.fileconfig;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.assertj.core.api.Assertions.assertThatCode;
10+
11+
import io.opentelemetry.api.common.AttributeKey;
12+
import io.opentelemetry.api.common.Attributes;
13+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
14+
import io.opentelemetry.sdk.resources.Resource;
15+
import java.util.Objects;
16+
import java.util.UUID;
17+
import org.junit.jupiter.api.Test;
18+
import org.junitpioneer.jupiter.ClearSystemProperty;
19+
20+
class ServiceResourceDetectorTest {
21+
22+
@Test
23+
void getTypeAndName() {
24+
ServiceResourceDetector detector = new ServiceResourceDetector();
25+
26+
assertThat(detector.getType()).isEqualTo(Resource.class);
27+
assertThat(detector.getName()).isEqualTo("service");
28+
}
29+
30+
@Test
31+
@ClearSystemProperty(key = "otel.service.name")
32+
void create_SystemPropertySet() {
33+
System.setProperty("otel.service.name", "test");
34+
35+
assertThat(new ServiceResourceDetector().create(DeclarativeConfigProperties.empty()))
36+
.satisfies(
37+
resource -> {
38+
Attributes attributes = resource.getAttributes();
39+
assertThat(attributes.get(AttributeKey.stringKey("service.name"))).isEqualTo("test");
40+
assertThatCode(
41+
() ->
42+
UUID.fromString(
43+
Objects.requireNonNull(
44+
attributes.get(AttributeKey.stringKey("service.instance.id")))))
45+
.doesNotThrowAnyException();
46+
});
47+
}
48+
49+
@Test
50+
void create_NoSystemProperty() {
51+
assertThat(new ServiceResourceDetector().create(DeclarativeConfigProperties.empty()))
52+
.satisfies(
53+
resource -> {
54+
Attributes attributes = resource.getAttributes();
55+
assertThat(attributes.get(AttributeKey.stringKey("service.name"))).isNull();
56+
assertThatCode(
57+
() ->
58+
UUID.fromString(
59+
Objects.requireNonNull(
60+
attributes.get(AttributeKey.stringKey("service.instance.id")))))
61+
.doesNotThrowAnyException();
62+
});
63+
}
64+
}

0 commit comments

Comments
 (0)