Skip to content

Commit 2692455

Browse files
fix: enhance error handling and logging in event tracking and span processing (fix CodeQL & copilot comments)
2 parents 6defb0e + 81bec77 commit 2692455

2 files changed

Lines changed: 21 additions & 9 deletions

File tree

src/api/common/logging/event_utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ def track_event_if_configured(event_name: str, event_data: dict):
2020
"""
2121
instrumentation_key = os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
2222
if instrumentation_key:
23-
track_event(event_name, event_data)
23+
try:
24+
track_event(event_name, event_data)
25+
except Exception:
26+
logger.warning("Failed to track event '%s'", event_name, exc_info=True)
2427
else:
2528
logger.warning("Skipping track_event for %s: Application Insights is not configured", event_name)

src/api/common/logging/span_filters.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,26 @@
22
Custom OpenTelemetry SpanProcessor filters to reduce telemetry noise in Application Insights.
33
"""
44

5+
import logging
56
from opentelemetry.sdk.trace import SpanProcessor, ReadableSpan
67
from opentelemetry.trace import SpanContext, TraceFlags
78

9+
logger = logging.getLogger(__name__)
10+
811

912
def _unsample(span: ReadableSpan) -> None:
1013
"""Set trace_flags to 0 so BatchSpanProcessor skips exporting this span."""
11-
span._context = SpanContext(
12-
trace_id=span.context.trace_id,
13-
span_id=span.context.span_id,
14-
is_remote=span.context.is_remote,
15-
trace_flags=TraceFlags(0),
16-
trace_state=span.context.trace_state,
17-
)
14+
try:
15+
span._context = SpanContext(
16+
trace_id=span.context.trace_id,
17+
span_id=span.context.span_id,
18+
is_remote=span.context.is_remote,
19+
trace_flags=TraceFlags(0),
20+
trace_state=span.context.trace_state,
21+
)
22+
except (AttributeError, TypeError) as e:
23+
# Gracefully handle SDK changes where _context might not be mutable
24+
logger.debug("Unable to unsample span %s: %s", span.name, e)
1825

1926

2027
class DropASGIResponseBodySpanProcessor(SpanProcessor):
@@ -62,9 +69,11 @@ def on_start(self, span, parent_context=None):
6269

6370
def on_end(self, span: ReadableSpan) -> None:
6471
attrs = span.attributes or {}
72+
span_name = span.name or ""
6573
if (
6674
attrs.get("db.system") == "cosmosdb"
67-
or "documents.azure.com" in (span.name or "")
75+
or ".documents.azure.com" in span_name
76+
or span_name.endswith("documents.azure.com")
6877
):
6978
_unsample(span)
7079

0 commit comments

Comments
 (0)