1616from splitio .engine .strategies import Counter as ImpressionsCounter
1717from splitio .engine .strategies .strategy_debug_mode import StrategyDebugMode
1818from splitio .engine .strategies .strategy_optimized_mode import StrategyOptimizedMode
19+ from splitio .engine .sender_adapters .in_memory_sender_adapter import InMemorySenderAdapter
1920
2021# Storage
2122from splitio .storage .inmemmory import InMemorySplitStorage , InMemorySegmentStorage , \
3132from splitio .api .impressions import ImpressionsAPI
3233from splitio .api .events import EventsAPI
3334from splitio .api .auth import AuthAPI
35+ from splitio .api .telemetry import TelemetryAPI
3436
3537# Tasks
3638from splitio .tasks .split_sync import SplitSynchronizationTask
3739from splitio .tasks .segment_sync import SegmentSynchronizationTask
3840from splitio .tasks .impressions_sync import ImpressionsSyncTask , ImpressionsCountSyncTask
3941from splitio .tasks .events_sync import EventsSyncTask
42+ from splitio .tasks .unique_keys_sync import UniqueKeysSyncTask , ClearFilterSyncTask
4043
4144# Synchronizer
4245from splitio .sync .synchronizer import SplitTasks , SplitSynchronizers , Synchronizer , \
4649from splitio .sync .segment import SegmentSynchronizer
4750from splitio .sync .impression import ImpressionSynchronizer , ImpressionsCountSynchronizer
4851from splitio .sync .event import EventSynchronizer
52+ from splitio .sync .unique_keys import UniqueKeysSynchronizer , ClearFilterSynchronizer
53+
4954
5055# Recorder
5156from splitio .recorder .recorder import StandardRecorder , PipelinedRecorder
@@ -287,7 +292,7 @@ def _wrap_impression_listener(listener, metadata):
287292
288293
289294def _build_in_memory_factory (api_key , cfg , sdk_url = None , events_url = None , # pylint:disable=too-many-arguments,too-many-locals
290- auth_api_base_url = None , streaming_api_base_url = None ):
295+ auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ):
291296 """Build and return a split factory tailored to the supplied config."""
292297 if not input_validator .validate_factory_instantiation (api_key ):
293298 return None
@@ -296,6 +301,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
296301 sdk_url = sdk_url ,
297302 events_url = events_url ,
298303 auth_url = auth_api_base_url ,
304+ telemetry_url = telemetry_api_base_url ,
299305 timeout = cfg .get ('connectionTimeout' )
300306 )
301307
@@ -306,6 +312,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
306312 'segments' : SegmentsAPI (http_client , api_key , sdk_metadata ),
307313 'impressions' : ImpressionsAPI (http_client , api_key , sdk_metadata , cfg ['impressionsMode' ]),
308314 'events' : EventsAPI (http_client , api_key , sdk_metadata ),
315+ 'telemetry' : TelemetryAPI (http_client , api_key , sdk_metadata ),
309316 }
310317
311318 if not input_validator .validate_apikey_type (apis ['segments' ]):
@@ -317,6 +324,13 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
317324 'impressions' : InMemoryImpressionStorage (cfg ['impressionsQueueSize' ]),
318325 'events' : InMemoryEventStorage (cfg ['eventsQueueSize' ]),
319326 }
327+ imp_counter = ImpressionsCounter () if cfg ['impressionsMode' ] != ImpressionsMode .DEBUG else None
328+
329+ strategies = {
330+ ImpressionsMode .OPTIMIZED : StrategyOptimizedMode (imp_counter ),
331+ ImpressionsMode .DEBUG : StrategyDebugMode (),
332+ }
333+ imp_strategy = strategies [cfg ['impressionsMode' ]]
320334
321335 imp_counter = ImpressionsCounter () if cfg ['impressionsMode' ] != ImpressionsMode .DEBUG else None
322336
@@ -354,7 +368,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
354368 cfg ['impressionsRefreshRate' ],
355369 ),
356370 EventsSyncTask (synchronizers .events_sync .synchronize_events , cfg ['eventsPushRate' ]),
357- imp_count_sync_task
371+ ImpressionsCountSyncTask ( synchronizers . impressions_count_sync . synchronize_counters ),
358372 )
359373
360374 synchronizer = Synchronizer (synchronizers , tasks )
@@ -452,7 +466,7 @@ def _build_localhost_factory(cfg):
452466 manager .start ()
453467
454468 recorder = StandardRecorder (
455- ImpressionsManager (cfg [ 'impressionsMode' ] , StrategyDebugMode ()),
469+ ImpressionsManager (None , StrategyDebugMode ()),
456470 storages ['events' ],
457471 storages ['impressions' ],
458472 )
@@ -501,7 +515,8 @@ def get_factory(api_key, **kwargs):
501515 kwargs .get ('sdk_api_base_url' ),
502516 kwargs .get ('events_api_base_url' ),
503517 kwargs .get ('auth_api_base_url' ),
504- kwargs .get ('streaming_api_base_url' )
518+ kwargs .get ('streaming_api_base_url' ),
519+ kwargs .get ('telemetry_api_base_url' )
505520 )
506521 finally :
507522 _INSTANTIATED_FACTORIES .update ([api_key ])
0 commit comments