Skip to content

Commit cee49d9

Browse files
committed
TelemetryManager
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>
1 parent e1a00be commit cee49d9

File tree

2 files changed

+31
-37
lines changed

2 files changed

+31
-37
lines changed

src/databricks/sql/telemetry/models/event.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ class DriverSystemConfiguration:
9797
runtime_name: str
9898
runtime_version: str
9999
runtime_vendor: str
100-
client_app_name: Optional[str]
101-
locale_name: str
102100
driver_name: str
103101
char_set_encoding: str
102+
client_app_name: Optional[str] = None
103+
locale_name: Optional[str] = None
104104

105105
def to_json(self):
106106
return json.dumps(asdict(self), cls=EnumEncoder)

src/databricks/sql/telemetry/telemetry_client.py

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,6 @@
2929
logger = 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-
5732
class 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

Comments
 (0)