99
1010import io .opentelemetry .api .incubator .config .DeclarativeConfigException ;
1111import io .opentelemetry .common .ComponentLoader ;
12- import io .opentelemetry .sdk .OpenTelemetrySdk ;
1312import io .opentelemetry .sdk .autoconfigure .spi .ConfigurationException ;
14- import io .opentelemetry .sdk .resources .Resource ;
13+ import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigResult ;
14+ import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfiguration ;
15+ import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigurationProvider ;
16+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OpenTelemetryConfigurationModel ;
1517import java .io .FileInputStream ;
1618import java .io .FileNotFoundException ;
1719import java .io .IOException ;
18- import java .io .InputStream ;
19- import java .lang .reflect .InvocationTargetException ;
20- import java .lang .reflect .Method ;
2120import java .util .logging .Logger ;
2221import javax .annotation .Nullable ;
2322
@@ -32,30 +31,14 @@ final class IncubatingUtil {
3231
3332 private IncubatingUtil () {}
3433
35- // Visible for testing
36- interface Factory {
37- @ Nullable
38- AutoConfiguredOpenTelemetrySdk create ()
39- throws ClassNotFoundException ,
40- NoSuchMethodException ,
41- IllegalAccessException ,
42- InvocationTargetException ;
43- }
44-
4534 static AutoConfiguredOpenTelemetrySdk configureFromFile (
4635 Logger logger , String configurationFile , ComponentLoader componentLoader ) {
4736 logger .fine ("Autoconfiguring from configuration file: " + configurationFile );
4837 try (FileInputStream fis = new FileInputStream (configurationFile )) {
49- return requireNonNull (
50- createWithFactory (
51- "file" ,
52- () ->
53- getOpenTelemetrySdk (
54- Class .forName (
55- "io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration" )
56- .getMethod ("parse" , InputStream .class )
57- .invoke (null , fis ),
58- componentLoader )));
38+ OpenTelemetryConfigurationModel model = DeclarativeConfiguration .parse (fis );
39+ return create (model , componentLoader );
40+ } catch (DeclarativeConfigException e ) {
41+ throw toConfigurationException (e );
5942 } catch (FileNotFoundException e ) {
6043 throw new ConfigurationException ("Configuration file not found" , e );
6144 } catch (IOException e ) {
@@ -67,75 +50,23 @@ static AutoConfiguredOpenTelemetrySdk configureFromFile(
6750
6851 @ Nullable
6952 public static AutoConfiguredOpenTelemetrySdk configureFromSpi (ComponentLoader componentLoader ) {
70- return createWithFactory (
71- "SPI" ,
72- () -> {
73- Class <?> providerClass =
74- Class .forName (
75- "io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationProvider" );
76- Method getConfigurationModel = providerClass .getMethod ("getConfigurationModel" );
77-
78- for (Object configProvider : componentLoader .load (providerClass )) {
79- Object model = getConfigurationModel .invoke (configProvider );
80- if (model != null ) {
81- return getOpenTelemetrySdk (model , componentLoader );
82- }
83- }
84- return null ;
85- });
86- }
87-
88- private static AutoConfiguredOpenTelemetrySdk getOpenTelemetrySdk (
89- Object model , ComponentLoader componentLoader )
90- throws IllegalAccessException ,
91- InvocationTargetException ,
92- ClassNotFoundException ,
93- NoSuchMethodException {
94-
95- Class <?> openTelemetryConfiguration =
96- Class .forName (
97- "io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel" );
98- Class <?> declarativeConfiguration =
99- Class .forName (
100- "io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration" );
101-
102- Class <?> contextClass =
103- Class .forName (
104- "io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigContext" );
105- Method createContext = contextClass .getDeclaredMethod ("create" , ComponentLoader .class );
106- createContext .setAccessible (true );
107- Object context = createContext .invoke (null , componentLoader );
108-
109- Method create =
110- declarativeConfiguration .getDeclaredMethod (
111- "create" , openTelemetryConfiguration , contextClass );
112- create .setAccessible (true );
113- OpenTelemetrySdk sdk = (OpenTelemetrySdk ) create .invoke (null , model , context );
114-
115- Method getResource = contextClass .getDeclaredMethod ("getResource" );
116- getResource .setAccessible (true );
117- Resource resource = (Resource ) getResource .invoke (context );
118-
119- return AutoConfiguredOpenTelemetrySdk .create (sdk , resource , null );
53+ for (DeclarativeConfigurationProvider provider :
54+ componentLoader .load (DeclarativeConfigurationProvider .class )) {
55+ OpenTelemetryConfigurationModel model = provider .getConfigurationModel ();
56+ if (model != null ) {
57+ return create (model , componentLoader );
58+ }
59+ }
60+ return null ;
12061 }
12162
122- // Visible for testing
123- @ Nullable
124- static AutoConfiguredOpenTelemetrySdk createWithFactory (String name , Factory factory ) {
63+ private static AutoConfiguredOpenTelemetrySdk create (
64+ OpenTelemetryConfigurationModel model , ComponentLoader componentLoader ) {
12565 try {
126- return factory .create ();
127- } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException e ) {
128- throw new ConfigurationException (
129- String .format (
130- "Error configuring from %s. Is opentelemetry-sdk-extension-incubator on the classpath?" ,
131- name ),
132- e );
133- } catch (InvocationTargetException e ) {
134- Throwable cause = e .getCause ();
135- if (cause instanceof DeclarativeConfigException ) {
136- throw toConfigurationException ((DeclarativeConfigException ) cause );
137- }
138- throw new ConfigurationException ("Unexpected error configuring from " + name , e );
66+ DeclarativeConfigResult result = DeclarativeConfiguration .create (model , componentLoader );
67+ return AutoConfiguredOpenTelemetrySdk .create (result .getSdk (), result .getResource (), null );
68+ } catch (DeclarativeConfigException e ) {
69+ throw toConfigurationException (e );
13970 }
14071 }
14172
0 commit comments