From beb6501f143f135369aeeb7f575583840cb4fe1e Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 8 Jul 2026 11:15:58 +0200 Subject: [PATCH] feat(dramatiq): Add messaging.destination.name attribute to consumer spans --- sentry_sdk/integrations/dramatiq.py | 6 +++++- tests/integrations/dramatiq/test_dramatiq.py | 10 +++++++++- uv.lock | 3 --- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/sentry_sdk/integrations/dramatiq.py b/sentry_sdk/integrations/dramatiq.py index 310766ee3a..195e6c1c51 100644 --- a/sentry_sdk/integrations/dramatiq.py +++ b/sentry_sdk/integrations/dramatiq.py @@ -3,7 +3,7 @@ import sentry_sdk from sentry_sdk.api import continue_trace, get_baggage, get_traceparent -from sentry_sdk.consts import OP, SPANSTATUS +from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS from sentry_sdk.integrations import DidNotEnable, Integration from sentry_sdk.integrations._wsgi_common import request_body_within_bounds from sentry_sdk.traces import SegmentSource @@ -140,6 +140,7 @@ def before_process_message(self, broker: "Broker", message: "Message[R]") -> Non "sentry.op": OP.QUEUE_TASK_DRAMATIQ, "sentry.origin": DramatiqIntegration.origin, "sentry.span.source": SegmentSource.TASK.value, + SPANDATA.MESSAGING_DESTINATION_NAME: message.queue_name, }, parent_span=None, ) @@ -160,6 +161,9 @@ def before_process_message(self, broker: "Broker", message: "Message[R]") -> Non source=TransactionSource.TASK, ) transaction.__enter__() + transaction.set_data( + SPANDATA.MESSAGING_DESTINATION_NAME, message.queue_name + ) message._sentry_span_ctx = transaction def after_process_message( diff --git a/tests/integrations/dramatiq/test_dramatiq.py b/tests/integrations/dramatiq/test_dramatiq.py index f75b97a592..dae5b6a0a1 100644 --- a/tests/integrations/dramatiq/test_dramatiq.py +++ b/tests/integrations/dramatiq/test_dramatiq.py @@ -7,7 +7,7 @@ import sentry_sdk from sentry_sdk import start_transaction -from sentry_sdk.consts import SPANSTATUS +from sentry_sdk.consts import SPANDATA, SPANSTATUS from sentry_sdk.integrations.dramatiq import DramatiqIntegration from sentry_sdk.integrations.logging import ignore_logger from sentry_sdk.tracing import Transaction, TransactionSource @@ -172,6 +172,10 @@ def dummy_actor(x, y): assert segment["is_segment"] is True assert segment["attributes"]["sentry.op"] == "queue.task.dramatiq" assert segment["attributes"]["sentry.span.source"] == "task" + assert ( + segment["attributes"][SPANDATA.MESSAGING_DESTINATION_NAME] + == dummy_actor.queue_name + ) assert segment["status"] == ("error" if task_fails else "ok") else: if task_fails: @@ -184,6 +188,10 @@ def dummy_actor(x, y): assert event["type"] == "transaction" assert event["transaction"] == "dummy_actor" assert event["transaction_info"] == {"source": TransactionSource.TASK} + assert ( + event["contexts"]["trace"]["data"][SPANDATA.MESSAGING_DESTINATION_NAME] + == dummy_actor.queue_name + ) assert event["contexts"]["trace"]["status"] == expected_span_status diff --git a/uv.lock b/uv.lock index 855c128ef8..fb1818bba8 100644 --- a/uv.lock +++ b/uv.lock @@ -6,9 +6,6 @@ resolution-markers = [ "python_full_version < '3.15'", ] -[options] -prerelease-mode = "allow" - [manifest] [manifest.dependency-groups]