@@ -150,17 +150,22 @@ class TelemetryClient(BaseTelemetryClient):
150150 TELEMETRY_AUTHENTICATED_PATH = "/telemetry-ext"
151151 TELEMETRY_UNAUTHENTICATED_PATH = "/telemetry-unauth"
152152
153+ DEFAULT_BATCH_SIZE = 100
154+ DEFAULT_FLUSH_INTERVAL_SECONDS = 90
155+
153156 def __init__ (
154157 self ,
155158 telemetry_enabled ,
156159 session_id_hex ,
157160 auth_provider ,
158161 host_url ,
159162 executor ,
163+ batch_size = None ,
160164 ):
161165 logger .debug ("Initializing TelemetryClient for connection: %s" , session_id_hex )
162166 self ._telemetry_enabled = telemetry_enabled
163- self ._batch_size = 10 # TODO: Decide on batch size
167+ self ._batch_size = batch_size if batch_size is not None else self .DEFAULT_BATCH_SIZE
168+ self ._flush_interval_seconds = self .DEFAULT_FLUSH_INTERVAL_SECONDS
164169 self ._session_id_hex = session_id_hex
165170 self ._auth_provider = auth_provider
166171 self ._user_agent = None
@@ -169,9 +174,41 @@ def __init__(
169174 self ._driver_connection_params = None
170175 self ._host_url = host_url
171176 self ._executor = executor
177+ self ._flush_timer = None
178+
179+ # Start the periodic flush timer
180+ self ._start_flush_timer ()
181+
182+ def _start_flush_timer (self ):
183+ """Start the periodic flush timer"""
184+
185+ self ._flush_timer = threading .Timer (
186+ self ._flush_interval_seconds ,
187+ self ._periodic_flush
188+ )
189+ self ._flush_timer .daemon = True # Don't prevent program exit
190+ self ._flush_timer .start ()
191+ logger .debug ("Started flush timer for connection %s (interval: %d seconds)" ,
192+ self ._session_id_hex , self ._flush_interval_seconds )
193+
194+ def _periodic_flush (self ):
195+ """Periodic flush callback - flushes events and reschedules the timer"""
196+
197+ logger .debug ("Performing periodic flush for connection %s" , self ._session_id_hex )
198+ self ._flush ()
199+ # Reschedule the next flush
200+ self ._start_flush_timer ()
201+
202+ def _stop_flush_timer (self ):
203+ """Stop the periodic flush timer"""
204+ if self ._flush_timer is not None :
205+ self ._flush_timer .cancel ()
206+ self ._flush_timer = None
207+ logger .debug ("Stopped flush timer for connection %s" , self ._session_id_hex )
172208
173209 def _export_event (self , event ):
174210 """Add an event to the batch queue and flush if batch is full"""
211+
175212 logger .debug ("Exporting event for connection %s" , self ._session_id_hex )
176213 with self ._lock :
177214 self ._events_batch .append (event )
@@ -183,6 +220,7 @@ def _export_event(self, event):
183220
184221 def _flush (self ):
185222 """Flush the current batch of events to the server"""
223+
186224 with self ._lock :
187225 events_to_flush = self ._events_batch .copy ()
188226 self ._events_batch = []
@@ -300,8 +338,9 @@ def export_failure_log(self, error_name, error_message):
300338 logger .debug ("Failed to export failure log: %s" , e )
301339
302340 def close (self ):
303- """Flush remaining events before closing"""
341+ """Flush remaining events and stop timer before closing"""
304342 logger .debug ("Closing TelemetryClient for connection %s" , self ._session_id_hex )
343+ self ._stop_flush_timer ()
305344 self ._flush ()
306345
307346
@@ -364,6 +403,7 @@ def initialize_telemetry_client(
364403 session_id_hex ,
365404 auth_provider ,
366405 host_url ,
406+ batch_size = None ,
367407 ):
368408 """Initialize a telemetry client for a specific connection if telemetry is enabled"""
369409 try :
@@ -385,6 +425,7 @@ def initialize_telemetry_client(
385425 auth_provider = auth_provider ,
386426 host_url = host_url ,
387427 executor = TelemetryClientFactory ._executor ,
428+ batch_size = batch_size ,
388429 )
389430 else :
390431 TelemetryClientFactory ._clients [
0 commit comments