2929logger = logging .getLogger (__name__ )
3030
3131
32- class TelemetryHelper :
33- # Singleton instance of DriverSystemConfiguration
34- _DRIVER_SYSTEM_CONFIGURATION = None
35-
36- @classmethod
37- def getDriverSystemConfiguration (cls ) -> DriverSystemConfiguration :
38- if cls ._DRIVER_SYSTEM_CONFIGURATION is None :
39- from databricks .sql import __version__
40-
41- cls ._DRIVER_SYSTEM_CONFIGURATION = DriverSystemConfiguration (
42- driver_name = "Databricks SQL Python Connector" ,
43- driver_version = __version__ ,
44- runtime_name = f"Python { sys .version .split ()[0 ]} " ,
45- runtime_vendor = platform .python_implementation (),
46- runtime_version = platform .python_version (),
47- os_name = platform .system (),
48- os_version = platform .release (),
49- os_arch = platform .machine (),
50- client_app_name = None , # TODO: Add client app name
51- locale_name = locale .getlocale ()[0 ] or locale .getdefaultlocale ()[0 ],
52- char_set_encoding = sys .getdefaultencoding (),
53- )
54- return cls ._DRIVER_SYSTEM_CONFIGURATION
55-
56-
5732class BaseTelemetryClient (ABC ):
5833 """Abstract base class for telemetry clients."""
5934
@@ -109,7 +84,7 @@ def flush(self):
10984 with self .lock :
11085 events_to_flush = self .events_batch .copy ()
11186 self .events_batch = []
112- print ( f"Flushing { len ( events_to_flush ) } events" , flush = True )
87+
11388 if events_to_flush :
11489 self .executor .submit (self ._send_telemetry , events_to_flush )
11590
@@ -178,9 +153,7 @@ def export_initial_telemetry_log(self, http_path, port, socket_timeout):
178153 entry = FrontendLogEntry (
179154 sql_driver_log = TelemetryEvent (
180155 session_id = self .connection_uuid ,
181- # session_id = "test-session-auth-1234",
182- # session_id = "test-session-unauth-1234",
183- system_configuration = TelemetryHelper .getDriverSystemConfiguration (),
156+ system_configuration = TelemetryManager .getDriverSystemConfiguration (),
184157 driver_connection_params = self .DriverConnectionParameters ,
185158 )
186159 ),
@@ -201,7 +174,7 @@ def export_failure_log(self, errorName, errorMessage):
201174 entry = FrontendLogEntry (
202175 sql_driver_log = TelemetryEvent (
203176 session_id = self .connection_uuid ,
204- system_configuration = TelemetryHelper .getDriverSystemConfiguration (),
177+ system_configuration = TelemetryManager .getDriverSystemConfiguration (),
205178 driver_connection_params = self .DriverConnectionParameters ,
206179 error_info = error_info ,
207180 )
@@ -223,7 +196,7 @@ def export_sql_latency_log(
223196 entry = FrontendLogEntry (
224197 sql_driver_log = TelemetryEvent (
225198 session_id = self .connection_uuid ,
226- system_configuration = TelemetryHelper .getDriverSystemConfiguration (),
199+ system_configuration = TelemetryManager .getDriverSystemConfiguration (),
227200 driver_connection_params = self .DriverConnectionParameters ,
228201 sql_statement_id = sql_statement_id ,
229202 sql_operation = sql_execution_event ,
@@ -245,7 +218,7 @@ def export_volume_latency_log(self, latency_ms, volume_operation):
245218 entry = FrontendLogEntry (
246219 sql_driver_log = TelemetryEvent (
247220 session_id = self .connection_uuid ,
248- system_configuration = TelemetryHelper .getDriverSystemConfiguration (),
221+ system_configuration = TelemetryManager .getDriverSystemConfiguration (),
249222 driver_connection_params = self .DriverConnectionParameters ,
250223 volume_operation = volume_operation ,
251224 operation_latency_ms = latency_ms ,
@@ -271,12 +244,13 @@ def export_initial_telemetry_log(self, http_path, port, socket_timeout):
271244 pass
272245
273246
274- class SingletonTelemetryClient :
247+ class TelemetryManager :
275248 _instance = None
249+ _DRIVER_SYSTEM_CONFIGURATION = None
276250
277251 def __new__ (cls ):
278252 if cls ._instance is None :
279- cls ._instance = super (SingletonTelemetryClient , cls ).__new__ (cls )
253+ cls ._instance = super (TelemetryManager , cls ).__new__ (cls )
280254 cls ._instance ._initialized = False
281255 return cls ._instance
282256
@@ -348,6 +322,26 @@ def export_volume_latency_log(
348322 latency_ms , volume_operation
349323 )
350324
325+ @classmethod
326+ def getDriverSystemConfiguration (cls ) -> DriverSystemConfiguration :
327+ if cls ._DRIVER_SYSTEM_CONFIGURATION is None :
328+ from databricks .sql import __version__
329+
330+ cls ._DRIVER_SYSTEM_CONFIGURATION = DriverSystemConfiguration (
331+ driver_name = "Databricks SQL Python Connector" ,
332+ driver_version = __version__ ,
333+ runtime_name = f"Python { sys .version .split ()[0 ]} " ,
334+ runtime_vendor = platform .python_implementation (),
335+ runtime_version = platform .python_version (),
336+ os_name = platform .system (),
337+ os_version = platform .release (),
338+ os_arch = platform .machine (),
339+ client_app_name = None , # TODO: Add client app name
340+ locale_name = locale .getlocale ()[0 ] or locale .getdefaultlocale ()[0 ],
341+ char_set_encoding = sys .getdefaultencoding (),
342+ )
343+ return cls ._DRIVER_SYSTEM_CONFIGURATION
344+
351345 def close (self , connection_uuid ):
352346 """Close telemetry client(s)"""
353347 if connection_uuid :
@@ -357,4 +351,4 @@ def close(self, connection_uuid):
357351
358352
359353# Create a global instance
360- telemetry_client = SingletonTelemetryClient ()
354+ telemetry_client = TelemetryManager ()
0 commit comments