Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,26 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.readFileBytes;
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.validateEndpoint;

import io.opentelemetry.api.incubator.config.ConfigProvider;
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.common.ComponentLoader;
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ExtendedDeclarativeConfigProperties;
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.common.export.MemoryMode;
import io.opentelemetry.sdk.common.export.RetryPolicy;
import java.net.URL;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import javax.annotation.Nullable;

/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
Expand All @@ -47,7 +53,7 @@ public static String getStructuredConfigOtlpProtocol(DeclarativeConfigProperties
@SuppressWarnings("TooManyParameters")
public static void configureOtlpExporterBuilder(
String dataType,
DeclarativeConfigProperties config,
DeclarativeConfigProperties baseConfig,
Consumer<ComponentLoader> setComponentLoader,
Consumer<String> setEndpoint,
BiConsumer<String, String> addHeader,
Expand All @@ -57,7 +63,14 @@ public static void configureOtlpExporterBuilder(
BiConsumer<byte[], byte[]> setClientTls,
Consumer<RetryPolicy> setRetryPolicy,
Consumer<MemoryMode> setMemoryMode,
boolean isHttpProtobuf) {
boolean isHttpProtobuf,
Consumer<InternalTelemetryVersion> internalTelemetryVersionConsumer,
Runnable setNoopMeterProvider) {
if (!(baseConfig instanceof ExtendedDeclarativeConfigProperties)) {
throw new IllegalArgumentException("Expected ExtendedDeclarativeConfigProperties");
}
ExtendedDeclarativeConfigProperties config = (ExtendedDeclarativeConfigProperties) baseConfig;

setComponentLoader.accept(config.getComponentLoader());

URL endpoint = validateEndpoint(config.getString("endpoint"), isHttpProtobuf);
Expand Down Expand Up @@ -119,6 +132,35 @@ public static void configureOtlpExporterBuilder(
}

IncubatingExporterBuilderUtil.configureExporterMemoryMode(config, setMemoryMode);

// InternalTelemetryVersion defaults to disabled (i.e. null) until semantic conventions are
// stable. To disable, set a noop meter provider.
InternalTelemetryVersion telemetryVersion =
getInternalTelemetryVersion(config.getConfigProvider());
if (telemetryVersion == null) {
setNoopMeterProvider.run();
} else {
internalTelemetryVersionConsumer.accept(telemetryVersion);
}
}

@Nullable
private static InternalTelemetryVersion getInternalTelemetryVersion(
ConfigProvider configProvider) {
String internalTelemetryVersion =
configProvider.getInstrumentationConfig("otel_sdk").getString("internal_telemetry_version");
if (internalTelemetryVersion == null) {
return null;
}
switch (internalTelemetryVersion.toLowerCase(Locale.ROOT)) {
case "legacy":
return InternalTelemetryVersion.LEGACY;
case "latest":
return InternalTelemetryVersion.LATEST;
default:
throw new DeclarativeConfigException(
"Invalid sdk telemetry version: " + internalTelemetryVersion);
}
}

private OtlpDeclarativeConfigUtil() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
Expand Down Expand Up @@ -47,7 +48,9 @@ public LogRecordExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ false);
/* isHttpProtobuf= */ false,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
Expand Down Expand Up @@ -48,7 +49,9 @@ public MetricExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ false);
/* isHttpProtobuf= */ false,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));
IncubatingExporterBuilderUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
IncubatingExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
Expand Down Expand Up @@ -47,7 +48,9 @@ public SpanExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ false);
/* isHttpProtobuf= */ false,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
Expand Down Expand Up @@ -47,7 +48,9 @@ public LogRecordExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ true);
/* isHttpProtobuf= */ true,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
Expand Down Expand Up @@ -48,7 +49,9 @@ public MetricExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ true);
/* isHttpProtobuf= */ true,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));
IncubatingExporterBuilderUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
IncubatingExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;

import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
Expand Down Expand Up @@ -47,7 +48,9 @@ public SpanExporter create(DeclarativeConfigProperties config) {
builder::setClientTls,
builder::setRetryPolicy,
builder::setMemoryMode,
/* isHttpProtobuf= */ true);
/* isHttpProtobuf= */ true,
builder::setInternalTelemetryVersion,
() -> builder.setMeterProvider(MeterProvider::noop));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.autoconfigure.spi.internal;

import io.opentelemetry.api.incubator.config.ConfigProvider;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;

/**
* Extended version of {@link DeclarativeConfigProperties} with access to {@link ConfigProvider}.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
public interface ExtendedDeclarativeConfigProperties extends DeclarativeConfigProperties {

ConfigProvider getConfigProvider();
}
5 changes: 5 additions & 0 deletions sdk-extensions/autoconfigure/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,12 @@ testing {
dependencies {
implementation(project(":sdk-extensions:incubator"))
implementation(project(":exporters:logging"))
implementation(project(":exporters:otlp:all"))
implementation(project(":sdk:testing"))

implementation("io.opentelemetry.proto:opentelemetry-proto")
implementation("com.linecorp.armeria:armeria-junit5")
implementation("com.linecorp.armeria:armeria-grpc")
}
}

Expand Down
Loading
Loading