Polish "Add customizer for SdkTracerProviderBuilder"

See gh-34945
This commit is contained in:
Andy Wilkinson 2023-04-18 10:02:17 +01:00
parent f40e9738b6
commit 1ad428129d
3 changed files with 19 additions and 6 deletions

View File

@ -102,13 +102,13 @@ public class OpenTelemetryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
SdkTracerProvider otelSdkTracerProvider(Environment environment, ObjectProvider<SpanProcessor> spanProcessors,
Sampler sampler, ObjectProvider<SdkTracerProviderCustomizer> customizers) {
Sampler sampler, ObjectProvider<SdkTracerProviderBuilderCustomizer> customizers) {
String applicationName = environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
SdkTracerProviderBuilder builder = SdkTracerProvider.builder()
.setSampler(sampler)
.setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName)));
spanProcessors.orderedStream().forEach(builder::addSpanProcessor);
customizers.forEach((customizer) -> customizer.customize(builder));
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
return builder.build();
}

View File

@ -16,17 +16,18 @@
package org.springframework.boot.actuate.autoconfigure.tracing;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
/**
* Callback interface that can be used to customize auto-configured
* {@link SdkTracerProviderBuilder}.
* Callback interface that can be used to customize the {@link SdkTracerProviderBuilder}
* that is used to create the auto-configured {@link SdkTracerProvider}.
*
* @author Yanming Zhou
* @since 3.1.0
*/
@FunctionalInterface
public interface SdkTracerProviderCustomizer {
public interface SdkTracerProviderBuilderCustomizer {
/**
* Customize the given {@code builder}.

View File

@ -46,6 +46,7 @@ import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@ -210,6 +211,7 @@ class OpenTelemetryAutoConfigurationTests {
this.contextRunner.withUserConfiguration(SdkTracerProviderCustomizationConfiguration.class).run((context) -> {
SdkTracerProvider tracerProvider = context.getBean(SdkTracerProvider.class);
assertThat(tracerProvider.getSpanLimits().getMaxNumberOfEvents()).isEqualTo(42);
assertThat(tracerProvider.getSampler()).isEqualTo(Sampler.alwaysOn());
});
}
@ -292,13 +294,23 @@ class OpenTelemetryAutoConfigurationTests {
private static class SdkTracerProviderCustomizationConfiguration {
@Bean
SdkTracerProviderCustomizer sdkTracerProviderBuilderCustomizer() {
@Order(1)
SdkTracerProviderBuilderCustomizer sdkTracerProviderBuilderCustomizerOne() {
return (builder) -> {
SpanLimits spanLimits = SpanLimits.builder().setMaxNumberOfEvents(42).build();
builder.setSpanLimits(spanLimits);
};
}
@Bean
@Order(0)
SdkTracerProviderBuilderCustomizer sdkTracerProviderBuilderCustomizerTwo() {
return (builder) -> {
SpanLimits spanLimits = SpanLimits.builder().setMaxNumberOfEvents(21).build();
builder.setSpanLimits(spanLimits).setSampler(Sampler.alwaysOn());
};
}
}
}