Skip to content

Commit 8476649

Browse files
committed
Add start traces with correct durations
1 parent 22c0245 commit 8476649

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed

temporalio/contrib/openai_agents/_trace_interceptor.py

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
from contextlib import contextmanager
6-
from typing import Any, Mapping, Protocol, Type
6+
from typing import Any, Mapping, Protocol, Type, cast
77

88
from agents import CustomSpanData, custom_span, get_current_span, trace
99
from agents.tracing import (
@@ -67,7 +67,10 @@ def context_from_header(
6767
else workflow.info().workflow_type
6868
)
6969
data = (
70-
{"activityId": activity.info().activity_id}
70+
{
71+
"activityId": activity.info().activity_id,
72+
"activity": activity.info().activity_type,
73+
}
7174
if activity.in_activity()
7275
else None
7376
)
@@ -333,29 +336,55 @@ class _ContextPropagationWorkflowOutboundInterceptor(
333336
async def signal_child_workflow(
334337
self, input: temporalio.worker.SignalChildWorkflowInput
335338
) -> 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)
338345

339346
async def signal_external_workflow(
340347
self, input: temporalio.worker.SignalExternalWorkflowInput
341348
) -> 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)
344355

345356
def start_activity(
346357
self, input: temporalio.worker.StartActivityInput
347358
) -> temporalio.workflow.ActivityHandle:
359+
span = custom_span(
360+
name=f"temporal:startActivity", data={"activity": input.activity}
361+
)
362+
span.start(mark_as_current=True)
348363
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
350367

351368
async def start_child_workflow(
352369
self, input: temporalio.worker.StartChildWorkflowInput
353370
) -> temporalio.workflow.ChildWorkflowHandle:
371+
span = custom_span(
372+
name=f"temporal:startChildWorkflow", data={"workflow": input.workflow}
373+
)
374+
span.start(mark_as_current=True)
354375
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
356379

357380
def start_local_activity(
358381
self, input: temporalio.worker.StartLocalActivityInput
359382
) -> temporalio.workflow.ActivityHandle:
383+
span = custom_span(
384+
name=f"temporal:startLocalActivity", data={"activity": input.activity}
385+
)
386+
span.start(mark_as_current=True)
360387
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

Comments
 (0)