Customizer for SdkTracerProviderBuilder (#4004)
This commit is contained in:
parent
03e0ad0660
commit
07a2d2eb28
|
|
@ -1,2 +1,4 @@
|
|||
Comparing source compatibility of against
|
||||
No changes.
|
||||
***! MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++! NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer addTracerProviderCustomizer(java.util.function.BiFunction)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.sdk.autoconfigure.spi;
|
|||
|
||||
import io.opentelemetry.context.propagation.TextMapPropagator;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
|
||||
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import java.util.Map;
|
||||
|
|
@ -66,4 +67,16 @@ public interface AutoConfigurationCustomizer {
|
|||
*/
|
||||
AutoConfigurationCustomizer addPropertiesSupplier(
|
||||
Supplier<Map<String, String>> propertiesSupplier);
|
||||
|
||||
/**
|
||||
* Adds a {@link BiFunction} to invoke the with the {@link SdkTracerProviderBuilder} to allow
|
||||
* customization. The return value of the {@link BiFunction} will replace the passed-in argument.
|
||||
*
|
||||
* <p>Multiple calls will execute the customizers in order.
|
||||
*/
|
||||
default AutoConfigurationCustomizer addTracerProviderCustomizer(
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
tracerProviderCustomizer) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import io.opentelemetry.sdk.logs.SdkLogEmitterProvider;
|
|||
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
|
||||
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import java.util.Collections;
|
||||
|
|
@ -44,6 +45,8 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur
|
|||
|
||||
@Nullable private ConfigProperties config;
|
||||
|
||||
private BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
tracerProviderCustomizer = (a, unused) -> a;
|
||||
private BiFunction<? super TextMapPropagator, ConfigProperties, ? extends TextMapPropagator>
|
||||
propagatorCustomizer = (a, unused) -> a;
|
||||
private BiFunction<? super SpanExporter, ConfigProperties, ? extends SpanExporter>
|
||||
|
|
@ -74,6 +77,22 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link BiFunction} to invoke the with the {@link SdkTracerProviderBuilder} to allow
|
||||
* customization. The return value of the {@link BiFunction} will replace the passed-in argument.
|
||||
*
|
||||
* <p>Multiple calls will execute the customizers in order.
|
||||
*/
|
||||
@Override
|
||||
public AutoConfiguredOpenTelemetrySdkBuilder addTracerProviderCustomizer(
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
tracerProviderCustomizer) {
|
||||
requireNonNull(tracerProviderCustomizer, "tracerProviderCustomizer");
|
||||
this.tracerProviderCustomizer =
|
||||
mergeCustomizer(this.tracerProviderCustomizer, tracerProviderCustomizer);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link BiFunction} to invoke with the default autoconfigured {@link TextMapPropagator}
|
||||
* to allow customization. The return value of the {@link BiFunction} will replace the passed-in
|
||||
|
|
@ -181,16 +200,20 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur
|
|||
}
|
||||
}
|
||||
|
||||
SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
|
||||
ConfigProperties config = getConfig();
|
||||
tracerProviderBuilder = tracerProviderCustomizer.apply(tracerProviderBuilder, config);
|
||||
|
||||
Resource resource =
|
||||
ResourceConfiguration.configureResource(config, serviceClassLoader, resourceCustomizer);
|
||||
tracerProviderBuilder.setResource(resource);
|
||||
|
||||
MeterProvider meterProvider =
|
||||
MeterProviderConfiguration.configureMeterProvider(resource, config, serviceClassLoader);
|
||||
|
||||
SdkTracerProvider tracerProvider =
|
||||
TracerProviderConfiguration.configureTracerProvider(
|
||||
resource,
|
||||
tracerProviderBuilder,
|
||||
config,
|
||||
serviceClassLoader,
|
||||
meterProvider,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
|||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.traces.SdkTracerProviderConfigurer;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
|
||||
import io.opentelemetry.sdk.trace.SpanLimits;
|
||||
|
|
@ -33,17 +32,15 @@ import java.util.function.BiFunction;
|
|||
final class TracerProviderConfiguration {
|
||||
|
||||
static SdkTracerProvider configureTracerProvider(
|
||||
Resource resource,
|
||||
SdkTracerProviderBuilder tracerProviderBuilder,
|
||||
ConfigProperties config,
|
||||
ClassLoader serviceClassLoader,
|
||||
MeterProvider meterProvider,
|
||||
BiFunction<? super SpanExporter, ConfigProperties, ? extends SpanExporter>
|
||||
spanExporterCustomizer,
|
||||
BiFunction<? super Sampler, ConfigProperties, ? extends Sampler> samplerCustomizer) {
|
||||
SdkTracerProviderBuilder tracerProviderBuilder =
|
||||
SdkTracerProvider.builder()
|
||||
.setResource(resource)
|
||||
.setSpanLimits(configureSpanLimits(config));
|
||||
|
||||
tracerProviderBuilder.setSpanLimits(configureSpanLimits(config));
|
||||
|
||||
String sampler = config.getString("otel.traces.sampler");
|
||||
if (sampler == null) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@ import static org.mockito.Mockito.when;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanId;
|
||||
import io.opentelemetry.api.trace.TraceId;
|
||||
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.ContextKey;
|
||||
|
|
@ -20,6 +23,7 @@ import io.opentelemetry.context.propagation.TextMapPropagator;
|
|||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||
import io.opentelemetry.sdk.common.CompletableResultCode;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.IdGenerator;
|
||||
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
|
||||
|
|
@ -38,6 +42,7 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
|
||||
private static final ContextKey<String> CONTEXT_KEY = ContextKey.named("animal");
|
||||
|
||||
@Mock private IdGenerator idGenerator;
|
||||
@Mock private TextMapPropagator propagator1;
|
||||
@Mock private TextMapPropagator propagator2;
|
||||
@Mock private TextMapGetter<Map<String, String>> getter;
|
||||
|
|
@ -54,6 +59,10 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
@Test
|
||||
void customize() {
|
||||
Context extracted = Context.root().with(CONTEXT_KEY, "bear");
|
||||
|
||||
when(idGenerator.generateTraceId()).thenReturn(TraceId.fromLongs(9999999999L, 9999999999L));
|
||||
when(idGenerator.generateSpanId()).thenReturn(SpanId.fromLong(9999999999L));
|
||||
|
||||
when(propagator2.extract(any(), any(), any())).thenReturn(extracted);
|
||||
|
||||
when(sampler2.shouldSample(any(), any(), any(), any(), any(), any()))
|
||||
|
|
@ -65,6 +74,9 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
|
||||
AutoConfiguredOpenTelemetrySdkBuilder autoConfiguration =
|
||||
AutoConfiguredOpenTelemetrySdk.builder()
|
||||
.addTracerProviderCustomizer(
|
||||
(tracerProviderBuilder, config) ->
|
||||
tracerProviderBuilder.setIdGenerator(idGenerator))
|
||||
.addPropagatorCustomizer(
|
||||
(previous, config) -> {
|
||||
assertThat(previous).isSameAs(W3CTraceContextPropagator.getInstance());
|
||||
|
|
@ -129,7 +141,11 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
.extract(Context.root(), Collections.emptyMap(), getter))
|
||||
.isEqualTo(extracted);
|
||||
|
||||
sdk.getTracerProvider().get("test").spanBuilder("test").startSpan().end();
|
||||
Span span = sdk.getTracerProvider().get("test").spanBuilder("test").startSpan();
|
||||
assertThat(span.getSpanContext().getSpanId()).isEqualTo(SpanId.fromLong(9999999999L));
|
||||
assertThat(span.getSpanContext().getTraceId())
|
||||
.isEqualTo(TraceId.fromLongs(9999999999L, 9999999999L));
|
||||
span.end();
|
||||
|
||||
// Ensures the export happened.
|
||||
sdk.getSdkTracerProvider().shutdown().join(10, TimeUnit.SECONDS);
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class TracerProviderConfigurationTest {
|
|||
// are verified in other test sets like testFullConfig.
|
||||
SdkTracerProvider tracerProvider =
|
||||
TracerProviderConfiguration.configureTracerProvider(
|
||||
resource,
|
||||
SdkTracerProvider.builder().setResource(resource),
|
||||
DefaultConfigProperties.createForTest(properties),
|
||||
TracerProviderConfiguration.class.getClassLoader(),
|
||||
MeterProvider.noop(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue