Skip to content
This repository was archived by the owner on Mar 4, 2026. It is now read-only.

Commit da74672

Browse files
committed
add logging
1 parent 5e12071 commit da74672

1 file changed

Lines changed: 65 additions & 4 deletions

File tree

src/uipath/core/tracing/manager.py

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Any, Callable, List, Optional
55

66
from opentelemetry import context, trace
7+
from opentelemetry.sdk.trace import ReadableSpan, TracerProvider
78
from opentelemetry.trace import set_span_in_context
89

910
logger = logging.getLogger(__name__)
@@ -37,14 +38,20 @@ def get_parent_context() -> context.Context:
3738
- Current context as fallback
3839
"""
3940
current_span = trace.get_current_span()
40-
has_current_span = current_span is not None and current_span.get_span_context().is_valid
41+
has_current_span = (
42+
current_span is not None and current_span.get_span_context().is_valid
43+
)
4144

4245
external_span = UiPathTracingManager.get_external_current_span()
4346
has_external_span = external_span is not None
4447

4548
# Only one or no spans available
4649
if not has_current_span:
47-
return set_span_in_context(external_span) if has_external_span else context.get_current()
50+
return (
51+
set_span_in_context(external_span)
52+
if has_external_span
53+
else context.get_current()
54+
)
4855
if not has_external_span:
4956
return set_span_in_context(current_span)
5057

@@ -55,7 +62,9 @@ def get_parent_context() -> context.Context:
5562
return set_span_in_context(bottom_span)
5663

5764
@staticmethod
58-
def _get_bottom_most_span(current_span: Any, external_span: Any) -> Any:
65+
def _get_bottom_most_span(
66+
current_span: ReadableSpan, external_span: ReadableSpan
67+
) -> ReadableSpan:
5968
"""Determine which span is deeper in the ancestor tree.
6069
6170
Args:
@@ -66,33 +75,85 @@ def _get_bottom_most_span(current_span: Any, external_span: Any) -> Any:
6675
The span that is deeper (closer to the bottom) in the call hierarchy
6776
"""
6877
ancestor_spans = UiPathTracingManager.get_ancestor_spans()
78+
79+
logger.info("=" * 80)
80+
logger.info("Determining bottom-most span...")
81+
6982
if not ancestor_spans:
83+
logger.info("No ancestor spans available -> returning external_span")
84+
logger.info("=" * 80)
7085
return external_span
7186

7287
current_span_id = current_span.get_span_context().span_id
7388
external_span_id = external_span.get_span_context().span_id
7489

90+
current_parent_id = (
91+
f"{current_span.parent.span_id:016x}" if current_span.parent else "None"
92+
)
93+
external_parent_id = (
94+
f"{external_span.parent.span_id:016x}" if external_span.parent else "None"
95+
)
96+
97+
logger.info(
98+
f"current_span: '{current_span.name}' (id: {current_span_id:016x}, parent: {current_parent_id})"
99+
)
100+
logger.info(
101+
f"external_span: '{external_span.name}' (id: {external_span_id:016x}, parent: {external_parent_id})"
102+
)
103+
logger.info(f"Total ancestors: {len(ancestor_spans)}")
104+
75105
current_index = None
76106
external_index = None
77107

108+
# Log all ancestors in a single line
109+
ancestor_info = " -> ".join(
110+
[f"{ancestor.name}[{i}]" for i, ancestor in enumerate(ancestor_spans)]
111+
)
112+
logger.info(f"Ancestor chain (top to bottom): {ancestor_info}")
113+
78114
for i, ancestor in enumerate(ancestor_spans):
79115
ancestor_id = ancestor.get_span_context().span_id
80116
if ancestor_id == current_span_id:
81117
current_index = i
118+
logger.info(f" Found current_span at index {i}: '{ancestor.name}'")
82119
if ancestor_id == external_span_id:
83120
external_index = i
121+
logger.info(f" Found external_span at index {i}: '{ancestor.name}'")
84122

85123
# Both in tree: higher index = deeper
86124
if current_index is not None and external_index is not None:
87-
return current_span if current_index > external_index else external_span
125+
if current_index > external_index:
126+
logger.info(
127+
f"RESULT: current_span '{current_span.name}' is deeper (index {current_index} > {external_index})"
128+
)
129+
logger.info("=" * 80)
130+
return current_span
131+
else:
132+
logger.info(
133+
f"RESULT: external_span '{external_span.name}' is deeper (index {external_index} >= {current_index})"
134+
)
135+
logger.info("=" * 80)
136+
return external_span
88137

89138
# Only one in tree: that one is deeper
90139
if current_index is not None:
140+
logger.info(
141+
f"RESULT: Only current_span '{current_span.name}' in tree -> returning it"
142+
)
143+
logger.info("=" * 80)
91144
return current_span
92145
if external_index is not None:
146+
logger.info(
147+
f"RESULT: Only external_span '{external_span.name}' in tree -> returning it"
148+
)
149+
logger.info("=" * 80)
93150
return external_span
94151

95152
# Neither in tree: default to external
153+
logger.info(
154+
f"RESULT: Neither span in tree -> defaulting to external_span '{external_span.name}'"
155+
)
156+
logger.info("=" * 80)
96157
return external_span
97158

98159
@staticmethod

0 commit comments

Comments
 (0)