@@ -79,6 +79,23 @@ class StatusCode: # type: ignore[no-redef]
7979ATTR_EVENT_TARGET_INSTANCE_ID = "durabletask.event.target_instance_id"
8080ATTR_FIRE_AT = "durabletask.fire_at"
8181
82+ # Task type values (used in span names and as attribute values)
83+ TASK_TYPE_ORCHESTRATION = "orchestration"
84+ TASK_TYPE_TIMER = "timer"
85+ TASK_TYPE_EVENT = "event"
86+
87+ # Span name type prefixes (composite types)
88+ SPAN_TYPE_CREATE_ORCHESTRATION = "create_orchestration"
89+ SPAN_TYPE_ORCHESTRATION_EVENT = "orchestration_event"
90+
91+ # Task status values
92+ TASK_STATUS_COMPLETED = "Completed"
93+ TASK_STATUS_FAILED = "Failed"
94+
95+ # W3C Trace Context carrier keys
96+ CARRIER_KEY_TRACEPARENT = "traceparent"
97+ CARRIER_KEY_TRACESTATE = "tracestate"
98+
8299
83100# ---------------------------------------------------------------------------
84101# Span name helpers (mirrors TraceActivityConstants / TraceHelper naming)
@@ -101,7 +118,7 @@ def create_span_name(
101118
102119def create_timer_span_name (orchestration_name : str ) -> str :
103120 """Build a timer span name: ``orchestration:<name>:timer``."""
104- return f"orchestration :{ orchestration_name } :timer "
121+ return f"{ TASK_TYPE_ORCHESTRATION } :{ orchestration_name } :{ TASK_TYPE_TIMER } "
105122
106123
107124# ---------------------------------------------------------------------------
@@ -115,11 +132,11 @@ def _trace_context_from_carrier(carrier: dict[str, str]) -> Optional[pb.TraceCon
115132 Returns ``None`` when the carrier does not contain a valid
116133 ``traceparent`` header.
117134 """
118- traceparent = carrier .get ("traceparent" )
135+ traceparent = carrier .get (CARRIER_KEY_TRACEPARENT )
119136 if not traceparent :
120137 return None
121138
122- tracestate = carrier .get ("tracestate" )
139+ tracestate = carrier .get (CARRIER_KEY_TRACESTATE )
123140 # Format: 00-<trace-id>-<span-id>-<flags>
124141 parts = traceparent .split ("-" )
125142 span_id = parts [2 ] if len (parts ) >= 4 else ""
@@ -179,9 +196,9 @@ def extract_trace_context(proto_ctx: Optional[pb.TraceContext]) -> Optional[Any]
179196 if not traceparent :
180197 return None
181198
182- carrier : dict [str , str ] = {"traceparent" : traceparent }
199+ carrier : dict [str , str ] = {CARRIER_KEY_TRACEPARENT : traceparent }
183200 if proto_ctx .HasField ("traceState" ) and proto_ctx .traceState .value :
184- carrier ["tracestate" ] = proto_ctx .traceState .value
201+ carrier [CARRIER_KEY_TRACESTATE ] = proto_ctx .traceState .value
185202
186203 propagator = TraceContextTextMapPropagator ()
187204 ctx = propagator .extract (carrier )
@@ -278,10 +295,10 @@ def emit_orchestration_span(
278295 if not _OTEL_AVAILABLE :
279296 return
280297
281- span_name = create_span_name ("orchestration" , name , version )
298+ span_name = create_span_name (TASK_TYPE_ORCHESTRATION , name , version )
282299
283300 attrs : dict [str , str ] = {
284- ATTR_TASK_TYPE : "orchestration" ,
301+ ATTR_TASK_TYPE : TASK_TYPE_ORCHESTRATION ,
285302 ATTR_TASK_NAME : name ,
286303 ATTR_TASK_INSTANCE_ID : instance_id ,
287304 }
@@ -323,9 +340,9 @@ def emit_orchestration_span(
323340 else str (failure_details )
324341 )
325342 span .set_status (StatusCode .ERROR , msg )
326- span .set_attribute (ATTR_TASK_STATUS , "Failed" )
343+ span .set_attribute (ATTR_TASK_STATUS , TASK_STATUS_FAILED )
327344 else :
328- span .set_attribute (ATTR_TASK_STATUS , "Completed" )
345+ span .set_attribute (ATTR_TASK_STATUS , TASK_STATUS_COMPLETED )
329346
330347 span .end ()
331348 finally :
@@ -406,10 +423,10 @@ def _emit_orchestration_span_deferred(
406423 else str (failure_details )
407424 )
408425 status = Status (StatusCode .ERROR , msg )
409- attrs [ATTR_TASK_STATUS ] = "Failed"
426+ attrs [ATTR_TASK_STATUS ] = TASK_STATUS_FAILED
410427 else :
411428 status = Status (StatusCode .UNSET )
412- attrs [ATTR_TASK_STATUS ] = "Completed"
429+ attrs [ATTR_TASK_STATUS ] = TASK_STATUS_COMPLETED
413430
414431 readable_span = SdkReadableSpan (
415432 name = span_name ,
@@ -665,7 +682,7 @@ def emit_timer_span(
665682
666683 span_name = create_timer_span_name (orchestration_name )
667684 attrs : dict [str , str ] = {
668- ATTR_TASK_TYPE : "timer" ,
685+ ATTR_TASK_TYPE : TASK_TYPE_TIMER ,
669686 ATTR_TASK_NAME : orchestration_name ,
670687 ATTR_TASK_INSTANCE_ID : instance_id ,
671688 ATTR_TASK_TASK_ID : str (timer_id ),
@@ -706,9 +723,9 @@ def emit_event_raised_span(
706723 if not _OTEL_AVAILABLE :
707724 return
708725
709- span_name = create_span_name ("orchestration_event" , event_name )
726+ span_name = create_span_name (SPAN_TYPE_ORCHESTRATION_EVENT , event_name )
710727 attrs : dict [str , str ] = {
711- ATTR_TASK_TYPE : "event" ,
728+ ATTR_TASK_TYPE : TASK_TYPE_EVENT ,
712729 ATTR_TASK_NAME : event_name ,
713730 ATTR_TASK_INSTANCE_ID : instance_id ,
714731 }
@@ -753,9 +770,9 @@ def start_create_orchestration_span(
753770 yield None
754771 return
755772
756- span_name = create_span_name ("create_orchestration" , name , version )
773+ span_name = create_span_name (SPAN_TYPE_CREATE_ORCHESTRATION , name , version )
757774 attrs : dict [str , str ] = {
758- ATTR_TASK_TYPE : "orchestration" ,
775+ ATTR_TASK_TYPE : TASK_TYPE_ORCHESTRATION ,
759776 ATTR_TASK_NAME : name ,
760777 ATTR_TASK_INSTANCE_ID : instance_id ,
761778 }
@@ -781,9 +798,9 @@ def start_raise_event_span(
781798 yield None
782799 return
783800
784- span_name = create_span_name ("orchestration_event" , event_name )
801+ span_name = create_span_name (SPAN_TYPE_ORCHESTRATION_EVENT , event_name )
785802 attrs : dict [str , str ] = {
786- ATTR_TASK_TYPE : "event" ,
803+ ATTR_TASK_TYPE : TASK_TYPE_EVENT ,
787804 ATTR_TASK_NAME : event_name ,
788805 ATTR_EVENT_TARGET_INSTANCE_ID : target_instance_id ,
789806 }
0 commit comments