1212from splitio .client import util
1313from splitio .client .listener import ImpressionListenerWrapper
1414from splitio .engine .impressions import Manager as ImpressionsManager
15+ from splitio .engine .impressions import ImpressionsMode
16+ from splitio .engine .strategies import Counter as ImpressionsCounter
1517from splitio .engine .strategies .strategy_debug_mode import StrategyDebugMode
1618from splitio .engine .strategies .strategy_optimized_mode import StrategyOptimizedMode
1719from splitio .engine .strategies .strategy_none_mode import StrategyNoneMode
20+ from splitio .engine .sender_adapters .in_memory_sender_adapter import InMemorySenderAdapter
1821
1922# Storage
2023from splitio .storage .inmemmory import InMemorySplitStorage , InMemorySegmentStorage , \
@@ -310,7 +313,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
310313 'segments' : SegmentsAPI (http_client , api_key , sdk_metadata ),
311314 'impressions' : ImpressionsAPI (http_client , api_key , sdk_metadata , cfg ['impressionsMode' ]),
312315 'events' : EventsAPI (http_client , api_key , sdk_metadata ),
313- 'telemtery ' : TelemetryAPI (http_client , api_key , sdk_metadata ),
316+ 'telemetry ' : TelemetryAPI (http_client , api_key , sdk_metadata ),
314317 }
315318
316319 if not input_validator .validate_apikey_type (apis ['segments' ]):
@@ -322,13 +325,12 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
322325 'impressions' : InMemoryImpressionStorage (cfg ['impressionsQueueSize' ]),
323326 'events' : InMemoryEventStorage (cfg ['eventsQueueSize' ]),
324327 }
325-
326- imp_counter = Counter () if cfg ['impressionsMode' ] == 'OPTIMIZED' else None
328+ imp_counter = ImpressionsCounter () if cfg ['impressionsMode' ] != ImpressionsMode .DEBUG else None
327329
328330 strategies = {
329- ' OPTIMIZED' : StrategyOptimizedMode (imp_counter ),
330- ' DEBUG' : StrategyDebugMode (),
331- ' NONE' : StrategyNoneMode (imp_counter ),
331+ ImpressionsMode . OPTIMIZED : StrategyOptimizedMode (imp_counter ),
332+ ImpressionsMode . DEBUG : StrategyDebugMode (),
333+ ImpressionsMode . NONE : StrategyNoneMode (imp_counter ),
332334 }
333335 imp_strategy = strategies [cfg ['impressionsMode' ]]
334336
@@ -362,9 +364,9 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
362364 ImpressionsCountSyncTask (synchronizers .impressions_count_sync .synchronize_counters ),
363365 )
364366
365- if cfg ['impressionsMode' ] == ' NONE' :
367+ if cfg ['impressionsMode' ] == ImpressionsMode . NONE :
366368 synchronizers .set_none_syncs (
367- UniqueKeysSynchronizer (imp_strategy ._unique_keys_tracker ),
369+ UniqueKeysSynchronizer (InMemorySenderAdapter ( apis [ 'telemetry' ]), imp_strategy ._unique_keys_tracker ),
368370 ClearFilterSynchronizer (imp_strategy ._unique_keys_tracker ),
369371 )
370372 tasks .set_none_tasks (
@@ -382,7 +384,8 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
382384
383385 storages ['events' ].set_queue_full_hook (tasks .events_task .flush )
384386 storages ['impressions' ].set_queue_full_hook (tasks .impressions_task .flush )
385- # TODO: Add unique_keys_tracker.set_queue_full_hook(tasks.unique_keys.flush)
387+ if cfg ['impressionsMode' ] == ImpressionsMode .NONE :
388+ imp_strategy ._unique_keys_tracker .set_queue_full_hook (tasks ._unique_keys_task .flush )
386389
387390 recorder = StandardRecorder (
388391 imp_manager ,
@@ -421,10 +424,14 @@ def _build_redis_factory(api_key, cfg):
421424 _LOGGER .warning ("dataSampling cannot be less than %.2f, defaulting to minimum" ,
422425 _MIN_DEFAULT_DATA_SAMPLING_ALLOWED )
423426 data_sampling = _MIN_DEFAULT_DATA_SAMPLING_ALLOWED
427+
428+ imp_manager = ImpressionsManager (
429+ _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata ),
430+ StrategyDebugMode ())
431+
424432 recorder = PipelinedRecorder (
425433 redis_adapter .pipeline ,
426- ImpressionsManager (cfg ['impressionsMode' ], False ,
427- _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata )),
434+ imp_manager ,
428435 storages ['events' ],
429436 storages ['impressions' ],
430437 data_sampling ,
@@ -464,7 +471,7 @@ def _build_localhost_factory(cfg):
464471 manager = Manager (ready_event , synchronizer , None , False , sdk_metadata )
465472 manager .start ()
466473 recorder = StandardRecorder (
467- ImpressionsManager (cfg [ 'impressionsMode' ], True , None ),
474+ ImpressionsManager (None , StrategyDebugMode () ),
468475 storages ['events' ],
469476 storages ['impressions' ],
470477 )
@@ -513,7 +520,8 @@ def get_factory(api_key, **kwargs):
513520 kwargs .get ('sdk_api_base_url' ),
514521 kwargs .get ('events_api_base_url' ),
515522 kwargs .get ('auth_api_base_url' ),
516- kwargs .get ('streaming_api_base_url' )
523+ kwargs .get ('streaming_api_base_url' ),
524+ kwargs .get ('telemetry_api_base_url' )
517525 )
518526 finally :
519527 _INSTANTIATED_FACTORIES .update ([api_key ])
0 commit comments