diff --git a/examples/extension/README.md b/examples/extension/README.md index 8edba4008e11..4a3892832740 100644 --- a/examples/extension/README.md +++ b/examples/extension/README.md @@ -39,6 +39,7 @@ For more information, see the `extendedAgent` task in [build.gradle](build.gradl [DemoPropagator]: src/main/java/com/example/javaagent/DemoPropagator.java [DemoSampler]: src/main/java/com/example/javaagent/DemoSampler.java [DemoSpanProcessor]: src/main/java/com/example/javaagent/DemoSpanProcessor.java +[DemoBaggageSpanProcessor]: src/main/java/com/example/javaagent/DemoBaggageSpanProcessor.java [DemoSpanExporter]: src/main/java/com/example/javaagent/DemoSpanExporter.java [DemoServlet3InstrumentationModule]: src/main/java/com/example/javaagent/instrumentation/DemoServlet3InstrumentationModule.java @@ -47,6 +48,7 @@ For more information, see the `extendedAgent` task in [build.gradle](build.gradl - Custom `TextMapPropagator`: [DemoPropagator][DemoPropagator] - Custom `Sampler`: [DemoSampler][DemoSampler] - Custom `SpanProcessor`: [DemoSpanProcessor][DemoSpanProcessor] +- Custom `SpanProcessor`: [DemoBaggageSpanProcessor][DemoBaggageSpanProcessor] - Custom `SpanExporter`: [DemoSpanExporter][DemoSpanExporter] - Additional instrumentation: [DemoServlet3InstrumentationModule][DemoServlet3InstrumentationModule] diff --git a/examples/extension/src/main/java/com/example/javaagent/DemoAutoConfigurationCustomizerProvider.java b/examples/extension/src/main/java/com/example/javaagent/DemoAutoConfigurationCustomizerProvider.java index 18fbb162e064..82dfdce5b0f8 100644 --- a/examples/extension/src/main/java/com/example/javaagent/DemoAutoConfigurationCustomizerProvider.java +++ b/examples/extension/src/main/java/com/example/javaagent/DemoAutoConfigurationCustomizerProvider.java @@ -43,6 +43,7 @@ private SdkTracerProviderBuilder configureSdkTracerProvider( .setIdGenerator(new DemoIdGenerator()) .setSpanLimits(SpanLimits.builder().setMaxNumberOfAttributes(1024).build()) .addSpanProcessor(new DemoSpanProcessor()) + .addSpanProcessor(new DemoBaggageSpanProcessor()) .addSpanProcessor(SimpleSpanProcessor.create(new DemoSpanExporter())); } diff --git a/examples/extension/src/main/java/com/example/javaagent/DemoBaggageSpanProcessor.java b/examples/extension/src/main/java/com/example/javaagent/DemoBaggageSpanProcessor.java new file mode 100644 index 000000000000..52b9243bb532 --- /dev/null +++ b/examples/extension/src/main/java/com/example/javaagent/DemoBaggageSpanProcessor.java @@ -0,0 +1,46 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.example.javaagent; + +import io.opentelemetry.api.baggage.Baggage; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.ReadWriteSpan; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.SpanProcessor; + +/** + * Custom Span Processor to inject Baggage attributes to a Span. This allows to use the Baggage to + * hold some custom values and inject them automatically into the child Spans. + * + *

See + * OpenTelemetry Specification for more information about {@link SpanProcessor}. + * + * @see DemoAutoConfigurationCustomizerProvider + */ +public class DemoBaggageSpanProcessor implements SpanProcessor { + + @Override + public void onStart(Context parentContext, ReadWriteSpan span) { + Baggage.fromContext(parentContext) + .forEach((s, baggageEntry) -> span.setAttribute(s, baggageEntry.getValue())); + } + + @Override + public boolean isStartRequired() { + return true; + } + + @Override + public void onEnd(ReadableSpan span) { + // Do nothing on span end + } + + @Override + public boolean isEndRequired() { + return false; + } +}