Skip to content

Commit 9262a81

Browse files
authored
Update to declarative config 1.0-rc.1 (#7436)
1 parent 11e424d commit 9262a81

File tree

11 files changed

+177
-34
lines changed

11 files changed

+177
-34
lines changed

sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class DeclarativeConfigurationTest {
2323
@Test
2424
void configFile(@TempDir Path tempDir) throws IOException {
2525
String yaml =
26-
"file_format: \"0.4\"\n"
26+
"file_format: \"1.0-rc.1\"\n"
2727
+ "resource:\n"
2828
+ " attributes:\n"
2929
+ " - name: service.name\n"

sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class DeclarativeConfigurationTest {
6262
@BeforeEach
6363
void setup() throws IOException {
6464
String yaml =
65-
"file_format: \"0.4\"\n"
65+
"file_format: \"1.0-rc.1\"\n"
6666
+ "resource:\n"
6767
+ " attributes:\n"
6868
+ " - name: service.name\n"
@@ -199,7 +199,7 @@ void configFile_setResultAsGlobalTrue() {
199199
@Test
200200
void configFile_Error(@TempDir Path tempDir) throws IOException {
201201
String yaml =
202-
"file_format: \"0.4\"\n"
202+
"file_format: \"1.0-rc.1\"\n"
203203
+ "resource:\n"
204204
+ " attributes:\n"
205205
+ " - name: service.name\n"

sdk-extensions/incubator/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ dependencies {
5757
// 7. deleteJs2pTmp - delete tmp directory
5858
// ... proceed with normal sourcesJar, compileJava, etc
5959

60-
val configurationTag = "0.4.0"
60+
val configurationTag = "1.0.0-rc.1"
6161
val configurationRef = "refs/tags/v$configurationTag" // Replace with commit SHA to point to experiment with a specific commit
6262
val configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip"
6363
val buildDirectory = layout.buildDirectory.asFile.get()

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1212
import io.opentelemetry.sdk.resources.Resource;
1313
import java.util.Objects;
14+
import java.util.regex.Pattern;
1415

1516
final class OpenTelemetryConfigurationFactory
1617
implements Factory<OpenTelemetryConfigurationModel, OpenTelemetrySdk> {
1718

18-
private static final String CURRENT_SUPPORTED_FILE_FORMAT = "0.4";
19+
private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$");
1920

2021
private static final OpenTelemetryConfigurationFactory INSTANCE =
2122
new OpenTelemetryConfigurationFactory();
@@ -30,10 +31,13 @@ static OpenTelemetryConfigurationFactory getInstance() {
3031
public OpenTelemetrySdk create(
3132
OpenTelemetryConfigurationModel model, DeclarativeConfigContext context) {
3233
OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
33-
if (!CURRENT_SUPPORTED_FILE_FORMAT.equals(model.getFileFormat())) {
34+
String fileFormat = model.getFileFormat();
35+
if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {
3436
throw new DeclarativeConfigException(
35-
"Unsupported file format. Supported formats include: " + CURRENT_SUPPORTED_FILE_FORMAT);
37+
"Unsupported file format. Supported formats include 0.4, 1.0*");
3638
}
39+
// TODO(jack-berg): log warning if version is not exact match, which may result in unexpected
40+
// behavior for experimental properties.
3741

3842
if (Objects.equals(Boolean.TRUE, model.getDisabled())) {
3943
return builder.build();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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 io.opentelemetry.api.common.AttributeKey;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
13+
import io.opentelemetry.sdk.resources.Resource;
14+
import io.opentelemetry.sdk.resources.ResourceBuilder;
15+
import java.util.Collections;
16+
import java.util.UUID;
17+
18+
public class ServiceResourceDetector implements ComponentProvider<Resource> {
19+
20+
private static final AttributeKey<String> SERVICE_NAME = AttributeKey.stringKey("service.name");
21+
private static final AttributeKey<String> SERVICE_INSTANCE_ID =
22+
AttributeKey.stringKey("service.instance.id");
23+
24+
// multiple calls to this resource provider should return the same value
25+
private static final String RANDOM_SERVICE_INSTANCE_ID = UUID.randomUUID().toString();
26+
27+
@Override
28+
public Class<Resource> getType() {
29+
return Resource.class;
30+
}
31+
32+
@Override
33+
public String getName() {
34+
return "service";
35+
}
36+
37+
@Override
38+
public Resource create(DeclarativeConfigProperties config) {
39+
ResourceBuilder builder = Resource.builder();
40+
41+
ConfigProperties properties = DefaultConfigProperties.create(Collections.emptyMap());
42+
String serviceName = properties.getString("otel.service.name");
43+
if (serviceName != null) {
44+
builder.put(SERVICE_NAME, serviceName).build();
45+
}
46+
47+
builder.put(SERVICE_INSTANCE_ID, RANDOM_SERVICE_INSTANCE_ID);
48+
49+
return builder.build();
50+
}
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.sdk.extension.incubator.fileconfig.ServiceResourceDetector

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void parseAndCreate_Exception_CleansUpPartials() {
106106
// exporter with OTLP exporter, following by invalid batch exporter which references invalid
107107
// exporter "foo".
108108
String yaml =
109-
"file_format: \"0.4\"\n"
109+
"file_format: \"1.0-rc.1\"\n"
110110
+ "logger_provider:\n"
111111
+ " processors:\n"
112112
+ " - batch:\n"
@@ -133,7 +133,7 @@ void parseAndCreate_Exception_CleansUpPartials() {
133133
@Test
134134
void parseAndCreate_EmptyComponentProviderConfig() {
135135
String yaml =
136-
"file_format: \"0.4\"\n"
136+
"file_format: \"1.0-rc.1\"\n"
137137
+ "logger_provider:\n"
138138
+ " processors:\n"
139139
+ " - test:\n"
@@ -151,7 +151,7 @@ void parseAndCreate_EmptyComponentProviderConfig() {
151151
@Test
152152
void create_ModelCustomizer() {
153153
OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel();
154-
model.withFileFormat("0.4");
154+
model.withFileFormat("1.0-rc.1");
155155
model.withTracerProvider(
156156
new TracerProviderModel()
157157
.withProcessors(

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void parse_BadInputStream() {
113113
void parse_KitchenSinkExampleFile() throws IOException {
114114
OpenTelemetryConfigurationModel expected = new OpenTelemetryConfigurationModel();
115115

116-
expected.withFileFormat("0.4");
116+
expected.withFileFormat("1.0-rc.1");
117117
expected.withDisabled(false);
118118
expected.withLogLevel("info");
119119

@@ -171,9 +171,9 @@ void parse_KitchenSinkExampleFile() throws IOException {
171171
new ExperimentalResourceDetectorModel()
172172
.withAdditionalProperty("host", null),
173173
new ExperimentalResourceDetectorModel()
174-
.withAdditionalProperty("os", null),
174+
.withAdditionalProperty("process", null),
175175
new ExperimentalResourceDetectorModel()
176-
.withAdditionalProperty("process", null))))
176+
.withAdditionalProperty("service", null))))
177177
.withSchemaUrl("https://opentelemetry.io/schemas/1.16.0");
178178
expected.withResource(resource);
179179

@@ -705,7 +705,7 @@ void parse_KitchenSinkExampleFile() throws IOException {
705705
OpenTelemetryConfigurationModel config = DeclarativeConfiguration.parse(configExampleFile);
706706

707707
// General config
708-
assertThat(config.getFileFormat()).isEqualTo("0.4");
708+
assertThat(config.getFileFormat()).isEqualTo("1.0-rc.1");
709709
assertThat(config.getResource()).isEqualTo(resource);
710710
assertThat(config.getAttributeLimits()).isEqualTo(attributeLimits);
711711
assertThat(config.getPropagator()).isEqualTo(propagator);
@@ -770,7 +770,7 @@ void parse_KitchenSinkExampleFile() throws IOException {
770770
@Test
771771
void parse_nullValuesParsedToEmptyObjects() {
772772
String objectPlaceholderString =
773-
"file_format: \"0.4\"\n"
773+
"file_format: \"1.0-rc.1\"\n"
774774
+ "tracer_provider:\n"
775775
+ " processors:\n"
776776
+ " - batch:\n"
@@ -788,7 +788,7 @@ void parse_nullValuesParsedToEmptyObjects() {
788788
new ByteArrayInputStream(objectPlaceholderString.getBytes(StandardCharsets.UTF_8)));
789789

790790
String noOjbectPlaceholderString =
791-
"file_format: \"0.4\"\n"
791+
"file_format: \"1.0-rc.1\"\n"
792792
+ "tracer_provider:\n"
793793
+ " processors:\n"
794794
+ " - batch:\n"
@@ -986,7 +986,7 @@ private static Map<String, Object> mapOf(Map.Entry<String, ?>... entries) {
986986
@Test
987987
void read_WithEnvironmentVariables() {
988988
String yaml =
989-
"file_format: \"0.4\"\n"
989+
"file_format: \"1.0-rc.1\"\n"
990990
+ "tracer_provider:\n"
991991
+ " processors:\n"
992992
+ " - batch:\n"
@@ -1005,7 +1005,7 @@ void read_WithEnvironmentVariables() {
10051005
assertThat(model)
10061006
.isEqualTo(
10071007
new OpenTelemetryConfigurationModel()
1008-
.withFileFormat("0.4")
1008+
.withFileFormat("1.0-rc.1")
10091009
.withTracerProvider(
10101010
new TracerProviderModel()
10111011
.withProcessors(

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
99
import static io.opentelemetry.sdk.trace.samplers.Sampler.alwaysOn;
10+
import static org.assertj.core.api.Assertions.assertThatCode;
1011
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1112

1213
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
@@ -63,8 +64,12 @@
6364
import java.util.Arrays;
6465
import java.util.Collections;
6566
import java.util.List;
67+
import java.util.stream.Stream;
6668
import org.junit.jupiter.api.Test;
6769
import org.junit.jupiter.api.extension.RegisterExtension;
70+
import org.junit.jupiter.params.ParameterizedTest;
71+
import org.junit.jupiter.params.provider.Arguments;
72+
import org.junit.jupiter.params.provider.MethodSource;
6873

6974
class OpenTelemetryConfigurationFactoryTest {
7075

@@ -74,23 +79,41 @@ class OpenTelemetryConfigurationFactoryTest {
7479
new DeclarativeConfigContext(
7580
SpiHelper.create(OpenTelemetryConfigurationFactoryTest.class.getClassLoader()));
7681

77-
@Test
78-
void create_InvalidFileFormat() {
79-
List<OpenTelemetryConfigurationModel> testCases =
80-
Arrays.asList(
81-
new OpenTelemetryConfigurationModel(),
82-
new OpenTelemetryConfigurationModel().withFileFormat("1"));
82+
@ParameterizedTest
83+
@MethodSource("fileFormatArgs")
84+
void create_FileFormat(String fileFormat, boolean isValid) {
85+
OpenTelemetryConfigurationModel model =
86+
new OpenTelemetryConfigurationModel().withFileFormat(fileFormat);
8387

84-
List<Closeable> closeables = new ArrayList<>();
85-
for (OpenTelemetryConfigurationModel testCase : testCases) {
88+
if (isValid) {
89+
assertThatCode(() -> OpenTelemetryConfigurationFactory.getInstance().create(model, context))
90+
.doesNotThrowAnyException();
91+
} else {
8692
assertThatThrownBy(
87-
() -> OpenTelemetryConfigurationFactory.getInstance().create(testCase, context))
93+
() -> OpenTelemetryConfigurationFactory.getInstance().create(model, context))
8894
.isInstanceOf(DeclarativeConfigException.class)
89-
.hasMessage("Unsupported file format. Supported formats include: 0.4");
90-
cleanup.addCloseables(closeables);
95+
.hasMessage("Unsupported file format. Supported formats include 0.4, 1.0*");
9196
}
9297
}
9398

99+
private static Stream<Arguments> fileFormatArgs() {
100+
return Stream.of(
101+
// Invalid file formats
102+
Arguments.of(null, false),
103+
Arguments.of("0.3", false),
104+
Arguments.of("a0.4", false),
105+
Arguments.of("0.4a", false),
106+
Arguments.of("foo", false),
107+
Arguments.of("1.0-rc.a", false),
108+
Arguments.of("1.0.0", false),
109+
Arguments.of("1.0.3", false),
110+
// Valid file formats
111+
Arguments.of("0.4", true),
112+
Arguments.of("1.0-rc.1", true),
113+
Arguments.of("1.0-rc.2", true),
114+
Arguments.of("1.0", true));
115+
}
116+
94117
@Test
95118
void create_Defaults() {
96119
List<Closeable> closeables = new ArrayList<>();
@@ -99,7 +122,7 @@ void create_Defaults() {
99122

100123
OpenTelemetrySdk sdk =
101124
OpenTelemetryConfigurationFactory.getInstance()
102-
.create(new OpenTelemetryConfigurationModel().withFileFormat("0.4"), context);
125+
.create(new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.1"), context);
103126
cleanup.addCloseable(sdk);
104127
cleanup.addCloseables(closeables);
105128

@@ -116,7 +139,7 @@ void create_Disabled() {
116139
OpenTelemetryConfigurationFactory.getInstance()
117140
.create(
118141
new OpenTelemetryConfigurationModel()
119-
.withFileFormat("0.4")
142+
.withFileFormat("1.0-rc.1")
120143
.withDisabled(true)
121144
// Logger provider configuration should be ignored since SDK is disabled
122145
.withLoggerProvider(
@@ -210,7 +233,7 @@ void create_Configured() {
210233
OpenTelemetryConfigurationFactory.getInstance()
211234
.create(
212235
new OpenTelemetryConfigurationModel()
213-
.withFileFormat("0.4")
236+
.withFileFormat("1.0-rc.1")
214237
.withPropagator(
215238
new PropagatorModel()
216239
.withCompositeList("tracecontext,baggage,ottrace,b3multi,b3,jaeger"))
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)