Skip to content

Commit db4e2e0

Browse files
committed
Resource set in the AutoConfiguredOpenTelemetrySdk object is now configured from the 'resource' YAML node
1 parent 4a33b66 commit db4e2e0

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,16 @@ static AutoConfiguredOpenTelemetrySdk configureFromFile(
4848
declarativeConfiguration.getMethod(
4949
"create", openTelemetryConfiguration, ComponentLoader.class);
5050
OpenTelemetrySdk sdk = (OpenTelemetrySdk) create.invoke(null, model, componentLoader);
51+
5152
Class<?> sdkConfigProvider =
5253
Class.forName("io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider");
5354
Method createFileConfigProvider =
5455
sdkConfigProvider.getMethod("create", openTelemetryConfiguration);
5556
ConfigProvider configProvider = (ConfigProvider) createFileConfigProvider.invoke(null, model);
56-
// Note: can't access file configuration resource without reflection so setting a dummy
57-
// resource
58-
return AutoConfiguredOpenTelemetrySdk.create(
59-
sdk, Resource.getDefault(), null, configProvider);
57+
58+
Resource configuredResource = createResourceFromModel(model, componentLoader);
59+
60+
return AutoConfiguredOpenTelemetrySdk.create(sdk, configuredResource, null, configProvider);
6061
} catch (FileNotFoundException e) {
6162
throw new ConfigurationException("Configuration file not found", e);
6263
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException e) {
@@ -76,6 +77,25 @@ static AutoConfiguredOpenTelemetrySdk configureFromFile(
7677
}
7778
}
7879

80+
private static Resource createResourceFromModel(
81+
Object openTelemetryConfigurationModel, ComponentLoader componentLoader)
82+
throws NoSuchMethodException,
83+
InvocationTargetException,
84+
IllegalAccessException,
85+
ClassNotFoundException {
86+
Class<?> declarativeConfigurationClass =
87+
Class.forName(
88+
"io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration");
89+
Class<?> configurationModelClass =
90+
Class.forName(
91+
"io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel");
92+
93+
Method createResource =
94+
declarativeConfigurationClass.getMethod(
95+
"createResource", configurationModelClass, ComponentLoader.class);
96+
return (Resource) createResource.invoke(null, openTelemetryConfigurationModel, componentLoader);
97+
}
98+
7999
private static ConfigurationException toConfigurationException(
80100
DeclarativeConfigException exception) {
81101
String message = Objects.requireNonNull(exception.getMessage());

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
1717
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1818
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
19+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ResourceModel;
1920
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SamplerModel;
21+
import io.opentelemetry.sdk.resources.Resource;
2022
import io.opentelemetry.sdk.trace.samplers.Sampler;
2123
import java.io.Closeable;
2224
import java.io.IOException;
@@ -109,7 +111,20 @@ public static OpenTelemetrySdk create(OpenTelemetryConfigurationModel configurat
109111
public static OpenTelemetrySdk create(
110112
OpenTelemetryConfigurationModel configurationModel, ComponentLoader componentLoader) {
111113
SpiHelper spiHelper = SpiHelper.create(componentLoader);
114+
return create(configurationModel, spiHelper);
115+
}
112116

117+
/**
118+
* Interpret the {@code configurationModel} to create {@link OpenTelemetrySdk} instance
119+
* corresponding to the configuration.
120+
*
121+
* @param configurationModel the configuration model
122+
* @param spiHelper the component loader used to load {@link ComponentProvider} implementations
123+
* @return the {@link OpenTelemetrySdk}
124+
* @throws DeclarativeConfigException if unable to interpret
125+
*/
126+
public static OpenTelemetrySdk create(
127+
OpenTelemetryConfigurationModel configurationModel, SpiHelper spiHelper) {
113128
DeclarativeConfigurationBuilder builder = new DeclarativeConfigurationBuilder();
114129

115130
for (DeclarativeConfigurationCustomizerProvider provider :
@@ -205,6 +220,17 @@ public static Sampler createSampler(DeclarativeConfigProperties genericSamplerMo
205220
samplerModel);
206221
}
207222

223+
/** Create a {@link Resource} from the {@code resourceModel} representing the resource config. */
224+
public static Resource createResource(
225+
OpenTelemetryConfigurationModel model, ComponentLoader componentLoader) {
226+
ResourceModel resourceModel = model.getResource();
227+
if (resourceModel == null) {
228+
return Resource.getDefault();
229+
}
230+
return createAndMaybeCleanup(
231+
ResourceFactory.getInstance(), SpiHelper.create(componentLoader), resourceModel);
232+
}
233+
208234
private static YamlDeclarativeConfigProperties requireYamlDeclarativeConfigProperties(
209235
DeclarativeConfigProperties declarativeConfigProperties) {
210236
if (!(declarativeConfigProperties instanceof YamlDeclarativeConfigProperties)) {

0 commit comments

Comments
 (0)