88
99import platform
1010import threading
11+ from contextlib import suppress
12+ from importlib .metadata import version
1113
1214SCARF_ENDPOINT_URL = "https://couchbase.gateway.scarf.sh/couchbase-haystack"
1315
14- _telemetry_sent = False
16+ _telemetry_sent = threading . Event ()
1517_telemetry_lock = threading .Lock ()
1618
19+
1720def _get_package_version () -> str :
1821 """Return the installed package version, or 'unknown' if unavailable."""
19- try :
20- from importlib .metadata import version
21-
22+ with suppress (Exception ):
2223 return version ("couchbase-haystack" )
23- except Exception :
24- return "unknown"
24+ return "unknown"
25+
2526
2627def _send_telemetry () -> None :
2728 """Send a single telemetry event to Scarf."""
28- global _telemetry_sent
29-
3029 with _telemetry_lock :
31- if _telemetry_sent :
30+ if _telemetry_sent . is_set () :
3231 return
33- _telemetry_sent = True
32+ _telemetry_sent . set ()
3433
35- try :
36- from scarf import ScarfEventLogger
34+ with suppress ( Exception ) :
35+ from scarf import ScarfEventLogger # noqa: PLC0415
3736
38- logger = ScarfEventLogger (
37+ event_logger = ScarfEventLogger (
3938 endpoint_url = SCARF_ENDPOINT_URL ,
4039 timeout = 2.0 ,
4140 )
4241
43- logger .log_event (
42+ event_logger .log_event (
4443 {
4544 "package" : "couchbase-haystack" ,
4645 "version" : _get_package_version (),
@@ -49,17 +48,13 @@ def _send_telemetry() -> None:
4948 "arch" : platform .machine (),
5049 }
5150 )
52- except Exception :
53- # Telemetry must never raise — silently ignore all errors.
54- pass
51+
5552
5653def send_telemetry () -> None :
5754 """Fire-and-forget telemetry in a background daemon thread.
5855
5956 Safe to call multiple times; only the first invocation actually sends.
6057 """
61- try :
58+ with suppress ( Exception ) :
6259 t = threading .Thread (target = _send_telemetry , daemon = True )
63- t .start ()
64- except Exception :
65- pass
60+ t .start ()
0 commit comments