Skip to content

Commit 0e7cf53

Browse files
committed
baggage processor
1 parent 4046f73 commit 0e7cf53

File tree

7 files changed

+121
-17
lines changed

7 files changed

+121
-17
lines changed

baggage-processor/build.gradle.kts

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

1010
dependencies {
11+
implementation(project(":declarative-config-bridge"))
12+
13+
annotationProcessor("com.google.auto.service:auto-service")
14+
compileOnly("com.google.auto.service:auto-service-annotations")
1115
api("io.opentelemetry:opentelemetry-api")
1216
api("io.opentelemetry:opentelemetry-sdk")
1317
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
18+
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1419

1520
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
21+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1622
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
1723
testImplementation("org.mockito:mockito-inline")
1824
testImplementation("com.google.guava:guava")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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.contrib.sdk.autoconfigure.ConfigPropertiesUtil;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import io.opentelemetry.sdk.logs.LogRecordProcessor;
13+
import java.util.Collections;
14+
15+
@SuppressWarnings("rawtypes")
16+
@AutoService(ComponentProvider.class)
17+
public class BaggageLogRecordComponentProvider implements ComponentProvider<LogRecordProcessor> {
18+
@Override
19+
public String getName() {
20+
return "baggage";
21+
}
22+
23+
@Override
24+
public LogRecordProcessor create(DeclarativeConfigProperties config) {
25+
return BaggageProcessorCustomizer.createBaggageLogRecordProcessor(ConfigPropertiesUtil.resolveConfig(
26+
config, Collections.singletonMap(BaggageProcessorCustomizer.LOG_PREFIX, "")));
27+
}
28+
29+
@Override
30+
public Class<LogRecordProcessor> getType() {
31+
return LogRecordProcessor.class;
32+
}
33+
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,23 @@ public class BaggageLogRecordProcessor implements LogRecordProcessor {
2323
* created log record.
2424
*/
2525
public static BaggageLogRecordProcessor allowAllBaggageKeys() {
26-
return new BaggageLogRecordProcessor(baggageKey -> true);
26+
return new BaggageLogRecordProcessor(baggageKey -> true, false);
2727
}
2828

2929
private final Predicate<String> baggageKeyPredicate;
30+
private boolean empty;
3031

3132
/**
3233
* Creates a new {@link BaggageLogRecordProcessor} that copies only baggage entries with keys that
3334
* pass the provided filter into the newly created log record.
3435
*/
3536
public BaggageLogRecordProcessor(Predicate<String> baggageKeyPredicate) {
37+
this(baggageKeyPredicate, false); // we don't know if the predicate matches any keys
38+
}
39+
40+
BaggageLogRecordProcessor(Predicate<String> baggageKeyPredicate, boolean empty) {
3641
this.baggageKeyPredicate = baggageKeyPredicate;
42+
this.empty = empty;
3743
}
3844

3945
@Override
@@ -46,4 +52,8 @@ public void onEmit(Context context, ReadWriteLogRecord logRecord) {
4652
}
4753
});
4854
}
55+
56+
boolean isEmpty() {
57+
return empty;
58+
}
4959
}

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

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@
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 {
18+
static final String SPAN_PREFIX = "otel.java.experimental.span-attributes.";
19+
static final String LOG_PREFIX = "otel.java.experimental.log-attributes.";
20+
1621
@Override
1722
public void customize(AutoConfigurationCustomizer autoConfigurationCustomizer) {
1823
autoConfigurationCustomizer
@@ -30,39 +35,47 @@ public void customize(AutoConfigurationCustomizer autoConfigurationCustomizer) {
3035

3136
private static void addSpanProcessor(
3237
SdkTracerProviderBuilder sdkTracerProviderBuilder, ConfigProperties config) {
33-
List<String> keys =
34-
config.getList("otel.java.experimental.span-attributes.copy-from-baggage.include");
35-
36-
if (keys.isEmpty()) {
38+
BaggageSpanProcessor processor = createBaggageSpanProcessor(config);
39+
if (processor.isEmpty()) {
3740
return;
3841
}
42+
sdkTracerProviderBuilder.addSpanProcessor(processor);
43+
}
3944

40-
sdkTracerProviderBuilder.addSpanProcessor(createBaggageSpanProcessor(keys));
45+
static BaggageSpanProcessor createBaggageSpanProcessor(ConfigProperties config) {
46+
return createBaggageSpanProcessor(
47+
config.getList(SPAN_PREFIX + "copy-from-baggage.include"));
4148
}
4249

4350
static BaggageSpanProcessor createBaggageSpanProcessor(List<String> keys) {
44-
if (keys.size() == 1 && keys.get(0).equals("*")) {
51+
if (matchAll(keys)) {
4552
return BaggageSpanProcessor.allowAllBaggageKeys();
4653
}
47-
return new BaggageSpanProcessor(keys::contains);
54+
return new BaggageSpanProcessor(keys::contains, keys.isEmpty());
4855
}
4956

5057
private static void addLogRecordProcessor(
5158
SdkLoggerProviderBuilder sdkLoggerProviderBuilder, ConfigProperties config) {
52-
List<String> keys =
53-
config.getList("otel.java.experimental.log-attributes.copy-from-baggage.include");
54-
55-
if (keys.isEmpty()) {
59+
BaggageLogRecordProcessor processor = createBaggageLogRecordProcessor(config);
60+
if (processor.isEmpty()) {
5661
return;
5762
}
63+
sdkLoggerProviderBuilder.addLogRecordProcessor(processor);
64+
}
5865

59-
sdkLoggerProviderBuilder.addLogRecordProcessor(createBaggageLogRecordProcessor(keys));
66+
static BaggageLogRecordProcessor createBaggageLogRecordProcessor(ConfigProperties config) {
67+
return createBaggageLogRecordProcessor(
68+
config.getList(LOG_PREFIX + "copy-from-baggage.include"));
6069
}
6170

6271
static BaggageLogRecordProcessor createBaggageLogRecordProcessor(List<String> keys) {
63-
if (keys.size() == 1 && keys.get(0).equals("*")) {
72+
if (matchAll(keys)) {
6473
return BaggageLogRecordProcessor.allowAllBaggageKeys();
6574
}
66-
return new BaggageLogRecordProcessor(keys::contains);
75+
return new BaggageLogRecordProcessor(keys::contains, keys.isEmpty());
76+
}
77+
78+
private static boolean matchAll(List<String> keys) {
79+
return keys.size() == 1 && keys.get(0).equals("*");
6780
}
6881
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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.contrib.sdk.autoconfigure.ConfigPropertiesUtil;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
12+
import io.opentelemetry.sdk.trace.SpanProcessor;
13+
import java.util.Collections;
14+
15+
@SuppressWarnings("rawtypes")
16+
@AutoService(ComponentProvider.class)
17+
public class BaggageSpanComponentProvider implements ComponentProvider<SpanProcessor> {
18+
@Override
19+
public String getName() {
20+
return "baggage";
21+
}
22+
23+
@Override
24+
public SpanProcessor create(DeclarativeConfigProperties config) {
25+
return BaggageProcessorCustomizer.createBaggageSpanProcessor(ConfigPropertiesUtil.resolveConfig(
26+
config, Collections.singletonMap(BaggageProcessorCustomizer.SPAN_PREFIX, "")));
27+
}
28+
29+
@Override
30+
public Class<SpanProcessor> getType() {
31+
return SpanProcessor.class;
32+
}
33+
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,27 @@
1818
*/
1919
public class BaggageSpanProcessor implements SpanProcessor {
2020
private final Predicate<String> baggageKeyPredicate;
21+
private boolean empty;
2122

2223
/**
2324
* Creates a new {@link BaggageSpanProcessor} that copies only baggage entries with keys that pass
2425
* the provided filter into the newly created {@link io.opentelemetry.api.trace.Span}.
2526
*/
2627
public BaggageSpanProcessor(Predicate<String> baggageKeyPredicate) {
28+
this(baggageKeyPredicate, false); // we don't know if the predicate matches any keys
29+
}
30+
31+
BaggageSpanProcessor(Predicate<String> baggageKeyPredicate, boolean empty) {
2732
this.baggageKeyPredicate = baggageKeyPredicate;
33+
this.empty = empty;
2834
}
2935

3036
/**
3137
* Creates a new {@link BaggageSpanProcessor} that copies all baggage entries into the newly
3238
* created {@link io.opentelemetry.api.trace.Span}.
3339
*/
3440
public static BaggageSpanProcessor allowAllBaggageKeys() {
35-
return new BaggageSpanProcessor(baggageKey -> true);
41+
return new BaggageSpanProcessor(baggageKey -> true, false);
3642
}
3743

3844
@Override
@@ -58,4 +64,8 @@ public void onEnd(ReadableSpan span) {}
5864
public boolean isEndRequired() {
5965
return false;
6066
}
67+
68+
boolean isEmpty() {
69+
return empty;
70+
}
6171
}

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

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)