Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.extension.incubator.fileconfig;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import java.util.function.BiFunction;

/** A builder for customizing OpenTelemetry file configuration. */
public interface DeclarativeConfigurationCustomizer {

/**
* Adds a {@link BiFunction} to invoke with the declaratively configured {@link Resource} 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.
*/
DeclarativeConfigurationCustomizer addResourceCustomizer(
BiFunction<? super Resource, DeclarativeConfigProperties, ? extends Resource>
resourceCustomizer);

/**
* Adds a {@link BiFunction} to invoke with the declaratively configured {@link TextMapPropagator}
* 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.
*/
DeclarativeConfigurationCustomizer addPropagatorCustomizer(
BiFunction<
? super TextMapPropagator, DeclarativeConfigProperties, ? extends TextMapPropagator>
propagatorCustomizer);

/**
* Adds a {@link BiFunction} to invoke with the declaratively configured {@link
* SdkMeterProviderBuilder} 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.
*/
DeclarativeConfigurationCustomizer addMeterProviderCustomizer(
BiFunction<
? super SdkMeterProviderBuilder,
DeclarativeConfigProperties,
? extends SdkMeterProviderBuilder>
meterProviderCustomizer);

/**
* Adds a {@link BiFunction} to invoke with the declaratively configured {@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.
*/
DeclarativeConfigurationCustomizer addTraceProviderCustomizer(
BiFunction<
? super SdkTracerProviderBuilder,
DeclarativeConfigProperties,
? extends SdkTracerProviderBuilder>
traceProviderCustomizer);

/**
* Adds a {@link BiFunction} to invoke with the declaratively configured {@link
* SdkLoggerProviderBuilder} 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.
*/
DeclarativeConfigurationCustomizer addLoggerProviderCustomizer(
BiFunction<
? super SdkLoggerProviderBuilder,
DeclarativeConfigProperties,
? extends SdkLoggerProviderBuilder>
loggerProviderCustomizer);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.extension.incubator.fileconfig;

import com.google.auto.value.AutoValue;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import javax.annotation.concurrent.Immutable;

/**
* A declaratively configured OpenTelemetry SDK. As an alternative to programmatically configuring
* the SDK using {@link OpenTelemetrySdk#builder()} and auto-configured SDK using {@link
* AutoConfiguredOpenTelemetrySdk#builder()}. This class can be used to configure the SDK using the
* configuration file in the OpenTelemetry specified format.
*/
@Immutable
@AutoValue
public abstract class DeclarativeConfiguredOpenTelemetrySdk {

/**
* Returns the {@link OpenTelemetrySdk} that was declaratively configured, or an effectively noop
* instance if the SDK has been disabled.
*
* <p>The instance returned if the SDK is disabled is equivalent to {@code
* OpenTelemetrySdk.builder().build()}, which is notably not the same as {@link
* OpenTelemetry#noop()}.
*/
public abstract OpenTelemetrySdk getOpenTelemetrySdk();

/**
* Returns a new {@link DeclarativeConfiguredOpenTelemetrySdkBuilder} which can be used to build
* {@link OpenTelemetrySdk} based on file configuration with customizations made.
*/
public static DeclarativeConfiguredOpenTelemetrySdkBuilder builder() {
return new DeclarativeConfiguredOpenTelemetrySdkBuilder();
}

static DeclarativeConfiguredOpenTelemetrySdk create(OpenTelemetrySdk sdk) {
return new AutoValue_DeclarativeConfiguredOpenTelemetrySdk(sdk);
}
}
Loading
Loading