From 3375b02eb86f0e39474f077d7a2a826870720db9 Mon Sep 17 00:00:00 2001 From: Alex Boten <223565+codeboten@users.noreply.github.com> Date: Wed, 24 Apr 2024 10:23:12 -0700 Subject: [PATCH] main: use published BaggageSpanProcessor and remove internal one Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> --- pyproject.toml | 1 + src/honeycomb/opentelemetry/baggage.py | 42 --------------- src/honeycomb/opentelemetry/trace.py | 2 +- tests/test_baggage.py | 72 -------------------------- tests/test_trace.py | 3 +- 5 files changed, 3 insertions(+), 117 deletions(-) delete mode 100644 src/honeycomb/opentelemetry/baggage.py delete mode 100644 tests/test_baggage.py diff --git a/pyproject.toml b/pyproject.toml index c0106b4..9e71c3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ opentelemetry-api = "^1.22.0" opentelemetry-sdk = "^1.22.0" opentelemetry-exporter-otlp = "^1.22.0" opentelemetry-instrumentation = "~0.43b0" +opentelemetry-processor-baggage = "~0.47b0" [tool.poetry.group.dev.dependencies] coverage = ">=6.5,<8.0" diff --git a/src/honeycomb/opentelemetry/baggage.py b/src/honeycomb/opentelemetry/baggage.py deleted file mode 100644 index 809bd5e..0000000 --- a/src/honeycomb/opentelemetry/baggage.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import Optional -from opentelemetry.baggage import get_all as get_all_baggage -from opentelemetry.sdk.trace.export import SpanProcessor -from opentelemetry.trace import Span -from opentelemetry.context import Context - - -class BaggageSpanProcessor(SpanProcessor): - """ - The BaggageSpanProcessor reads entries stored in Baggage - from the parent context and adds the baggage entries' keys and - values to the span as attributes on span start. - - Add this span processor to a tracer provider. - - Keys and values added to Baggage will appear on subsequent child - spans for a trace within this service *and* be propagated to external - services in accordance with any configured propagation formats - configured. If the external services also have a Baggage span - processor, the keys and values will appear in those child spans as - well. - - ⚠ Warning ⚠️ - - Do not put sensitive information in Baggage. - - To repeat: a consequence of adding data to Baggage is that the keys and - values will appear in all outgoing HTTP headers from the application. - - """ - - def __init__(self) -> None: - pass - - def on_start( - self, - span: "Span", - parent_context: Optional[Context] = None - ) -> None: - baggage = get_all_baggage(parent_context) - for key, value in baggage.items(): - span.set_attribute(key, value) diff --git a/src/honeycomb/opentelemetry/trace.py b/src/honeycomb/opentelemetry/trace.py index d7ec6ed..c079b3f 100644 --- a/src/honeycomb/opentelemetry/trace.py +++ b/src/honeycomb/opentelemetry/trace.py @@ -11,10 +11,10 @@ from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( OTLPSpanExporter as HTTPSpanExporter ) +from opentelemetry.processor.baggage import BaggageSpanProcessor from honeycomb.opentelemetry.local_exporter import configure_local_exporter from honeycomb.opentelemetry.options import HoneycombOptions from honeycomb.opentelemetry.sampler import configure_sampler -from honeycomb.opentelemetry.baggage import BaggageSpanProcessor def create_tracer_provider( diff --git a/tests/test_baggage.py b/tests/test_baggage.py deleted file mode 100644 index a8344ef..0000000 --- a/tests/test_baggage.py +++ /dev/null @@ -1,72 +0,0 @@ -from opentelemetry.sdk.trace.export import SpanProcessor -from opentelemetry.trace import ( - Span, - Tracer -) -from opentelemetry.baggage import ( - get_all as get_all_baggage, - set_baggage -) -from opentelemetry.context import attach, detach -from honeycomb.opentelemetry.baggage import BaggageSpanProcessor -from honeycomb.opentelemetry.options import HoneycombOptions -from honeycomb.opentelemetry.resource import create_resource -from honeycomb.opentelemetry.trace import create_tracer_provider - - -def test_check_the_baggage(): - baggageProcessor = BaggageSpanProcessor() - assert isinstance(baggageProcessor, SpanProcessor) - - -def test_set_baggage_attaches_to_child_spans_and_detaches_properly_with_context(): - options = HoneycombOptions() - resource = create_resource(options) - tracer_provider = create_tracer_provider(options, resource) - - # tracer has no baggage to start - tracer = tracer_provider.get_tracer("my-tracer") - assert isinstance(tracer, Tracer) - assert get_all_baggage() == {} - # set baggage in context - ctx = set_baggage("queen", "bee") - with tracer.start_as_current_span(name="bumble", context=ctx) as bumble_span: - # span should have baggage key-value pair in context - assert get_all_baggage(ctx) == {"queen": "bee"} - # span should have baggage key-value pair in attribute - assert bumble_span._attributes["queen"] == "bee" - with tracer.start_as_current_span(name="child_span", context=ctx) as child_span: - assert isinstance(child_span, Span) - # child span should have baggage key-value pair in context - assert get_all_baggage(ctx) == {"queen": "bee"} - # child span should have baggage key-value pair in attribute - assert child_span._attributes["queen"] == "bee" - - -def test_set_baggage_attaches_to_child_spans_and_detaches_properly_with_token(): - options = HoneycombOptions() - resource = create_resource(options) - tracer_provider = create_tracer_provider(options, resource) - - # tracer has no baggage to start - tracer = tracer_provider.get_tracer("my-tracer") - assert isinstance(tracer, Tracer) - assert get_all_baggage() == {} - # create a context token and set baggage - honey_token = attach(set_baggage("bumble", "bee")) - assert get_all_baggage() == {"bumble": "bee"} - # in a new span, ensure the baggage is there - with tracer.start_as_current_span("parent") as span: - assert get_all_baggage() == {"bumble": "bee"} - assert span._attributes["bumble"] == "bee" - # create a second context token and set more baggage - moar_token = attach(set_baggage("moar", "bee")) - assert get_all_baggage() == {"bumble": "bee", "moar": "bee"} - # in a child span, ensure all baggage is there as attributes - with tracer.start_as_current_span("child") as child_span: - assert get_all_baggage() == {"bumble": "bee", "moar": "bee"} - assert child_span._attributes["bumble"] == "bee" - assert child_span._attributes["moar"] == "bee" - detach(moar_token) - detach(honey_token) - assert get_all_baggage() == {} diff --git a/tests/test_trace.py b/tests/test_trace.py index 44bdb69..74ba0e6 100644 --- a/tests/test_trace.py +++ b/tests/test_trace.py @@ -10,7 +10,7 @@ from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( OTLPSpanExporter as HTTPSpanExporter ) -from honeycomb.opentelemetry.baggage import BaggageSpanProcessor +from opentelemetry.processor.baggage import BaggageSpanProcessor from honeycomb.opentelemetry.local_exporter import LocalTraceLinkSpanExporter from honeycomb.opentelemetry.options import HoneycombOptions from honeycomb.opentelemetry.resource import create_resource @@ -19,7 +19,6 @@ """ Our Tracer Provider expects a series of span processors. -BaggageSpanProcessor (no export) BatchSpanProcessor (Honeycomb Exporter) SimpleSpanProcessor (Console Exporter) SimpleSpanProcessor (Local Vis Exporter)