|
3 | 3 | from __future__ import annotations |
4 | 4 |
|
5 | 5 | from contextlib import contextmanager |
6 | | -from typing import Any, Mapping, Protocol, Type |
| 6 | +from typing import Any, Mapping, Protocol, Type, cast |
7 | 7 |
|
8 | 8 | from agents import CustomSpanData, custom_span, get_current_span, trace |
9 | 9 | from agents.tracing import ( |
@@ -67,7 +67,10 @@ def context_from_header( |
67 | 67 | else workflow.info().workflow_type |
68 | 68 | ) |
69 | 69 | data = ( |
70 | | - {"activityId": activity.info().activity_id} |
| 70 | + { |
| 71 | + "activityId": activity.info().activity_id, |
| 72 | + "activity": activity.info().activity_type, |
| 73 | + } |
71 | 74 | if activity.in_activity() |
72 | 75 | else None |
73 | 76 | ) |
@@ -333,29 +336,55 @@ class _ContextPropagationWorkflowOutboundInterceptor( |
333 | 336 | async def signal_child_workflow( |
334 | 337 | self, input: temporalio.worker.SignalChildWorkflowInput |
335 | 338 | ) -> None: |
336 | | - set_header_from_context(input, temporalio.workflow.payload_converter()) |
337 | | - return await self.next.signal_child_workflow(input) |
| 339 | + with custom_span( |
| 340 | + name=f"temporal:signalChildWorkflow", |
| 341 | + data={"workflowId": input.child_workflow_id}, |
| 342 | + ): |
| 343 | + set_header_from_context(input, temporalio.workflow.payload_converter()) |
| 344 | + await self.next.signal_child_workflow(input) |
338 | 345 |
|
339 | 346 | async def signal_external_workflow( |
340 | 347 | self, input: temporalio.worker.SignalExternalWorkflowInput |
341 | 348 | ) -> None: |
342 | | - set_header_from_context(input, temporalio.workflow.payload_converter()) |
343 | | - return await self.next.signal_external_workflow(input) |
| 349 | + with custom_span( |
| 350 | + name=f"temporal:signalExternalWorkflow", |
| 351 | + data={"workflowId": input.workflow_id}, |
| 352 | + ): |
| 353 | + set_header_from_context(input, temporalio.workflow.payload_converter()) |
| 354 | + await self.next.signal_external_workflow(input) |
344 | 355 |
|
345 | 356 | def start_activity( |
346 | 357 | self, input: temporalio.worker.StartActivityInput |
347 | 358 | ) -> temporalio.workflow.ActivityHandle: |
| 359 | + span = custom_span( |
| 360 | + name=f"temporal:startActivity", data={"activity": input.activity} |
| 361 | + ) |
| 362 | + span.start(mark_as_current=True) |
348 | 363 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
349 | | - return self.next.start_activity(input) |
| 364 | + handle = self.next.start_activity(input) |
| 365 | + handle.add_done_callback(lambda _: span.finish()) |
| 366 | + return handle |
350 | 367 |
|
351 | 368 | async def start_child_workflow( |
352 | 369 | self, input: temporalio.worker.StartChildWorkflowInput |
353 | 370 | ) -> temporalio.workflow.ChildWorkflowHandle: |
| 371 | + span = custom_span( |
| 372 | + name=f"temporal:startChildWorkflow", data={"workflow": input.workflow} |
| 373 | + ) |
| 374 | + span.start(mark_as_current=True) |
354 | 375 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
355 | | - return await self.next.start_child_workflow(input) |
| 376 | + handle = await self.next.start_child_workflow(input) |
| 377 | + handle.add_done_callback(lambda _: span.finish()) |
| 378 | + return handle |
356 | 379 |
|
357 | 380 | def start_local_activity( |
358 | 381 | self, input: temporalio.worker.StartLocalActivityInput |
359 | 382 | ) -> temporalio.workflow.ActivityHandle: |
| 383 | + span = custom_span( |
| 384 | + name=f"temporal:startLocalActivity", data={"activity": input.activity} |
| 385 | + ) |
| 386 | + span.start(mark_as_current=True) |
360 | 387 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
361 | | - return self.next.start_local_activity(input) |
| 388 | + handle = self.next.start_local_activity(input) |
| 389 | + handle.add_done_callback(lambda _: span.finish()) |
| 390 | + return handle |
0 commit comments