Skip to content

Commit 3685020

Browse files
Refactor telemetry client initialization and event tracking in event_utils module
1 parent fe488a9 commit 3685020

3 files changed

Lines changed: 10 additions & 14 deletions

File tree

src/backend/api/event_utils.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
# Third-party
66
from applicationinsights import TelemetryClient
7-
from applicationinsights.channel import SynchronousQueue, SynchronousSender, TelemetryChannel
8-
97
from dotenv import load_dotenv
108

119
load_dotenv()
@@ -28,12 +26,8 @@ def _get_telemetry_client():
2826
instrumentation_key = parts.get('InstrumentationKey')
2927

3028
if instrumentation_key:
31-
# Create a synchronous channel for immediate sending
32-
sender = SynchronousSender()
33-
queue = SynchronousQueue(sender)
34-
channel = TelemetryChannel(None, queue)
35-
36-
_telemetry_client = TelemetryClient(instrumentation_key, channel)
29+
# Use the default (buffered/async) channel configuration
30+
_telemetry_client = TelemetryClient(instrumentation_key)
3731
logging.info("Application Insights TelemetryClient initialized successfully")
3832
else:
3933
logging.error("Could not extract InstrumentationKey from connection string")
@@ -59,7 +53,9 @@ def track_event_if_configured(event_name: str, event_data: dict):
5953

6054
# Track the custom event
6155
client.track_event(event_name, properties=properties)
62-
client.flush() # Ensure immediate sending
56+
57+
# Flush to ensure events are sent immediately
58+
client.flush()
6359

6460
logging.debug(f"Tracked custom event: {event_name} with data: {event_data}")
6561
else:

src/backend/app.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,11 @@ def create_app() -> FastAPI:
161161
set_logger_provider(logger_provider)
162162

163163
# Attach OpenTelemetry handler to Python's root logger
164-
handler = LoggingHandler(logger_provider=logger_provider)
165-
logging.getLogger().addHandler(handler)
164+
# Guard against duplicate handlers in hot-reload or test scenarios
165+
root_logger = logging.getLogger()
166+
if not any(isinstance(h, LoggingHandler) for h in root_logger.handlers):
167+
handler = LoggingHandler(logger_provider=logger_provider)
168+
root_logger.addHandler(handler)
166169

167170
# Instrument ONLY FastAPI for HTTP request/response tracing
168171
# This is safe because it only wraps HTTP handlers, not internal async operations

src/tests/backend/api/event_utils_test.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ def test_track_event_with_instrumentation_key(self):
2020
track_event_if_configured("TestEvent", {"key": "value"})
2121

2222
mock_client.track_event.assert_called_once_with("TestEvent", properties={"key": "value"})
23-
mock_client.flush.assert_called_once()
2423

2524
def test_track_event_without_instrumentation_key(self):
2625
"""Test tracking event when instrumentation key is not set."""
@@ -45,7 +44,6 @@ def test_track_event_with_empty_data(self):
4544
track_event_if_configured("TestEvent", {})
4645

4746
mock_client.track_event.assert_called_once_with("TestEvent", properties={})
48-
mock_client.flush.assert_called_once()
4947

5048
def test_track_event_with_complex_data(self):
5149
"""Test tracking event with complex data."""
@@ -73,7 +71,6 @@ def test_track_event_with_complex_data(self):
7371
}
7472

7573
mock_client.track_event.assert_called_once_with("ComplexEvent", properties=expected_properties)
76-
mock_client.flush.assert_called_once()
7774

7875
def test_track_event_client_returns_none(self):
7976
"""Test tracking event when client initialization fails."""

0 commit comments

Comments
 (0)