Skip to content

Commit 0a9791b

Browse files
committed
Otlp exporter compileOnly dependency on api incubator
1 parent 08c2eec commit 0a9791b

File tree

11 files changed

+240
-181
lines changed

11 files changed

+240
-181
lines changed

exporters/common/src/main/java/io/opentelemetry/exporter/internal/ExporterBuilderUtil.java

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static io.opentelemetry.sdk.metrics.Aggregation.explicitBucketHistogram;
99

10-
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1110
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1211
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
1312
import io.opentelemetry.sdk.common.export.MemoryMode;
@@ -63,22 +62,6 @@ public static void configureExporterMemoryMode(
6362
memoryModeConsumer.accept(memoryMode);
6463
}
6564

66-
/** Invoke the {@code memoryModeConsumer} with the configured {@link MemoryMode}. */
67-
public static void configureExporterMemoryMode(
68-
DeclarativeConfigProperties config, Consumer<MemoryMode> memoryModeConsumer) {
69-
String memoryModeStr = config.getString("memory_mode");
70-
if (memoryModeStr == null) {
71-
return;
72-
}
73-
MemoryMode memoryMode;
74-
try {
75-
memoryMode = MemoryMode.valueOf(memoryModeStr.toUpperCase(Locale.ROOT));
76-
} catch (IllegalArgumentException e) {
77-
throw new ConfigurationException("Unrecognized memory_mode: " + memoryModeStr, e);
78-
}
79-
memoryModeConsumer.accept(memoryMode);
80-
}
81-
8265
/**
8366
* Invoke the {@code defaultAggregationSelectorConsumer} with the configured {@link
8467
* DefaultAggregationSelector}.
@@ -126,30 +109,6 @@ public static void configureOtlpAggregationTemporality(
126109
aggregationTemporalitySelectorConsumer.accept(temporalitySelector);
127110
}
128111

129-
public static void configureOtlpAggregationTemporality(
130-
DeclarativeConfigProperties config,
131-
Consumer<AggregationTemporalitySelector> aggregationTemporalitySelectorConsumer) {
132-
String temporalityStr = config.getString("temporality_preference");
133-
if (temporalityStr == null) {
134-
return;
135-
}
136-
AggregationTemporalitySelector temporalitySelector;
137-
switch (temporalityStr.toLowerCase(Locale.ROOT)) {
138-
case "cumulative":
139-
temporalitySelector = AggregationTemporalitySelector.alwaysCumulative();
140-
break;
141-
case "delta":
142-
temporalitySelector = AggregationTemporalitySelector.deltaPreferred();
143-
break;
144-
case "lowmemory":
145-
temporalitySelector = AggregationTemporalitySelector.lowMemory();
146-
break;
147-
default:
148-
throw new ConfigurationException("Unrecognized temporality_preference: " + temporalityStr);
149-
}
150-
aggregationTemporalitySelectorConsumer.accept(temporalitySelector);
151-
}
152-
153112
/**
154113
* Invoke the {@code defaultAggregationSelectorConsumer} with the configured {@link
155114
* DefaultAggregationSelector}.
@@ -165,28 +124,5 @@ public static void configureOtlpHistogramDefaultAggregation(
165124
}
166125
}
167126

168-
/**
169-
* Invoke the {@code defaultAggregationSelectorConsumer} with the configured {@link
170-
* DefaultAggregationSelector}.
171-
*/
172-
public static void configureOtlpHistogramDefaultAggregation(
173-
DeclarativeConfigProperties config,
174-
Consumer<DefaultAggregationSelector> defaultAggregationSelectorConsumer) {
175-
String defaultHistogramAggregation = config.getString("default_histogram_aggregation");
176-
if (defaultHistogramAggregation == null) {
177-
return;
178-
}
179-
if (AggregationUtil.aggregationName(Aggregation.base2ExponentialBucketHistogram())
180-
.equalsIgnoreCase(defaultHistogramAggregation)) {
181-
defaultAggregationSelectorConsumer.accept(
182-
DefaultAggregationSelector.getDefault()
183-
.with(InstrumentType.HISTOGRAM, Aggregation.base2ExponentialBucketHistogram()));
184-
} else if (!AggregationUtil.aggregationName(explicitBucketHistogram())
185-
.equalsIgnoreCase(defaultHistogramAggregation)) {
186-
throw new ConfigurationException(
187-
"Unrecognized default_histogram_aggregation: " + defaultHistogramAggregation);
188-
}
189-
}
190-
191127
private ExporterBuilderUtil() {}
192128
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.internal;
7+
8+
import static io.opentelemetry.sdk.metrics.Aggregation.explicitBucketHistogram;
9+
10+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
12+
import io.opentelemetry.sdk.common.export.MemoryMode;
13+
import io.opentelemetry.sdk.metrics.Aggregation;
14+
import io.opentelemetry.sdk.metrics.InstrumentType;
15+
import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector;
16+
import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector;
17+
import io.opentelemetry.sdk.metrics.internal.aggregator.AggregationUtil;
18+
import java.util.Locale;
19+
import java.util.function.Consumer;
20+
21+
/**
22+
* Utilities for exporter builders.
23+
*
24+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
25+
* at any time.
26+
*/
27+
public final class IncuatingExporterBuilderUtil {
28+
29+
/** Invoke the {@code memoryModeConsumer} with the configured {@link MemoryMode}. */
30+
public static void configureExporterMemoryMode(
31+
DeclarativeConfigProperties config, Consumer<MemoryMode> memoryModeConsumer) {
32+
String memoryModeStr = config.getString("memory_mode");
33+
if (memoryModeStr == null) {
34+
return;
35+
}
36+
MemoryMode memoryMode;
37+
try {
38+
memoryMode = MemoryMode.valueOf(memoryModeStr.toUpperCase(Locale.ROOT));
39+
} catch (IllegalArgumentException e) {
40+
throw new ConfigurationException("Unrecognized memory_mode: " + memoryModeStr, e);
41+
}
42+
memoryModeConsumer.accept(memoryMode);
43+
}
44+
45+
public static void configureOtlpAggregationTemporality(
46+
DeclarativeConfigProperties config,
47+
Consumer<AggregationTemporalitySelector> aggregationTemporalitySelectorConsumer) {
48+
String temporalityStr = config.getString("temporality_preference");
49+
if (temporalityStr == null) {
50+
return;
51+
}
52+
AggregationTemporalitySelector temporalitySelector;
53+
switch (temporalityStr.toLowerCase(Locale.ROOT)) {
54+
case "cumulative":
55+
temporalitySelector = AggregationTemporalitySelector.alwaysCumulative();
56+
break;
57+
case "delta":
58+
temporalitySelector = AggregationTemporalitySelector.deltaPreferred();
59+
break;
60+
case "lowmemory":
61+
temporalitySelector = AggregationTemporalitySelector.lowMemory();
62+
break;
63+
default:
64+
throw new ConfigurationException("Unrecognized temporality_preference: " + temporalityStr);
65+
}
66+
aggregationTemporalitySelectorConsumer.accept(temporalitySelector);
67+
}
68+
69+
/**
70+
* Invoke the {@code defaultAggregationSelectorConsumer} with the configured {@link
71+
* DefaultAggregationSelector}.
72+
*/
73+
public static void configureOtlpHistogramDefaultAggregation(
74+
DeclarativeConfigProperties config,
75+
Consumer<DefaultAggregationSelector> defaultAggregationSelectorConsumer) {
76+
String defaultHistogramAggregation = config.getString("default_histogram_aggregation");
77+
if (defaultHistogramAggregation == null) {
78+
return;
79+
}
80+
if (AggregationUtil.aggregationName(Aggregation.base2ExponentialBucketHistogram())
81+
.equalsIgnoreCase(defaultHistogramAggregation)) {
82+
defaultAggregationSelectorConsumer.accept(
83+
DefaultAggregationSelector.getDefault()
84+
.with(InstrumentType.HISTOGRAM, Aggregation.base2ExponentialBucketHistogram()));
85+
} else if (!AggregationUtil.aggregationName(explicitBucketHistogram())
86+
.equalsIgnoreCase(defaultHistogramAggregation)) {
87+
throw new ConfigurationException(
88+
"Unrecognized default_histogram_aggregation: " + defaultHistogramAggregation);
89+
}
90+
}
91+
92+
private IncuatingExporterBuilderUtil() {}
93+
}

exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.exporter.logging.otlp.internal.logs;
77

88
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9-
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
9+
import io.opentelemetry.exporter.internal.IncuatingExporterBuilderUtil;
1010
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1111
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
1212

@@ -32,7 +32,7 @@ public String getName() {
3232
@Override
3333
public LogRecordExporter create(DeclarativeConfigProperties config) {
3434
OtlpStdoutLogRecordExporterBuilder builder = OtlpStdoutLogRecordExporter.builder();
35-
ExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
35+
IncuatingExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
3636
return builder.build();
3737
}
3838
}

exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/metrics/OtlpStdoutMetricExporterComponentProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.exporter.logging.otlp.internal.metrics;
77

88
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9-
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
9+
import io.opentelemetry.exporter.internal.IncuatingExporterBuilderUtil;
1010
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1111
import io.opentelemetry.sdk.metrics.export.MetricExporter;
1212

@@ -32,10 +32,10 @@ public String getName() {
3232
@Override
3333
public MetricExporter create(DeclarativeConfigProperties config) {
3434
OtlpStdoutMetricExporterBuilder builder = OtlpStdoutMetricExporter.builder();
35-
ExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
36-
ExporterBuilderUtil.configureOtlpAggregationTemporality(
35+
IncuatingExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
36+
IncuatingExporterBuilderUtil.configureOtlpAggregationTemporality(
3737
config, builder::setAggregationTemporalitySelector);
38-
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
38+
IncuatingExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
3939
config, builder::setDefaultAggregationSelector);
4040
return builder.build();
4141
}

exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/traces/OtlpStdoutSpanExporterComponentProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.exporter.logging.otlp.internal.traces;
77

88
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9-
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
9+
import io.opentelemetry.exporter.internal.IncuatingExporterBuilderUtil;
1010
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1111
import io.opentelemetry.sdk.trace.export.SpanExporter;
1212

@@ -32,7 +32,7 @@ public String getName() {
3232
@Override
3333
public SpanExporter create(DeclarativeConfigProperties config) {
3434
OtlpStdoutSpanExporterBuilder builder = OtlpStdoutSpanExporter.builder();
35-
ExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
35+
IncuatingExporterBuilderUtil.configureExporterMemoryMode(config, builder::setMemoryMode);
3636
return builder.build();
3737
}
3838
}

exporters/otlp/all/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ dependencies {
1919
implementation(project(":exporters:otlp:common"))
2020
implementation(project(":exporters:sender:okhttp"))
2121
implementation(project(":sdk-extensions:autoconfigure-spi"))
22-
// TODO(jack-berg): must be compileOnly
23-
implementation(project(":api:incubator"))
22+
23+
compileOnly(project(":api:incubator"))
2424

2525
compileOnly("io.grpc:grpc-stub")
2626

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java

Lines changed: 3 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55

66
package io.opentelemetry.exporter.otlp.internal;
77

8-
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
98
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
109
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1110
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
12-
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1311
import io.opentelemetry.sdk.common.export.MemoryMode;
1412
import io.opentelemetry.sdk.common.export.RetryPolicy;
1513
import java.io.File;
@@ -20,8 +18,6 @@
2018
import java.net.URLDecoder;
2119
import java.nio.charset.StandardCharsets;
2220
import java.time.Duration;
23-
import java.util.Collections;
24-
import java.util.List;
2521
import java.util.Map;
2622
import java.util.function.BiConsumer;
2723
import java.util.function.Consumer;
@@ -52,18 +48,6 @@ public static String getOtlpProtocol(String dataType, ConfigProperties config) {
5248
return config.getString("otel.exporter.otlp.protocol", PROTOCOL_GRPC);
5349
}
5450

55-
/** Determine the configured OTLP protocol for the {@code dataType}. */
56-
public static String getStructuredConfigOtlpProtocol(DeclarativeConfigProperties config) {
57-
// NOTE: The default OTLP protocol is different for declarative config than for env var / system
58-
// property based config. This is intentional. OpenTelemetry changed the default protocol
59-
// recommendation from grpc to http/protobuf, but the autoconfigure's env var / system property
60-
// based config did not update to reflect this before stabilizing, and changing is a breaking
61-
// change requiring a major version bump. Declarative config is not yet stable and therefore can
62-
// switch to the current default recommendation, which aligns also aligns with the behavior of
63-
// the OpenTelemetry Java Agent 2.x+.
64-
return config.getString("protocol", PROTOCOL_HTTP_PROTOBUF);
65-
}
66-
6751
/** Invoke the setters with the OTLP configuration for the {@code dataType}. */
6852
@SuppressWarnings("TooManyParameters")
6953
public static void configureOtlpExporterBuilder(
@@ -164,81 +148,7 @@ public static void configureOtlpExporterBuilder(
164148
ExporterBuilderUtil.configureExporterMemoryMode(config, setMemoryMode);
165149
}
166150

167-
/** Invoke the setters with the OTLP configuration for the {@code dataType}. */
168-
@SuppressWarnings("TooManyParameters")
169-
public static void configureOtlpExporterBuilder(
170-
String dataType,
171-
DeclarativeConfigProperties config,
172-
Consumer<String> setEndpoint,
173-
BiConsumer<String, String> addHeader,
174-
Consumer<String> setCompression,
175-
Consumer<Duration> setTimeout,
176-
Consumer<byte[]> setTrustedCertificates,
177-
BiConsumer<byte[], byte[]> setClientTls,
178-
Consumer<RetryPolicy> setRetryPolicy,
179-
Consumer<MemoryMode> setMemoryMode) {
180-
String protocol = getStructuredConfigOtlpProtocol(config);
181-
boolean isHttpProtobuf = protocol.equals(PROTOCOL_HTTP_PROTOBUF);
182-
URL endpoint = validateEndpoint(config.getString("endpoint"), isHttpProtobuf);
183-
if (endpoint != null) {
184-
setEndpoint.accept(endpoint.toString());
185-
}
186-
187-
String headerList = config.getString("headers_list");
188-
if (headerList != null) {
189-
ConfigProperties headersListConfig =
190-
DefaultConfigProperties.createFromMap(
191-
Collections.singletonMap("otel.exporter.otlp.headers", headerList));
192-
configureOtlpHeaders(headersListConfig, dataType, addHeader);
193-
}
194-
195-
List<DeclarativeConfigProperties> headers = config.getStructuredList("headers");
196-
if (headers != null) {
197-
headers.forEach(
198-
header -> {
199-
String name = header.getString("name");
200-
String value = header.getString("value");
201-
if (name != null && value != null) {
202-
addHeader.accept(name, value);
203-
}
204-
});
205-
}
206-
207-
String compression = config.getString("compression");
208-
if (compression != null) {
209-
setCompression.accept(compression);
210-
}
211-
212-
Integer timeoutMs = config.getInt("timeout");
213-
if (timeoutMs != null) {
214-
setTimeout.accept(Duration.ofMillis(timeoutMs));
215-
}
216-
217-
String certificatePath = config.getString("certificate");
218-
String clientKeyPath = config.getString("client_key");
219-
String clientKeyChainPath = config.getString("client_certificate");
220-
221-
if (clientKeyPath != null && clientKeyChainPath == null) {
222-
throw new ConfigurationException(
223-
"client_key provided without client_certificate - both client_key and client_certificate must be set");
224-
} else if (clientKeyPath == null && clientKeyChainPath != null) {
225-
throw new ConfigurationException(
226-
"client_certificate provided without client_key - both client_key and client_certificate must be set");
227-
}
228-
byte[] certificateBytes = readFileBytes(certificatePath);
229-
if (certificateBytes != null) {
230-
setTrustedCertificates.accept(certificateBytes);
231-
}
232-
byte[] clientKeyBytes = readFileBytes(clientKeyPath);
233-
byte[] clientKeyChainBytes = readFileBytes(clientKeyChainPath);
234-
if (clientKeyBytes != null && clientKeyChainBytes != null) {
235-
setClientTls.accept(clientKeyBytes, clientKeyChainBytes);
236-
}
237-
238-
ExporterBuilderUtil.configureExporterMemoryMode(config, setMemoryMode);
239-
}
240-
241-
private static void configureOtlpHeaders(
151+
static void configureOtlpHeaders(
242152
ConfigProperties config, String dataType, BiConsumer<String, String> addHeader) {
243153
Map<String, String> headers = config.getMap("otel.exporter.otlp." + dataType + ".headers");
244154
if (headers.isEmpty()) {
@@ -266,7 +176,7 @@ private static URL createUrl(URL context, String spec) {
266176
}
267177

268178
@Nullable
269-
private static URL validateEndpoint(@Nullable String endpoint, boolean isHttpProtobuf) {
179+
static URL validateEndpoint(@Nullable String endpoint, boolean isHttpProtobuf) {
270180
if (endpoint == null) {
271181
return null;
272182
}
@@ -314,7 +224,7 @@ private static URL validateEndpoint(@Nullable String endpoint, boolean isHttpPro
314224
}
315225

316226
@Nullable
317-
private static byte[] readFileBytes(@Nullable String filePath) {
227+
static byte[] readFileBytes(@Nullable String filePath) {
318228
if (filePath == null) {
319229
return null;
320230
}

0 commit comments

Comments
 (0)