Skip to content

Commit 162edef

Browse files
authored
add declarative config for baggage (#2031)
1 parent 4b6c5a1 commit 162edef

File tree

8 files changed

+153
-4
lines changed

8 files changed

+153
-4
lines changed

baggage-processor/build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@ description = "OpenTelemetry Baggage Span Processor"
88
otelJava.moduleName.set("io.opentelemetry.contrib.baggage.processor")
99

1010
dependencies {
11+
annotationProcessor("com.google.auto.service:auto-service")
12+
compileOnly("com.google.auto.service:auto-service-annotations")
1113
api("io.opentelemetry:opentelemetry-api")
1214
api("io.opentelemetry:opentelemetry-sdk")
1315
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
16+
compileOnly("io.opentelemetry:opentelemetry-sdk-common")
17+
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1418

19+
testAnnotationProcessor("com.google.auto.service:auto-service")
20+
testCompileOnly("com.google.auto.service:auto-service-annotations")
21+
testImplementation("io.opentelemetry:opentelemetry-sdk-common")
1522
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
23+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1624
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
1725
testImplementation("org.mockito:mockito-inline")
1826
testImplementation("com.google.guava:guava")
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.internal.IncludeExcludePredicate;
12+
import io.opentelemetry.sdk.logs.LogRecordProcessor;
13+
14+
@SuppressWarnings("rawtypes")
15+
@AutoService(ComponentProvider.class)
16+
public class BaggageLogRecordComponentProvider implements ComponentProvider<LogRecordProcessor> {
17+
@Override
18+
public String getName() {
19+
return "baggage";
20+
}
21+
22+
@Override
23+
public LogRecordProcessor create(DeclarativeConfigProperties config) {
24+
return new BaggageLogRecordProcessor(
25+
IncludeExcludePredicate.createPatternMatching(
26+
config.getScalarList("included", String.class),
27+
config.getScalarList("excluded", String.class)));
28+
}
29+
30+
@Override
31+
public Class<LogRecordProcessor> getType() {
32+
return LogRecordProcessor.class;
33+
}
34+
}

baggage-processor/src/main/java/io/opentelemetry/contrib/baggage/processor/BaggageProcessorCustomizer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55

66
package io.opentelemetry.contrib.baggage.processor;
77

8+
import com.google.auto.service.AutoService;
89
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
910
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
1213
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
1314
import java.util.List;
1415

16+
@AutoService(AutoConfigurationCustomizerProvider.class)
1517
public class BaggageProcessorCustomizer implements AutoConfigurationCustomizerProvider {
1618
@Override
1719
public void customize(AutoConfigurationCustomizer autoConfigurationCustomizer) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.internal.IncludeExcludePredicate;
12+
import io.opentelemetry.sdk.trace.SpanProcessor;
13+
14+
@SuppressWarnings("rawtypes")
15+
@AutoService(ComponentProvider.class)
16+
public class BaggageSpanComponentProvider implements ComponentProvider<SpanProcessor> {
17+
@Override
18+
public String getName() {
19+
return "baggage";
20+
}
21+
22+
@Override
23+
public SpanProcessor create(DeclarativeConfigProperties config) {
24+
return new BaggageSpanProcessor(
25+
IncludeExcludePredicate.createPatternMatching(
26+
config.getScalarList("included", String.class),
27+
config.getScalarList("excluded", String.class)));
28+
}
29+
30+
@Override
31+
public Class<SpanProcessor> getType() {
32+
return SpanProcessor.class;
33+
}
34+
}

baggage-processor/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.junit.jupiter.api.Test;
15+
16+
class BaggageLogRecordComponentProviderTest {
17+
18+
@Test
19+
void declarativeConfig() {
20+
String yaml =
21+
"file_format: 0.4\n"
22+
+ "logger_provider:\n"
23+
+ " processors:\n"
24+
+ " - baggage:\n"
25+
+ " included: [foo]\n"
26+
+ " excluded: [bar]\n";
27+
28+
OpenTelemetrySdk sdk =
29+
DeclarativeConfiguration.parseAndCreate(
30+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
31+
32+
assertThat(sdk).asString().contains("BaggageLogRecordProcessor");
33+
}
34+
}

baggage-processor/src/test/java/io/opentelemetry/contrib/baggage/processor/BaggageProcessorCustomizerTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,15 @@ class BaggageProcessorCustomizerTest {
4848
private static final String MEMORY_EXPORTER = "memory";
4949

5050
@Test
51-
void test_customizer() {
51+
void test_empty_customizer() {
5252
assertCustomizer(
5353
Collections.emptyMap(),
5454
span -> assertThat(span).hasTotalAttributeCount(0),
5555
logRecord -> assertThat(logRecord).hasTotalAttributeCount(0));
56+
}
57+
58+
@Test
59+
void test_customizer() {
5660
Map<String, String> properties = new HashMap<>();
5761
properties.put("otel.java.experimental.span-attributes.copy-from-baggage.include", "key");
5862
properties.put("otel.java.experimental.log-attributes.copy-from-baggage.include", "key");
@@ -117,7 +121,7 @@ private static OpenTelemetrySdk getOpenTelemetrySdk(
117121
new ComponentLoader() {
118122
@Override
119123
public <T> List<T> load(Class<T> spiClass) {
120-
if (spiClass == ConfigurableSpanExporterProvider.class) {
124+
if (spiClass.equals(ConfigurableSpanExporterProvider.class)) {
121125
return Collections.singletonList(
122126
spiClass.cast(
123127
new ConfigurableSpanExporterProvider() {
@@ -132,7 +136,7 @@ public String getName() {
132136
return MEMORY_EXPORTER;
133137
}
134138
}));
135-
} else if (spiClass == ConfigurableLogRecordExporterProvider.class) {
139+
} else if (spiClass.equals(ConfigurableLogRecordExporterProvider.class)) {
136140
return Collections.singletonList(
137141
spiClass.cast(
138142
new ConfigurableLogRecordExporterProvider() {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.junit.jupiter.api.Test;
15+
16+
class BaggageSpanComponentProviderTest {
17+
18+
@Test
19+
void declarativeConfig() {
20+
String yaml =
21+
"file_format: 0.4\n"
22+
+ "tracer_provider:\n"
23+
+ " processors:\n"
24+
+ " - baggage:\n"
25+
+ " included: [foo]\n"
26+
+ " excluded: [bar]\n";
27+
28+
OpenTelemetrySdk sdk =
29+
DeclarativeConfiguration.parseAndCreate(
30+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
31+
32+
assertThat(sdk).asString().contains("BaggageSpanProcessor");
33+
}
34+
}

0 commit comments

Comments
 (0)