Skip to content

Commit 91e25fa

Browse files
authored
call auto configure listener with declarative config (#7654)
1 parent 1661bf4 commit 91e25fa

File tree

6 files changed

+86
-4
lines changed

6 files changed

+86
-4
lines changed

sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationSpiTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ void configFromSpi() {
4949

5050
assertThat(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk().toString())
5151
.isEqualTo(expectedSdk.toString());
52+
53+
assertThat(TestResourceDetector.initialized).isTrue();
5254
}
5355
}

sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public OpenTelemetryConfigurationModel getConfigurationModel() {
1717
String yaml =
1818
"file_format: \"1.0-rc.1\"\n"
1919
+ "resource:\n"
20+
+ " detection/development:\n"
21+
+ " detectors:\n"
22+
+ " - test:\n"
2023
+ " attributes:\n"
2124
+ " - name: service.name\n"
2225
+ " value: test\n"
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.sdk.autoconfigure;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.OpenTelemetrySdk;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import io.opentelemetry.sdk.resources.Resource;
13+
14+
public class TestResourceDetector implements ComponentProvider<Resource>, AutoConfigureListener {
15+
16+
@SuppressWarnings("NonFinalStaticField")
17+
static boolean initialized = false;
18+
19+
@Override
20+
public void afterAutoConfigure(OpenTelemetrySdk sdk) {
21+
initialized = true;
22+
}
23+
24+
@Override
25+
public Class<Resource> getType() {
26+
return Resource.class;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "test";
32+
}
33+
34+
@Override
35+
public Resource create(DeclarativeConfigProperties config) {
36+
return Resource.empty();
37+
}
38+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.sdk.autoconfigure.TestResourceDetector

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.common.ComponentLoader;
1515
import io.opentelemetry.sdk.OpenTelemetrySdk;
1616
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
17+
import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
1718
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1819
import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
1920
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
@@ -25,6 +26,7 @@
2526
import java.util.Collections;
2627
import java.util.Map;
2728
import java.util.Objects;
29+
import java.util.logging.Level;
2830
import java.util.logging.Logger;
2931
import java.util.regex.MatchResult;
3032
import java.util.regex.Matcher;
@@ -122,10 +124,13 @@ public static ExtendedOpenTelemetrySdk create(
122124
provider.customize(builder);
123125
}
124126

125-
return createAndMaybeCleanup(
126-
OpenTelemetryConfigurationFactory.getInstance(),
127-
spiHelper,
128-
builder.customizeModel(configurationModel));
127+
ExtendedOpenTelemetrySdk sdk =
128+
createAndMaybeCleanup(
129+
OpenTelemetryConfigurationFactory.getInstance(),
130+
spiHelper,
131+
builder.customizeModel(configurationModel));
132+
callAutoConfigureListeners(spiHelper, sdk);
133+
return sdk;
129134
}
130135

131136
/**
@@ -404,4 +409,16 @@ private StringBuilder envVarSubstitution(
404409
return newVal;
405410
}
406411
}
412+
413+
// Visible for testing
414+
static void callAutoConfigureListeners(SpiHelper spiHelper, OpenTelemetrySdk openTelemetrySdk) {
415+
for (AutoConfigureListener listener : spiHelper.getListeners()) {
416+
try {
417+
listener.afterAutoConfigure(openTelemetrySdk);
418+
} catch (Throwable throwable) {
419+
logger.log(
420+
Level.WARNING, "Error invoking listener " + listener.getClass().getName(), throwable);
421+
}
422+
}
423+
}
407424
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99
import static org.assertj.core.api.Assertions.assertThat;
1010
import static org.assertj.core.api.Assertions.assertThatCode;
1111
import static org.assertj.core.api.Assertions.assertThatThrownBy;
12+
import static org.mockito.Mockito.mock;
13+
import static org.mockito.Mockito.when;
1214

1315
import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension;
1416
import io.github.netmikey.logunit.api.LogCapturer;
1517
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
1618
import io.opentelemetry.common.ComponentLoader;
1719
import io.opentelemetry.internal.testing.CleanupExtension;
20+
import io.opentelemetry.sdk.OpenTelemetrySdk;
21+
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
1822
import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
1923
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
2024
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
@@ -173,4 +177,21 @@ void create_ModelCustomizer() {
173177
+ "telemetry.sdk.name=\"opentelemetry\", "
174178
+ "telemetry.sdk.version=\"");
175179
}
180+
181+
@Test
182+
void callAutoConfigureListeners_exceptionIsCaught() {
183+
SpiHelper spiHelper = mock(SpiHelper.class);
184+
when(spiHelper.getListeners())
185+
.thenReturn(
186+
Collections.singleton(
187+
sdk -> {
188+
throw new RuntimeException("Test exception from AutoConfigureListener");
189+
}));
190+
191+
assertThatCode(
192+
() ->
193+
DeclarativeConfiguration.callAutoConfigureListeners(
194+
spiHelper, OpenTelemetrySdk.builder().build()))
195+
.doesNotThrowAnyException();
196+
}
176197
}

0 commit comments

Comments
 (0)