Move SdkTracerProviderBuilder and OpenTelemetrySdkBuilder to top-level. (#2318)
This commit is contained in:
parent
718f512701
commit
7c0b452097
|
@ -6,7 +6,6 @@
|
|||
package io.opentelemetry.sdk;
|
||||
|
||||
import io.opentelemetry.api.DefaultOpenTelemetry;
|
||||
import io.opentelemetry.api.DefaultOpenTelemetryBuilder;
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
|
@ -24,11 +23,11 @@ import javax.annotation.concurrent.ThreadSafe;
|
|||
public final class OpenTelemetrySdk extends DefaultOpenTelemetry {
|
||||
|
||||
/**
|
||||
* Returns a new {@link Builder} for configuring an instance of {@linkplain OpenTelemetrySdk the
|
||||
* OpenTelemetry SDK}.
|
||||
* Returns a new {@link OpenTelemetrySdkBuilder} for configuring an instance of {@linkplain
|
||||
* OpenTelemetrySdk the OpenTelemetry SDK}.
|
||||
*/
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
public static OpenTelemetrySdkBuilder builder() {
|
||||
return new OpenTelemetrySdkBuilder();
|
||||
}
|
||||
|
||||
/** Returns the global {@link OpenTelemetrySdk}. */
|
||||
|
@ -57,9 +56,9 @@ public final class OpenTelemetrySdk extends DefaultOpenTelemetry {
|
|||
return (MeterSdkProvider) GlobalOpenTelemetry.get().getMeterProvider();
|
||||
}
|
||||
|
||||
private static final AtomicBoolean INITIALIZED_GLOBAL = new AtomicBoolean();
|
||||
static final AtomicBoolean INITIALIZED_GLOBAL = new AtomicBoolean();
|
||||
|
||||
private OpenTelemetrySdk(
|
||||
OpenTelemetrySdk(
|
||||
TracerProvider tracerProvider,
|
||||
MeterProvider meterProvider,
|
||||
ContextPropagators contextPropagators) {
|
||||
|
@ -71,78 +70,6 @@ public final class OpenTelemetrySdk extends DefaultOpenTelemetry {
|
|||
return (SdkTracerProvider) ((ObfuscatedTracerProvider) getTracerProvider()).unobfuscate();
|
||||
}
|
||||
|
||||
/** A builder for configuring an {@link OpenTelemetrySdk}. */
|
||||
public static class Builder extends DefaultOpenTelemetryBuilder {
|
||||
/**
|
||||
* Sets the {@link SdkTracerProvider} to use. This can be used to configure tracing settings by
|
||||
* returning the instance created by a {@link SdkTracerProvider.Builder}.
|
||||
*
|
||||
* <p>If you use this method, it is assumed that you are providing a fully configured
|
||||
* TracerSdkProvider, and other settings will be ignored.
|
||||
*
|
||||
* <p>Note: the parameter passed in here must be a {@link SdkTracerProvider} instance.
|
||||
*
|
||||
* @param tracerProvider A {@link SdkTracerProvider} to use with this instance.
|
||||
* @see SdkTracerProvider#builder()
|
||||
*/
|
||||
@Override
|
||||
public Builder setTracerProvider(TracerProvider tracerProvider) {
|
||||
if (!(tracerProvider instanceof SdkTracerProvider)) {
|
||||
throw new IllegalArgumentException(
|
||||
"The OpenTelemetrySdk can only be configured with a TracerSdkProvider");
|
||||
}
|
||||
super.setTracerProvider(tracerProvider);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link MeterProvider} to use.. This can be used to configure tracing settings by
|
||||
* returning the instance created by a {@link MeterSdkProvider.Builder}.
|
||||
*
|
||||
* @see MeterSdkProvider#builder()
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public Builder setMeterProvider(MeterProvider meterProvider) {
|
||||
if (!(meterProvider instanceof MeterSdkProvider)) {
|
||||
throw new IllegalArgumentException(
|
||||
"The OpenTelemetrySdk can only be configured with a MeterSdkProvider");
|
||||
}
|
||||
super.setMeterProvider(meterProvider);
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the {@link ContextPropagators} to use. */
|
||||
@Override
|
||||
public Builder setPropagators(ContextPropagators propagators) {
|
||||
super.setPropagators(propagators);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link OpenTelemetrySdk} built with the configuration of this {@link Builder}.
|
||||
*/
|
||||
@Override
|
||||
public OpenTelemetrySdk build() {
|
||||
if (meterProvider == null) {
|
||||
meterProvider = MeterSdkProvider.builder().build();
|
||||
}
|
||||
|
||||
if (tracerProvider == null) {
|
||||
tracerProvider = SdkTracerProvider.builder().build();
|
||||
}
|
||||
|
||||
OpenTelemetrySdk sdk =
|
||||
new OpenTelemetrySdk(
|
||||
new ObfuscatedTracerProvider(tracerProvider), meterProvider, super.propagators);
|
||||
// Automatically initialize global OpenTelemetry with the first SDK we build.
|
||||
if (INITIALIZED_GLOBAL.compareAndSet(/* expectedValue= */ false, /* newValue= */ true)) {
|
||||
GlobalOpenTelemetry.set(sdk);
|
||||
}
|
||||
return sdk;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class allows the SDK to unobfuscate an obfuscated static global provider.
|
||||
*
|
||||
|
@ -156,7 +83,7 @@ public final class OpenTelemetrySdk extends DefaultOpenTelemetry {
|
|||
|
||||
private final TracerProvider delegate;
|
||||
|
||||
private ObfuscatedTracerProvider(TracerProvider delegate) {
|
||||
ObfuscatedTracerProvider(TracerProvider delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.sdk;
|
||||
|
||||
import io.opentelemetry.api.DefaultOpenTelemetryBuilder;
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.api.trace.TracerProvider;
|
||||
import io.opentelemetry.context.propagation.ContextPropagators;
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdk.ObfuscatedTracerProvider;
|
||||
import io.opentelemetry.sdk.metrics.MeterSdkProvider;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
|
||||
|
||||
/** A builder for configuring an {@link OpenTelemetrySdk}. */
|
||||
public final class OpenTelemetrySdkBuilder extends DefaultOpenTelemetryBuilder {
|
||||
/**
|
||||
* Sets the {@link SdkTracerProvider} to use. This can be used to configure tracing settings by
|
||||
* returning the instance created by a {@link SdkTracerProviderBuilder}.
|
||||
*
|
||||
* <p>If you use this method, it is assumed that you are providing a fully configured
|
||||
* TracerSdkProvider, and other settings will be ignored.
|
||||
*
|
||||
* <p>Note: the parameter passed in here must be a {@link SdkTracerProvider} instance.
|
||||
*
|
||||
* @param tracerProvider A {@link SdkTracerProvider} to use with this instance.
|
||||
* @see SdkTracerProvider#builder()
|
||||
*/
|
||||
@Override
|
||||
public OpenTelemetrySdkBuilder setTracerProvider(TracerProvider tracerProvider) {
|
||||
if (!(tracerProvider instanceof SdkTracerProvider)) {
|
||||
throw new IllegalArgumentException(
|
||||
"The OpenTelemetrySdk can only be configured with a TracerSdkProvider");
|
||||
}
|
||||
super.setTracerProvider(tracerProvider);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link MeterProvider} to use.. This can be used to configure tracing settings by
|
||||
* returning the instance created by a {@link MeterSdkProvider.Builder}.
|
||||
*
|
||||
* @see MeterSdkProvider#builder()
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public OpenTelemetrySdkBuilder setMeterProvider(MeterProvider meterProvider) {
|
||||
if (!(meterProvider instanceof MeterSdkProvider)) {
|
||||
throw new IllegalArgumentException(
|
||||
"The OpenTelemetrySdk can only be configured with a MeterSdkProvider");
|
||||
}
|
||||
super.setMeterProvider(meterProvider);
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the {@link ContextPropagators} to use. */
|
||||
@Override
|
||||
public OpenTelemetrySdkBuilder setPropagators(ContextPropagators propagators) {
|
||||
super.setPropagators(propagators);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link OpenTelemetrySdk} built with the configuration of this {@link
|
||||
* OpenTelemetrySdkBuilder}.
|
||||
*/
|
||||
@Override
|
||||
public OpenTelemetrySdk build() {
|
||||
if (meterProvider == null) {
|
||||
meterProvider = MeterSdkProvider.builder().build();
|
||||
}
|
||||
|
||||
if (tracerProvider == null) {
|
||||
tracerProvider = SdkTracerProvider.builder().build();
|
||||
}
|
||||
|
||||
OpenTelemetrySdk sdk =
|
||||
new OpenTelemetrySdk(
|
||||
new ObfuscatedTracerProvider(tracerProvider), meterProvider, super.propagators);
|
||||
// Automatically initialize global OpenTelemetry with the first SDK we build.
|
||||
if (OpenTelemetrySdk.INITIALIZED_GLOBAL.compareAndSet(
|
||||
/* expectedValue= */ false, /* newValue= */ true)) {
|
||||
GlobalOpenTelemetry.set(sdk);
|
||||
}
|
||||
return sdk;
|
||||
}
|
||||
}
|
|
@ -179,7 +179,7 @@ class OpenTelemetrySdkTest {
|
|||
.setMaxLengthOfAttributeValues(128)
|
||||
.build();
|
||||
|
||||
OpenTelemetrySdk.Builder sdkBuilder =
|
||||
OpenTelemetrySdkBuilder sdkBuilder =
|
||||
OpenTelemetrySdk.builder()
|
||||
.setTracerProvider(
|
||||
SdkTracerProvider.builder()
|
||||
|
|
|
@ -11,10 +11,8 @@ import io.opentelemetry.api.trace.TracerProvider;
|
|||
import io.opentelemetry.sdk.common.Clock;
|
||||
import io.opentelemetry.sdk.common.CompletableResultCode;
|
||||
import io.opentelemetry.sdk.internal.ComponentRegistry;
|
||||
import io.opentelemetry.sdk.internal.SystemClock;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -33,15 +31,15 @@ public final class SdkTracerProvider implements TracerProvider, SdkTracerManagem
|
|||
private final ComponentRegistry<SdkTracer> tracerSdkComponentRegistry;
|
||||
|
||||
/**
|
||||
* Returns a new {@link Builder} for {@link SdkTracerProvider}.
|
||||
* Returns a new {@link SdkTracerProviderBuilder} for {@link SdkTracerProvider}.
|
||||
*
|
||||
* @return a new {@link Builder} for {@link SdkTracerProvider}.
|
||||
* @return a new {@link SdkTracerProviderBuilder} for {@link SdkTracerProvider}.
|
||||
*/
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
public static SdkTracerProviderBuilder builder() {
|
||||
return new SdkTracerProviderBuilder();
|
||||
}
|
||||
|
||||
private SdkTracerProvider(
|
||||
SdkTracerProvider(
|
||||
Clock clock, IdGenerator idsGenerator, Resource resource, TraceConfig traceConfig) {
|
||||
this.sharedState = new TracerSharedState(clock, idsGenerator, resource, traceConfig);
|
||||
this.tracerSdkComponentRegistry =
|
||||
|
@ -92,75 +90,4 @@ public final class SdkTracerProvider implements TracerProvider, SdkTracerManagem
|
|||
public CompletableResultCode forceFlush() {
|
||||
return sharedState.getActiveSpanProcessor().forceFlush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder class for the TraceSdkProvider. Has fully functional default implementations of all
|
||||
* three required interfaces.
|
||||
*/
|
||||
public static class Builder {
|
||||
|
||||
private Clock clock = SystemClock.getInstance();
|
||||
private IdGenerator idsGenerator = IdGenerator.random();
|
||||
private Resource resource = Resource.getDefault();
|
||||
private TraceConfig traceConfig = TraceConfig.getDefault();
|
||||
|
||||
/**
|
||||
* Assign a {@link Clock}.
|
||||
*
|
||||
* @param clock The clock to use for all temporal needs.
|
||||
* @return this
|
||||
*/
|
||||
public Builder setClock(Clock clock) {
|
||||
Objects.requireNonNull(clock, "clock");
|
||||
this.clock = clock;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign an {@link IdGenerator}.
|
||||
*
|
||||
* @param idGenerator A generator for trace and span ids. Note: this should be thread-safe and
|
||||
* as contention free as possible.
|
||||
* @return this
|
||||
*/
|
||||
public Builder setIdGenerator(IdGenerator idGenerator) {
|
||||
Objects.requireNonNull(idGenerator, "idGenerator");
|
||||
this.idsGenerator = idGenerator;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a {@link Resource} to be attached to all Spans created by Tracers.
|
||||
*
|
||||
* @param resource A Resource implementation.
|
||||
* @return this
|
||||
*/
|
||||
public Builder setResource(Resource resource) {
|
||||
Objects.requireNonNull(resource, "resource");
|
||||
this.resource = resource;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign an initial {@link TraceConfig} that should be used with this SDK.
|
||||
*
|
||||
* @return this
|
||||
*/
|
||||
public Builder setTraceConfig(TraceConfig traceConfig) {
|
||||
this.traceConfig = traceConfig;
|
||||
Objects.requireNonNull(traceConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new TraceSdkProvider instance.
|
||||
*
|
||||
* @return An initialized TraceSdkProvider.
|
||||
*/
|
||||
public SdkTracerProvider build() {
|
||||
return new SdkTracerProvider(clock, idsGenerator, resource, traceConfig);
|
||||
}
|
||||
|
||||
private Builder() {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.sdk.trace;
|
||||
|
||||
import io.opentelemetry.sdk.common.Clock;
|
||||
import io.opentelemetry.sdk.internal.SystemClock;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import java.util.Objects;
|
||||
|
||||
/** Builder of {@link SdkTracerProvider}. */
|
||||
public final class SdkTracerProviderBuilder {
|
||||
|
||||
private Clock clock = SystemClock.getInstance();
|
||||
private IdGenerator idsGenerator = IdGenerator.random();
|
||||
private Resource resource = Resource.getDefault();
|
||||
private TraceConfig traceConfig = TraceConfig.getDefault();
|
||||
|
||||
/**
|
||||
* Assign a {@link Clock}.
|
||||
*
|
||||
* @param clock The clock to use for all temporal needs.
|
||||
* @return this
|
||||
*/
|
||||
public SdkTracerProviderBuilder setClock(Clock clock) {
|
||||
Objects.requireNonNull(clock, "clock");
|
||||
this.clock = clock;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign an {@link IdGenerator}.
|
||||
*
|
||||
* @param idGenerator A generator for trace and span ids. Note: this should be thread-safe and as
|
||||
* contention free as possible.
|
||||
* @return this
|
||||
*/
|
||||
public SdkTracerProviderBuilder setIdGenerator(IdGenerator idGenerator) {
|
||||
Objects.requireNonNull(idGenerator, "idGenerator");
|
||||
this.idsGenerator = idGenerator;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a {@link Resource} to be attached to all Spans created by Tracers.
|
||||
*
|
||||
* @param resource A Resource implementation.
|
||||
* @return this
|
||||
*/
|
||||
public SdkTracerProviderBuilder setResource(Resource resource) {
|
||||
Objects.requireNonNull(resource, "resource");
|
||||
this.resource = resource;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign an initial {@link TraceConfig} that should be used with this SDK.
|
||||
*
|
||||
* @return this
|
||||
*/
|
||||
public SdkTracerProviderBuilder setTraceConfig(TraceConfig traceConfig) {
|
||||
this.traceConfig = traceConfig;
|
||||
Objects.requireNonNull(traceConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new TraceSdkProvider instance.
|
||||
*
|
||||
* @return An initialized TraceSdkProvider.
|
||||
*/
|
||||
public SdkTracerProvider build() {
|
||||
return new SdkTracerProvider(clock, idsGenerator, resource, traceConfig);
|
||||
}
|
||||
|
||||
SdkTracerProviderBuilder() {}
|
||||
}
|
Loading…
Reference in New Issue