3535from splitio .api .telemetry import TelemetryAPI
3636from splitio .api .auth import AuthAPI
3737
38-
3938# Tasks
4039from splitio .tasks .split_sync import SplitSynchronizationTask
4140from splitio .tasks .segment_sync import SegmentSynchronizationTask
5352from splitio .sync .event import EventSynchronizer
5453from splitio .sync .telemetry import TelemetrySynchronizer
5554
55+ # Recorder
56+ from splitio .recorder .recorder import StandardRecorder , PipelinedRecorder
57+
5658# Localhost stuff
5759from splitio .client .localhost import LocalhostEventsStorage , LocalhostImpressionsStorage , \
5860 LocalhostTelemetryStorage
@@ -85,7 +87,7 @@ def __init__( # pylint: disable=too-many-arguments
8587 apikey ,
8688 storages ,
8789 labels_enabled ,
88- impressions_manager ,
90+ recorder ,
8991 sync_manager = None ,
9092 sdk_ready_flag = None ,
9193 ):
@@ -102,16 +104,16 @@ def __init__( # pylint: disable=too-many-arguments
102104 :type sync_manager: splitio.sync.manager.Manager
103105 :param sdk_ready_flag: Event to set when the sdk is ready.
104106 :type sdk_ready_flag: threading.Event
105- :param impression_manager: Impressions manager instance
106- :type impression_listener: ImpressionsManager
107+ :param recorder: StatsRecorder instance
108+ :type recorder: StatsRecorder
107109 """
108110 self ._apikey = apikey
109111 self ._storages = storages
110112 self ._labels_enabled = labels_enabled
111113 self ._sync_manager = sync_manager
112114 self ._sdk_internal_ready_flag = sdk_ready_flag
113115 self ._sdk_ready_flag = threading .Event ()
114- self ._impressions_manager = impressions_manager
116+ self ._recorder = recorder
115117
116118 # If we have a ready flag, it means we have sync tasks that need to finish
117119 # before the SDK client becomes ready.
@@ -150,7 +152,7 @@ def client(self):
150152 This client is only a set of references to structures hold by the factory.
151153 Creating one a fast operation and safe to be used anywhere.
152154 """
153- return Client (self , self ._impressions_manager , self ._labels_enabled )
155+ return Client (self , self ._recorder , self ._labels_enabled )
154156
155157 def manager (self ):
156158 """
@@ -280,7 +282,6 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
280282 }
281283
282284 imp_manager = ImpressionsManager (
283- storages ['impressions' ].put ,
284285 cfg ['impressionsMode' ],
285286 True ,
286287 _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata ))
@@ -329,8 +330,14 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
329330 storages ['events' ].set_queue_full_hook (tasks .events_task .flush )
330331 storages ['impressions' ].set_queue_full_hook (tasks .impressions_task .flush )
331332
333+ recorder = StandardRecorder (
334+ imp_manager ,
335+ storages ['telemetry' ],
336+ storages ['events' ],
337+ storages ['impressions' ],
338+ )
332339 return SplitFactory (api_key , storages , cfg ['labelsEnabled' ],
333- imp_manager , manager , sdk_ready_flag )
340+ recorder , manager , sdk_ready_flag )
334341
335342
336343def _build_redis_factory (api_key , cfg ):
@@ -346,12 +353,19 @@ def _build_redis_factory(api_key, cfg):
346353 'events' : RedisEventsStorage (redis_adapter , sdk_metadata ),
347354 'telemetry' : RedisTelemetryStorage (redis_adapter , sdk_metadata )
348355 }
356+ recorder = PipelinedRecorder (
357+ redis_adapter ,
358+ ImpressionsManager (cfg ['impressionsMode' ], False ,
359+ _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata )),
360+ storages ['telemetry' ],
361+ storages ['events' ],
362+ storages ['impressions' ],
363+ )
349364 return SplitFactory (
350365 api_key ,
351366 storages ,
352367 cfg ['labelsEnabled' ],
353- ImpressionsManager (storages ['impressions' ].put , cfg ['impressionsMode' ], False ,
354- _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata ))
368+ recorder ,
355369 )
356370
357371
@@ -366,12 +380,18 @@ def _build_uwsgi_factory(api_key, cfg):
366380 'events' : UWSGIEventStorage (uwsgi_adapter ),
367381 'telemetry' : UWSGITelemetryStorage (uwsgi_adapter )
368382 }
383+ recorder = StandardRecorder (
384+ ImpressionsManager (cfg ['impressionsMode' ], True ,
385+ _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata )),
386+ storages ['telemetry' ],
387+ storages ['events' ],
388+ storages ['impressions' ],
389+ )
369390 return SplitFactory (
370391 api_key ,
371392 storages ,
372393 cfg ['labelsEnabled' ],
373- ImpressionsManager (storages ['impressions' ].put , cfg ['impressionsMode' ], True ,
374- _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata ))
394+ recorder ,
375395 )
376396
377397
@@ -401,12 +421,17 @@ def _build_localhost_factory(cfg):
401421 synchronizer = LocalhostSynchronizer (synchronizers , tasks )
402422 manager = Manager (ready_event , synchronizer , None , False )
403423 manager .start ()
404-
424+ recorder = StandardRecorder (
425+ ImpressionsManager (cfg ['impressionsMode' ], True , None ),
426+ storages ['telemetry' ],
427+ storages ['events' ],
428+ storages ['impressions' ],
429+ )
405430 return SplitFactory (
406431 'localhost' ,
407432 storages ,
408433 False ,
409- ImpressionsManager ( storages [ 'impressions' ]. put , cfg [ 'impressionsMode' ], True , None ) ,
434+ recorder ,
410435 manager ,
411436 ready_event
412437 )
0 commit comments