Skip to content

Commit 902fdef

Browse files
committed
return resource in auto configured sdk
1 parent 6610806 commit 902fdef

File tree

4 files changed

+55
-14
lines changed

4 files changed

+55
-14
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,12 @@ static AutoConfiguredOpenTelemetrySdk configureFromFile(
5454
sdkConfigProvider.getMethod("create", openTelemetryConfiguration, ComponentLoader.class);
5555
ConfigProvider configProvider =
5656
(ConfigProvider) createFileConfigProvider.invoke(null, model, componentLoader);
57-
// Note: can't access file configuration resource without reflection so setting a dummy
58-
// resource
59-
return AutoConfiguredOpenTelemetrySdk.create(
60-
sdk, Resource.getDefault(), null, configProvider);
57+
Method createResource =
58+
declarativeConfiguration.getMethod(
59+
"createResource", openTelemetryConfiguration, ComponentLoader.class);
60+
Resource resource = (Resource) createResource.invoke(null, model, componentLoader);
61+
62+
return AutoConfiguredOpenTelemetrySdk.create(sdk, resource, null, configProvider);
6163
} catch (FileNotFoundException e) {
6264
throw new ConfigurationException("Configuration file not found", e);
6365
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException e) {

sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
99
import static java.util.Collections.singletonMap;
10-
import static org.assertj.core.api.Assertions.assertThat;
1110
import static org.assertj.core.api.Assertions.assertThatCode;
1211
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1312
import static org.mockito.ArgumentMatchers.any;
@@ -118,12 +117,12 @@ void configFile_Valid() {
118117
ConfigProperties config =
119118
DefaultConfigProperties.createFromMap(
120119
Collections.singletonMap("otel.experimental.config.file", configFilePath.toString()));
120+
Resource resource = Resource.getDefault().toBuilder().put("service.name", "test").build();
121121
OpenTelemetrySdk expectedSdk =
122122
OpenTelemetrySdk.builder()
123123
.setTracerProvider(
124124
SdkTracerProvider.builder()
125-
.setResource(
126-
Resource.getDefault().toBuilder().put("service.name", "test").build())
125+
.setResource(resource)
127126
.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create()))
128127
.build())
129128
.build();
@@ -138,9 +137,7 @@ void configFile_Valid() {
138137

139138
assertThat(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk().toString())
140139
.isEqualTo(expectedSdk.toString());
141-
// AutoConfiguredOpenTelemetrySdk#getResource() is set to a dummy value when configuring from
142-
// file
143-
assertThat(autoConfiguredOpenTelemetrySdk.getResource()).isEqualTo(Resource.getDefault());
140+
assertThat(autoConfiguredOpenTelemetrySdk.getResource()).isEqualTo(resource);
144141
verify(builder, times(1)).shutdownHook(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk());
145142
assertThat(Runtime.getRuntime().removeShutdownHook(thread)).isTrue();
146143
logCapturer.assertContains("Autoconfiguring from configuration file: " + configFilePath);

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1818
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1919
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SamplerModel;
20+
import io.opentelemetry.sdk.resources.Resource;
2021
import io.opentelemetry.sdk.trace.samplers.Sampler;
2122
import java.io.Closeable;
2223
import java.io.IOException;
@@ -113,17 +114,36 @@ public static OpenTelemetrySdk create(
113114
OpenTelemetryConfigurationModel configurationModel, ComponentLoader componentLoader) {
114115
SpiHelper spiHelper = SpiHelper.create(componentLoader);
115116

117+
return createAndMaybeCleanup(
118+
OpenTelemetryConfigurationFactory.getInstance(),
119+
spiHelper,
120+
customizeModel(configurationModel, spiHelper));
121+
}
122+
123+
public static Resource createResource(
124+
OpenTelemetryConfigurationModel configurationModel, ComponentLoader componentLoader) {
125+
SpiHelper spiHelper = SpiHelper.create(componentLoader);
126+
OpenTelemetryConfigurationModel model = customizeModel(configurationModel, spiHelper);
127+
128+
Resource resource = Resource.getDefault();
129+
if (model.getResource() != null) {
130+
resource =
131+
ResourceFactory.getInstance()
132+
.create(model.getResource(), new DeclarativeConfigContext(spiHelper));
133+
}
134+
return resource;
135+
}
136+
137+
private static OpenTelemetryConfigurationModel customizeModel(
138+
OpenTelemetryConfigurationModel configurationModel, SpiHelper spiHelper) {
116139
DeclarativeConfigurationBuilder builder = new DeclarativeConfigurationBuilder();
117140

118141
for (DeclarativeConfigurationCustomizerProvider provider :
119142
spiHelper.loadOrdered(DeclarativeConfigurationCustomizerProvider.class)) {
120143
provider.customize(builder);
121144
}
122145

123-
return createAndMaybeCleanup(
124-
OpenTelemetryConfigurationFactory.getInstance(),
125-
spiHelper,
126-
builder.customizeModel(configurationModel));
146+
return builder.customizeModel(configurationModel);
127147
}
128148

129149
/**

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
2020
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
2121
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
22+
import io.opentelemetry.sdk.resources.Resource;
2223
import java.io.ByteArrayInputStream;
2324
import java.io.File;
2425
import java.io.IOException;
@@ -173,4 +174,25 @@ void create_ModelCustomizer() {
173174
+ "telemetry.sdk.name=\"opentelemetry\", "
174175
+ "telemetry.sdk.version=\"");
175176
}
177+
178+
@Test
179+
void createResource() {
180+
OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel();
181+
model.withFileFormat("1.0-rc.1");
182+
Resource resource =
183+
DeclarativeConfiguration.createResource(
184+
model,
185+
// customizer is TestDeclarativeConfigurationCustomizerProvider
186+
ComponentLoader.forClassLoader(
187+
DeclarativeConfigurationCreateTest.class.getClassLoader()));
188+
assertThat(resource.toString())
189+
.contains(
190+
"Resource{schemaUrl=null, attributes={"
191+
+ "color=\"blue\", "
192+
+ "foo=\"bar\", "
193+
+ "service.name=\"unknown_service:java\", "
194+
+ "telemetry.sdk.language=\"java\", "
195+
+ "telemetry.sdk.name=\"opentelemetry\", "
196+
+ "telemetry.sdk.version=\"");
197+
}
176198
}

0 commit comments

Comments
 (0)