55
66package io .opentelemetry .javaagent .tooling .config ;
77
8+ import io .opentelemetry .api .incubator .config .ConfigProvider ;
89import io .opentelemetry .instrumentation .api .internal .ConfigPropertiesUtil ;
10+ import io .opentelemetry .javaagent .extension .DeclarativeConfigPropertiesBridge ;
11+ import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
12+ import io .opentelemetry .sdk .autoconfigure .spi .internal .DefaultConfigProperties ;
13+ import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfiguration ;
14+ import io .opentelemetry .sdk .extension .incubator .fileconfig .SdkConfigProvider ;
15+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OpenTelemetryConfigurationModel ;
16+ import java .io .FileInputStream ;
17+ import java .io .IOException ;
18+ import java .util .Collections ;
919import java .util .Map ;
20+ import javax .annotation .Nonnull ;
1021import javax .annotation .Nullable ;
1122
1223/**
1627public final class EarlyInitAgentConfig {
1728
1829 public static EarlyInitAgentConfig create () {
19- return new EarlyInitAgentConfig (ConfigurationFile .getProperties ());
30+ String configurationFile =
31+ DefaultConfigProperties .create (Collections .emptyMap ())
32+ .getString ("otel.experimental.config.file" );
33+
34+ return configurationFile != null
35+ ? new EarlyInitAgentConfig (loadConfigurationModel (configurationFile ))
36+ : new EarlyInitAgentConfig (ConfigurationFile .getProperties ());
2037 }
2138
2239 private final Map <String , String > configFileContents ;
40+ private final @ Nullable OpenTelemetryConfigurationModel configurationModel ;
41+ private final @ Nullable ConfigProvider configProvider ;
42+ private final @ Nullable ConfigProperties declarativeConfigProperties ;
2343
2444 private EarlyInitAgentConfig (Map <String , String > configFileContents ) {
2545 this .configFileContents = configFileContents ;
46+ this .configurationModel = null ;
47+ this .configProvider = null ;
48+ this .declarativeConfigProperties = null ;
49+ }
50+
51+ private EarlyInitAgentConfig (@ Nonnull OpenTelemetryConfigurationModel configurationModel ) {
52+ this .configFileContents = null ;
53+ this .configurationModel = configurationModel ;
54+ this .configProvider = SdkConfigProvider .create (configurationModel );
55+ this .declarativeConfigProperties = new DeclarativeConfigPropertiesBridge (this .configProvider );
56+ }
57+
58+ @ Nullable
59+ public OpenTelemetryConfigurationModel getConfigurationModel () {
60+ return configurationModel ;
61+ }
62+
63+ @ Nullable
64+ public ConfigProvider getConfigProvider () {
65+ return configProvider ;
66+ }
67+
68+ @ Nullable
69+ public ConfigProperties getDeclarativeConfigProperties () {
70+ return declarativeConfigProperties ;
2671 }
2772
2873 @ Nullable
2974 public String getString (String propertyName ) {
75+ if (declarativeConfigProperties != null ) {
76+ return declarativeConfigProperties .getString (propertyName );
77+ }
3078 String value = ConfigPropertiesUtil .getString (propertyName );
3179 if (value != null ) {
3280 return value ;
@@ -35,13 +83,20 @@ public String getString(String propertyName) {
3583 }
3684
3785 public boolean getBoolean (String propertyName , boolean defaultValue ) {
86+ if (declarativeConfigProperties != null ) {
87+ return declarativeConfigProperties .getBoolean (propertyName , defaultValue );
88+ }
89+
3890 String configFileValueStr = configFileContents .get (propertyName );
3991 boolean configFileValue =
4092 configFileValueStr == null ? defaultValue : Boolean .parseBoolean (configFileValueStr );
4193 return ConfigPropertiesUtil .getBoolean (propertyName , configFileValue );
4294 }
4395
4496 public int getInt (String propertyName , int defaultValue ) {
97+ if (declarativeConfigProperties != null ) {
98+ return declarativeConfigProperties .getInt (propertyName , defaultValue );
99+ }
45100 try {
46101 String configFileValueStr = configFileContents .get (propertyName );
47102 int configFileValue =
@@ -55,4 +110,12 @@ public int getInt(String propertyName, int defaultValue) {
55110 public void logEarlyConfigErrorsIfAny () {
56111 ConfigurationFile .logErrorIfAny ();
57112 }
113+
114+ private static OpenTelemetryConfigurationModel loadConfigurationModel (String configurationFile ) {
115+ try (FileInputStream fis = new FileInputStream (configurationFile )) {
116+ return DeclarativeConfiguration .parse (fis );
117+ } catch (IOException e ) {
118+ throw new RuntimeException (e );
119+ }
120+ }
58121}
0 commit comments