Skip to content

Commit 8ec8ac4

Browse files
committed
add support for missing list properties in spring starter
1 parent 5b94674 commit 8ec8ac4

File tree

11 files changed

+382
-48
lines changed

11 files changed

+382
-48
lines changed
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
Comparing source compatibility of opentelemetry-spring-boot-autoconfigure-2.9.0-SNAPSHOT.jar against opentelemetry-spring-boot-autoconfigure-2.8.0.jar
2-
No changes.
2+
=== UNCHANGED CLASS: PUBLIC io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration (not serializable)
3+
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
4+
*** MODIFIED ANNOTATION: org.springframework.boot.context.properties.EnableConfigurationProperties
5+
*** MODIFIED ELEMENT: value=io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringOtelProperties (<- io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties)

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
1212
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties;
1313
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties;
14-
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties;
1514
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties;
15+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringOtelProperties;
1616
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.DistroVersionResourceProvider;
1717
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.SpringResourceProvider;
1818
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
@@ -51,7 +51,7 @@
5151
@EnableConfigurationProperties({
5252
OtlpExporterProperties.class,
5353
OtelResourceProperties.class,
54-
PropagationProperties.class
54+
SpringOtelProperties.class
5555
})
5656
public class OpenTelemetryAutoConfiguration {
5757

@@ -90,7 +90,7 @@ public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk(
9090
Environment env,
9191
OtlpExporterProperties otlpExporterProperties,
9292
OtelResourceProperties resourceProperties,
93-
PropagationProperties propagationProperties,
93+
SpringOtelProperties springOtelProperties,
9494
OpenTelemetrySdkComponentLoader componentLoader) {
9595

9696
return AutoConfigureUtil.setComponentLoader(
@@ -101,7 +101,7 @@ public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk(
101101
env,
102102
otlpExporterProperties,
103103
resourceProperties,
104-
propagationProperties,
104+
springOtelProperties,
105105
c)),
106106
componentLoader)
107107
.build();

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/PropagationProperties.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringConfigProperties.java

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77

88
import io.opentelemetry.api.internal.ConfigUtil;
99
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
10+
import io.opentelemetry.instrumentation.resources.ResourceProviderPropertiesCustomizer;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1213
import java.time.Duration;
1314
import java.util.Collections;
1415
import java.util.HashMap;
1516
import java.util.List;
1617
import java.util.Map;
18+
import java.util.function.Function;
1719
import javax.annotation.Nullable;
1820
import org.springframework.core.env.Environment;
1921
import org.springframework.expression.ExpressionParser;
@@ -29,37 +31,87 @@ public class SpringConfigProperties implements ConfigProperties {
2931
private final ExpressionParser parser;
3032
private final OtlpExporterProperties otlpExporterProperties;
3133
private final OtelResourceProperties resourceProperties;
32-
private final PropagationProperties propagationProperties;
34+
private final SpringOtelProperties springOtelProperties;
3335
private final ConfigProperties otelSdkProperties;
36+
private final ConfigProperties customizedResourceProviderProperties;
37+
38+
private static final Map<String, Function<SpringOtelProperties, List<String>>> LIST_PROPERTIES =
39+
new HashMap<>();
40+
41+
static final String DISABLED_KEY = "otel.java.disabled.resource.providers";
42+
static final String ENABLED_KEY = "otel.java.enabled.resource.providers";
43+
44+
static {
45+
LIST_PROPERTIES.put(ENABLED_KEY, SpringOtelProperties::getJavaEnabledResourceProviders);
46+
LIST_PROPERTIES.put(DISABLED_KEY, SpringOtelProperties::getJavaDisabledResourceProviders);
47+
LIST_PROPERTIES.put(
48+
"otel.experimental.metrics.view.config",
49+
SpringOtelProperties::getExperimentalMetricsViewConfig);
50+
LIST_PROPERTIES.put(
51+
"otel.experimental.resource.disabled.keys",
52+
SpringOtelProperties::getExperimentalResourceDisabledKeys);
53+
LIST_PROPERTIES.put("otel.propagators", SpringOtelProperties::getPropagators);
54+
}
3455

3556
public SpringConfigProperties(
3657
Environment environment,
3758
ExpressionParser parser,
3859
OtlpExporterProperties otlpExporterProperties,
3960
OtelResourceProperties resourceProperties,
40-
PropagationProperties propagationProperties,
61+
SpringOtelProperties springOtelProperties,
4162
ConfigProperties otelSdkProperties) {
4263
this.environment = environment;
4364
this.parser = parser;
4465
this.otlpExporterProperties = otlpExporterProperties;
4566
this.resourceProperties = resourceProperties;
46-
this.propagationProperties = propagationProperties;
67+
this.springOtelProperties = springOtelProperties;
4768
this.otelSdkProperties = otelSdkProperties;
69+
this.customizedResourceProviderProperties =
70+
createCustomizedProperties(otelSdkProperties, springOtelProperties);
71+
}
72+
73+
private static void addList(
74+
Map<String, String> map, String key, List<String> list, ConfigProperties configProperties) {
75+
if (!list.isEmpty()) {
76+
map.put(key, String.join(",", list));
77+
} else {
78+
String defaultValue = configProperties.getString(key);
79+
if (defaultValue != null) {
80+
map.put(key, defaultValue);
81+
}
82+
}
83+
}
84+
85+
private static ConfigProperties createCustomizedProperties(
86+
ConfigProperties configProperties, SpringOtelProperties springOtelProperties) {
87+
// find a better way to do this
88+
Map<String, String> map = new HashMap<>();
89+
addList(
90+
map, ENABLED_KEY, springOtelProperties.getJavaEnabledResourceProviders(), configProperties);
91+
addList(
92+
map,
93+
DISABLED_KEY,
94+
springOtelProperties.getJavaDisabledResourceProviders(),
95+
configProperties);
96+
97+
return DefaultConfigProperties.createFromMap(
98+
new ResourceProviderPropertiesCustomizer()
99+
.customize(DefaultConfigProperties.createFromMap(map)));
48100
}
49101

50102
// visible for testing
51103
public static ConfigProperties create(
52104
Environment env,
53105
OtlpExporterProperties otlpExporterProperties,
54106
OtelResourceProperties resourceProperties,
55-
PropagationProperties propagationProperties,
107+
SpringOtelProperties springOtelProperties,
56108
ConfigProperties fallback) {
57109
return new SpringConfigProperties(
58110
env,
59111
new SpelExpressionParser(),
60112
otlpExporterProperties,
61113
resourceProperties,
62-
propagationProperties,
114+
springOtelProperties,
63115
fallback);
64116
}
65117

@@ -114,8 +166,13 @@ public List<String> getList(String name) {
114166

115167
String normalizedName = ConfigUtil.normalizeEnvironmentVariableKey(name);
116168

117-
if (normalizedName.equals("otel.propagators")) {
118-
return propagationProperties.getPropagators();
169+
Function<SpringOtelProperties, List<String>> get = LIST_PROPERTIES.get(normalizedName);
170+
if (get != null) {
171+
List<String> c = customizedResourceProviderProperties.getList(name);
172+
if (!c.isEmpty()) {
173+
return c;
174+
}
175+
return get.apply(springOtelProperties);
119176
}
120177

121178
return or(environment.getProperty(normalizedName, List.class), otelSdkProperties.getList(name));

0 commit comments

Comments
 (0)