77
88import io .opentelemetry .api .internal .ConfigUtil ;
99import io .opentelemetry .exporter .otlp .internal .OtlpConfigUtil ;
10+ import io .opentelemetry .instrumentation .resources .ResourceProviderPropertiesCustomizer ;
1011import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
1112import io .opentelemetry .sdk .autoconfigure .spi .internal .DefaultConfigProperties ;
1213import java .time .Duration ;
1314import java .util .Collections ;
1415import java .util .HashMap ;
1516import java .util .List ;
1617import java .util .Map ;
18+ import java .util .function .Function ;
1719import javax .annotation .Nullable ;
1820import org .springframework .core .env .Environment ;
1921import 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