1+ from typing import Any
2+ from typing import List
3+ from typing import Optional
4+ from typing import Tuple
15from typing import Union
26from uuid import UUID
37
48import azure .servicebus as azure_servicebus
9+ from azure .servicebus import ServiceBusMessage
10+ from azure .servicebus import ServiceBusMessageBatch
511import azure .servicebus .amqp as azure_servicebus_amqp
12+ from azure .servicebus .amqp import AmqpAnnotatedMessage
613
714from ddtrace import config
15+ from ddtrace ._trace .pin import Pin
16+ from ddtrace ._trace .span import Span
817from ddtrace .contrib .trace_utils import ext_service
918from ddtrace .ext import SpanTypes
1019from ddtrace .ext import azure_servicebus as azure_servicebusx
1322from ddtrace .propagation .http import HTTPPropagator
1423
1524
16- def create_context (context_name , pin , operation_name , resource = None ):
25+ def create_context (
26+ context_name : str ,
27+ pin : Pin ,
28+ operation_name : str ,
29+ resource : Optional [str ] = None ,
30+ ) -> core .ExecutionContext :
1731 return core .context_with_data (
1832 context_name ,
1933 span_name = operation_name ,
@@ -24,15 +38,21 @@ def create_context(context_name, pin, operation_name, resource=None):
2438 )
2539
2640
27- def handle_service_bus_message_context (span , message_arg_value ):
28- if isinstance (message_arg_value , (azure_servicebus .ServiceBusMessage , azure_servicebus_amqp .AmqpAnnotatedMessage )):
41+ def handle_service_bus_message_context (
42+ span : Span ,
43+ message_arg_value : Union [
44+ ServiceBusMessage ,
45+ AmqpAnnotatedMessage ,
46+ List [Union [ServiceBusMessage , AmqpAnnotatedMessage ]],
47+ ServiceBusMessageBatch ,
48+ ],
49+ ):
50+ if isinstance (message_arg_value , (ServiceBusMessage , AmqpAnnotatedMessage )):
2951 inject_context (span , message_arg_value )
3052 elif (
3153 isinstance (message_arg_value , list )
3254 and message_arg_value
33- and isinstance (
34- message_arg_value [0 ], (azure_servicebus .ServiceBusMessage , azure_servicebus_amqp .AmqpAnnotatedMessage )
35- )
55+ and isinstance (message_arg_value [0 ], (ServiceBusMessage , AmqpAnnotatedMessage ))
3656 ):
3757 for message in message_arg_value :
3858 inject_context (span , message )
@@ -43,7 +63,7 @@ def handle_service_bus_message_context(span, message_arg_value):
4363 span .link_span (parent_context )
4464
4565
46- def inject_context (span , message ):
66+ def inject_context (span : Span , message : Union [ ServiceBusMessage , AmqpAnnotatedMessage ] ):
4767 """
4868 ServiceBusMessage.application_properties is of type Dict[str | bytes, PrimitiveTypes] | None
4969 AmqpAnnotatedMessage.application_properties is of type Dict[str | bytes, Any] | None
@@ -62,7 +82,14 @@ def inject_context(span, message):
6282 message .application_properties .update (inject_carrier )
6383
6484
65- def handle_service_bus_message_attributes (message_arg_value ):
85+ def handle_service_bus_message_attributes (
86+ message_arg_value : Union [
87+ ServiceBusMessage ,
88+ AmqpAnnotatedMessage ,
89+ List [Union [ServiceBusMessage , AmqpAnnotatedMessage ]],
90+ ServiceBusMessageBatch ,
91+ ],
92+ ) -> Tuple [Union [str , None ], Union [str , None ]]:
6693 if isinstance (message_arg_value , azure_servicebus .ServiceBusMessage ):
6794 batch_count = None
6895 message_id = message_arg_value .message_id
@@ -81,16 +108,22 @@ def handle_service_bus_message_attributes(message_arg_value):
81108 elif isinstance (message_arg_value , list ):
82109 batch_count = str (len (message_arg_value ))
83110 message_id = None
84- else :
85- message_id = None
86- batch_count = None
87111 return message_id , batch_count
88112
89113
90114def dispatch_message_modifier (
91- ctx , args , kwargs , message_operation , resource_name , fully_qualified_namespace , message_arg
115+ ctx : core .ExecutionContext ,
116+ args : Any ,
117+ kwargs : Any ,
118+ message_operation : str ,
119+ resource_name : str ,
120+ fully_qualified_namespace : str ,
121+ message_arg : str ,
92122):
93123 message_arg_value = get_argument_value (args , kwargs , 0 , message_arg , True )
124+ if message_arg_value is None :
125+ return
126+
94127 message_id , batch_count = handle_service_bus_message_attributes (message_arg_value )
95128
96129 if config .azure_servicebus .distributed_tracing :
0 commit comments