Skip to content

Commit 3c0e39d

Browse files
committed
Update to latest unreleased opentelemetry-configuration
1 parent d576453 commit 3c0e39d

File tree

23 files changed

+523
-197
lines changed

23 files changed

+523
-197
lines changed

api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
1818
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
1919
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
20+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
2021
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel;
2122
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
2223
import java.io.ByteArrayInputStream;
@@ -72,7 +73,9 @@ void getInstrumentationConfigModel_UnsetConfig() {
7273
@Test
7374
void getInstrumentationConfigModel_EmptyConfig() {
7475
ConfigProvider configProvider =
75-
withInstrumentationConfig("my_instrumentation_library", Collections.emptyMap());
76+
withInstrumentationConfig(
77+
"my_instrumentation_library",
78+
new ExperimentalLanguageSpecificInstrumentationPropertyModel());
7679

7780
assertThat(
7881
InstrumentationConfigUtil.getInstrumentationConfigModel(
@@ -85,21 +88,20 @@ void getInstrumentationConfigModel_KitchenSink() {
8588
ConfigProvider configProvider =
8689
withInstrumentationConfig(
8790
"my_instrumentation_library",
88-
ImmutableMap.<String, Object>builder()
89-
.put("string_property", "value")
90-
.put("boolean_property", true)
91-
.put("long_property", 1L)
92-
.put("double_property", 1.1d)
93-
.put("string_list_property", Arrays.asList("val1", "val2"))
94-
.put("boolean_list_property", Arrays.asList(true, false))
95-
.put("long_list_property", Arrays.asList(1L, 2L))
96-
.put("double_list_property", Arrays.asList(1.1d, 2.2d))
97-
.put("map_property", Collections.singletonMap("childKey", "val"))
98-
.put(
91+
new ExperimentalLanguageSpecificInstrumentationPropertyModel()
92+
.withAdditionalProperty("string_property", "value")
93+
.withAdditionalProperty("boolean_property", true)
94+
.withAdditionalProperty("long_property", 1L)
95+
.withAdditionalProperty("double_property", 1.1d)
96+
.withAdditionalProperty("string_list_property", Arrays.asList("val1", "val2"))
97+
.withAdditionalProperty("boolean_list_property", Arrays.asList(true, false))
98+
.withAdditionalProperty("long_list_property", Arrays.asList(1L, 2L))
99+
.withAdditionalProperty("double_list_property", Arrays.asList(1.1d, 2.2d))
100+
.withAdditionalProperty("map_property", Collections.singletonMap("childKey", "val"))
101+
.withAdditionalProperty(
99102
"structured_list_property",
100103
Collections.singletonList(
101-
ImmutableMap.of("key", "the_key", "value", "the_value")))
102-
.build());
104+
ImmutableMap.of("key", "the_key", "value", "the_value"))));
103105

104106
Model expected = new Model();
105107
expected.stringProperty = "value";
@@ -123,7 +125,8 @@ void getInstrumentationConfigModel_KitchenSink() {
123125
}
124126

125127
private static ConfigProvider withInstrumentationConfig(
126-
String instrumentationName, Map<String, Object> instrumentationConfig) {
128+
String instrumentationName,
129+
ExperimentalLanguageSpecificInstrumentationPropertyModel instrumentationConfig) {
127130
ExperimentalLanguageSpecificInstrumentationModel javaConfig =
128131
new ExperimentalLanguageSpecificInstrumentationModel();
129132
javaConfig.setAdditionalProperty(instrumentationName, instrumentationConfig);

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpDeclarativeConfigUtil.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ public static void configureOtlpExporterBuilder(
9595
setTimeout.accept(Duration.ofMillis(timeoutMs));
9696
}
9797

98-
String certificatePath = config.getString("certificate_file");
99-
String clientKeyPath = config.getString("client_key_file");
100-
String clientKeyChainPath = config.getString("client_certificate_file");
98+
DeclarativeConfigProperties tls =
99+
config.getStructured("tls", DeclarativeConfigProperties.empty());
100+
String certificatePath = tls.getString("ca_file");
101+
String clientKeyPath = tls.getString("key_file");
102+
String clientKeyChainPath = tls.getString("cert_file");
101103

102104
if (clientKeyPath != null && clientKeyChainPath == null) {
103105
throw new ConfigurationException(

sdk-extensions/incubator/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import de.undercouch.gradle.tasks.download.Download
2+
import java.io.FileFilter
23

34
plugins {
45
id("otel.java-conventions")
@@ -59,7 +60,7 @@ dependencies {
5960
// ... proceed with normal sourcesJar, compileJava, etc
6061

6162
val configurationTag = "1.0.0-rc.1"
62-
val configurationRef = "refs/tags/v$configurationTag" // Replace with commit SHA to point to experiment with a specific commit
63+
val configurationRef = "be1a43de6745da73ce1b6339c34b1e260e5b135b" // Replace with commit SHA to point to experiment with a specific commitco
6364
val configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip"
6465
val buildDirectory = layout.buildDirectory.asFile.get()
6566

@@ -111,6 +112,10 @@ jsonSchema2Pojo {
111112

112113
// Append Model as suffix to the generated classes.
113114
classNameSuffix = "Model"
115+
116+
fileFilter = FileFilter {
117+
it.path.endsWith(".json")
118+
}
114119
}
115120

116121
val generateJsonSchema2Pojo = tasks.getByName("generateJsonSchema2Pojo")
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableProbabilitySamplerModel;
9+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableSamplerModel;
10+
import io.opentelemetry.sdk.extension.incubator.trace.samplers.ComposableSampler;
11+
import java.util.Map;
12+
13+
final class ComposableSamplerFactory
14+
implements Factory<ExperimentalComposableSamplerModel, ComposableSampler> {
15+
16+
private static final ComposableSamplerFactory INSTANCE = new ComposableSamplerFactory();
17+
18+
private ComposableSamplerFactory() {}
19+
20+
static ComposableSamplerFactory getInstance() {
21+
return INSTANCE;
22+
}
23+
24+
@Override
25+
public ComposableSampler create(
26+
ExperimentalComposableSamplerModel model, DeclarativeConfigContext context) {
27+
if (model.getAlwaysOn() != null) {
28+
return ComposableSampler.alwaysOn();
29+
}
30+
if (model.getAlwaysOff() != null) {
31+
return ComposableSampler.alwaysOff();
32+
}
33+
ExperimentalComposableProbabilitySamplerModel probability = model.getProbability();
34+
if (probability != null) {
35+
Double ratio = probability.getRatio();
36+
if (ratio == null) {
37+
ratio = 1.0d;
38+
}
39+
return ComposableSampler.probability(ratio);
40+
}
41+
Map.Entry<String, ?> keyValue =
42+
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), "composable sampler");
43+
return context.loadComponent(ComposableSampler.class, keyValue.getKey(), keyValue.getValue());
44+
}
45+
}

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ static <T> T requireNonNull(@Nullable T object, String description) {
2929
return object;
3030
}
3131

32-
static Map.Entry<String, Object> getSingletonMapEntry(
33-
Map<String, Object> additionalProperties, String resourceName) {
32+
static <T> Map.Entry<String, T> getSingletonMapEntry(
33+
Map<String, T> additionalProperties, String resourceName) {
3434
if (additionalProperties.isEmpty()) {
3535
throw new DeclarativeConfigException(resourceName + " must be set");
3636
}
@@ -48,4 +48,21 @@ static Map.Entry<String, Object> getSingletonMapEntry(
4848
new IllegalStateException(
4949
"Missing " + resourceName + ". This is a programming error."));
5050
}
51+
52+
static void requireNullResource(
53+
@Nullable Object resource, String resourceName, Map<String, ?> additionalProperties) {
54+
if (resource != null) {
55+
throw new DeclarativeConfigException(
56+
"Invalid configuration - multiple "
57+
+ resourceName
58+
+ "s set: "
59+
+ additionalProperties.keySet().stream().collect(joining(",", "[", "]")));
60+
}
61+
}
62+
63+
static void requireNonNullResource(@Nullable Object resource, String resourceName) {
64+
if (resource == null) {
65+
throw new DeclarativeConfigException(resourceName + " must be set");
66+
}
67+
}
5168
}

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

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55

66
package io.opentelemetry.sdk.extension.incubator.fileconfig;
77

8+
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNullResource;
9+
810
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel;
911
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
1012
import java.util.Map;
1113

1214
final class LogRecordExporterFactory implements Factory<LogRecordExporterModel, LogRecordExporter> {
1315

16+
private static final String RESOURCE_NAME = "log record exporter";
17+
1418
private static final LogRecordExporterFactory INSTANCE = new LogRecordExporterFactory();
1519

1620
private LogRecordExporterFactory() {}
@@ -22,17 +26,37 @@ static LogRecordExporterFactory getInstance() {
2226
@Override
2327
public LogRecordExporter create(LogRecordExporterModel model, DeclarativeConfigContext context) {
2428

25-
model.getAdditionalProperties().compute("otlp_http", (k, v) -> model.getOtlpHttp());
26-
model.getAdditionalProperties().compute("otlp_grpc", (k, v) -> model.getOtlpGrpc());
27-
model
28-
.getAdditionalProperties()
29-
.compute("otlp_file/development", (k, v) -> model.getOtlpFileDevelopment());
30-
model.getAdditionalProperties().compute("console", (k, v) -> model.getConsole());
29+
String key = null;
30+
Object resource = null;
31+
32+
if (model.getOtlpHttp() != null) {
33+
key = "otlp_http";
34+
resource = model.getOtlpHttp();
35+
}
36+
if (model.getOtlpGrpc() != null) {
37+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
38+
key = "otlp_grpc";
39+
resource = model.getOtlpGrpc();
40+
}
41+
if (model.getOtlpFileDevelopment() != null) {
42+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
43+
key = "otlp_file/development";
44+
resource = model.getOtlpFileDevelopment();
45+
}
46+
if (model.getConsole() != null) {
47+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
48+
key = "console";
49+
resource = model.getConsole();
50+
}
51+
if (key == null || resource == null) {
52+
Map.Entry<String, ?> keyValue =
53+
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), RESOURCE_NAME);
54+
key = keyValue.getKey();
55+
resource = keyValue.getValue();
56+
}
3157

32-
Map.Entry<String, Object> keyValue =
33-
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), "log record exporter");
3458
LogRecordExporter logRecordExporter =
35-
context.loadComponent(LogRecordExporter.class, keyValue.getKey(), keyValue.getValue());
59+
context.loadComponent(LogRecordExporter.class, key, resource);
3660
return context.addCloseable(logRecordExporter);
3761
}
3862
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel;
1010
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel;
1111
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorPropertyModel;
1213
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleLogRecordProcessorModel;
1314
import io.opentelemetry.sdk.logs.LogRecordProcessor;
1415
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
@@ -71,7 +72,7 @@ public LogRecordProcessor create(
7172
return context.addCloseable(SimpleLogRecordProcessor.create(logRecordExporter));
7273
}
7374

74-
Map.Entry<String, Object> keyValue =
75+
Map.Entry<String, LogRecordProcessorPropertyModel> keyValue =
7576
FileConfigUtil.getSingletonMapEntry(
7677
model.getAdditionalProperties(), "log record processor");
7778
LogRecordProcessor logRecordProcessor =

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

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55

66
package io.opentelemetry.sdk.extension.incubator.fileconfig;
77

8+
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNullResource;
9+
810
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PushMetricExporterModel;
911
import io.opentelemetry.sdk.metrics.export.MetricExporter;
1012
import java.util.Map;
1113

1214
final class MetricExporterFactory implements Factory<PushMetricExporterModel, MetricExporter> {
1315

16+
private static final String RESOURCE_NAME = "metric exporter";
17+
1418
private static final MetricExporterFactory INSTANCE = new MetricExporterFactory();
1519

1620
private MetricExporterFactory() {}
@@ -22,17 +26,36 @@ static MetricExporterFactory getInstance() {
2226
@Override
2327
public MetricExporter create(PushMetricExporterModel model, DeclarativeConfigContext context) {
2428

25-
model.getAdditionalProperties().compute("otlp_http", (k, v) -> model.getOtlpHttp());
26-
model.getAdditionalProperties().compute("otlp_grpc", (k, v) -> model.getOtlpGrpc());
27-
model
28-
.getAdditionalProperties()
29-
.compute("otlp_file/development", (k, v) -> model.getOtlpFileDevelopment());
30-
model.getAdditionalProperties().compute("console", (k, v) -> model.getConsole());
31-
32-
Map.Entry<String, Object> keyValue =
33-
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), "metric exporter");
34-
MetricExporter metricExporter =
35-
context.loadComponent(MetricExporter.class, keyValue.getKey(), keyValue.getValue());
29+
String key = null;
30+
Object resource = null;
31+
32+
if (model.getOtlpHttp() != null) {
33+
key = "otlp_http";
34+
resource = model.getOtlpHttp();
35+
}
36+
if (model.getOtlpGrpc() != null) {
37+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
38+
key = "otlp_grpc";
39+
resource = model.getOtlpGrpc();
40+
}
41+
if (model.getOtlpFileDevelopment() != null) {
42+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
43+
key = "otlp_file/development";
44+
resource = model.getOtlpFileDevelopment();
45+
}
46+
if (model.getConsole() != null) {
47+
requireNullResource(resource, RESOURCE_NAME, model.getAdditionalProperties());
48+
key = "console";
49+
resource = model.getConsole();
50+
}
51+
if (key == null || resource == null) {
52+
Map.Entry<String, ?> keyValue =
53+
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), RESOURCE_NAME);
54+
key = keyValue.getKey();
55+
resource = keyValue.getValue();
56+
}
57+
58+
MetricExporter metricExporter = context.loadComponent(MetricExporter.class, key, resource);
3659
return context.addCloseable(metricExporter);
3760
}
3861
}

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55

66
package io.opentelemetry.sdk.extension.incubator.fileconfig;
77

8+
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNullResource;
9+
810
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectorModel;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectorPropertyModel;
912
import io.opentelemetry.sdk.resources.Resource;
1013
import java.util.Map;
1114

1215
final class ResourceDetectorFactory
1316
implements Factory<ExperimentalResourceDetectorModel, Resource> {
17+
private static final String RESOURCE_NAME = "resource detector";
1418

1519
private static final ResourceDetectorFactory INSTANCE = new ResourceDetectorFactory();
1620

@@ -23,8 +27,35 @@ static ResourceDetectorFactory getInstance() {
2327
@Override
2428
public Resource create(
2529
ExperimentalResourceDetectorModel model, DeclarativeConfigContext context) {
26-
Map.Entry<String, Object> keyValue =
27-
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), "resource detector");
28-
return context.loadComponent(Resource.class, keyValue.getKey(), keyValue.getValue());
30+
String key = null;
31+
Object value = null;
32+
33+
if (model.getContainer() != null) {
34+
key = "container";
35+
value = model.getContainer();
36+
}
37+
if (model.getHost() != null) {
38+
requireNullResource(value, RESOURCE_NAME, model.getAdditionalProperties());
39+
key = "host";
40+
value = model.getHost();
41+
}
42+
if (model.getProcess() != null) {
43+
requireNullResource(value, RESOURCE_NAME, model.getAdditionalProperties());
44+
key = "process";
45+
value = model.getProcess();
46+
}
47+
if (model.getService() != null) {
48+
requireNullResource(value, RESOURCE_NAME, model.getAdditionalProperties());
49+
key = "service";
50+
value = model.getService();
51+
}
52+
if (key == null || value == null) {
53+
Map.Entry<String, ExperimentalResourceDetectorPropertyModel> keyValue =
54+
FileConfigUtil.getSingletonMapEntry(model.getAdditionalProperties(), "resource detector");
55+
key = keyValue.getKey();
56+
value = keyValue.getValue();
57+
}
58+
59+
return context.loadComponent(Resource.class, key, value);
2960
}
3061
}

0 commit comments

Comments
 (0)