1919 TelemetryStorageProducerAsync , TelemetryStorageConsumerAsync
2020from splitio .engine .impressions .manager import Counter as ImpressionsCounter
2121from splitio .engine .impressions .unique_keys_tracker import UniqueKeysTracker , UniqueKeysTrackerAsync
22- from splitio .events .events_manager import EventsManager
22+ from splitio .events .events_manager import EventsManager , EventsManagerAsync
2323from splitio .events .events_manager_config import EventsManagerConfig
24- from splitio .events .events_task import EventsTask
24+ from splitio .events .events_task import EventsTask , EventsTaskAsync
2525from splitio .events .events_delivery import EventsDelivery
2626from splitio .models .fallback_config import FallbackTreatmentCalculator
2727from splitio .models .notification import SdkInternalEventNotification
@@ -352,6 +352,8 @@ def __init__( # pylint: disable=too-many-arguments
352352 storages ,
353353 labels_enabled ,
354354 recorder ,
355+ internal_events_queue ,
356+ events_manager ,
355357 sync_manager = None ,
356358 telemetry_producer = None ,
357359 telemetry_init_producer = None ,
@@ -387,6 +389,8 @@ def __init__( # pylint: disable=too-many-arguments
387389 self ._telemetry_submitter = telemetry_submitter
388390 self ._ready_time = get_current_epoch_time_ms ()
389391 _LOGGER .debug ("Running in asyncio mode" )
392+ self ._internal_events_queue = internal_events_queue
393+ self ._events_manager = events_manager
390394 self ._manager_start_task = manager_start_task
391395 self ._status = Status .NOT_INITIALIZED
392396 self ._sdk_ready_flag = asyncio .Event ()
@@ -409,6 +413,7 @@ async def _update_status_when_ready_async(self):
409413 _LOGGER .debug (str (e ))
410414 self ._status = Status .READY
411415 self ._sdk_ready_flag .set ()
416+ await self ._internal_events_queue .put (SdkInternalEventNotification (SdkInternalEvent .SDK_READY , None ))
412417
413418 def manager (self ):
414419 """
@@ -434,6 +439,7 @@ async def block_until_ready(self, timeout=None):
434439 _LOGGER .error ("Exception initializing SDK" )
435440 _LOGGER .debug (str (e ))
436441 await self ._telemetry_init_producer .record_bur_time_out ()
442+ await self ._internal_events_queue .put (SdkInternalEventNotification (SdkInternalEvent .SDK_TIMED_OUT , None ))
437443 raise TimeoutException ('SDK Initialization: time of %d exceeded' % timeout )
438444
439445 async def destroy (self , destroyed_event = None ):
@@ -481,7 +487,7 @@ def client(self):
481487 This client is only a set of references to structures hold by the factory.
482488 Creating one a fast operation and safe to be used anywhere.
483489 """
484- return ClientAsync (self , self ._recorder , self ._labels_enabled , self ._fallback_treatment_calculator )
490+ return ClientAsync (self , self ._recorder , self ._events_manager , self . _labels_enabled , self ._fallback_treatment_calculator )
485491
486492def _wrap_impression_listener (listener , metadata ):
487493 """
@@ -698,11 +704,14 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
698704 'events' : EventsAPIAsync (http_client , api_key , sdk_metadata , telemetry_runtime_producer ),
699705 'telemetry' : TelemetryAPIAsync (http_client , api_key , sdk_metadata , telemetry_runtime_producer ),
700706 }
707+ internal_events_queue = asyncio .Queue ()
708+ events_manager = EventsManagerAsync (EventsManagerConfig (), EventsDelivery ())
709+ internal_events_task = EventsTaskAsync (events_manager .notify_internal_event , internal_events_queue )
701710
702711 storages = {
703- 'splits' : InMemorySplitStorageAsync (cfg ['flagSetsFilter' ] if cfg ['flagSetsFilter' ] is not None else []),
704- 'segments' : InMemorySegmentStorageAsync (),
705- 'rule_based_segments' : InMemoryRuleBasedSegmentStorageAsync (),
712+ 'splits' : InMemorySplitStorageAsync (internal_events_queue , cfg ['flagSetsFilter' ] if cfg ['flagSetsFilter' ] is not None else []),
713+ 'segments' : InMemorySegmentStorageAsync (internal_events_queue ),
714+ 'rule_based_segments' : InMemoryRuleBasedSegmentStorageAsync (internal_events_queue ),
706715 'impressions' : InMemoryImpressionStorageAsync (cfg ['impressionsQueueSize' ], telemetry_runtime_producer ),
707716 'events' : InMemoryEventStorageAsync (cfg ['eventsQueueSize' ], telemetry_runtime_producer ),
708717 }
@@ -748,6 +757,7 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
748757 TelemetrySyncTaskAsync (synchronizers .telemetry_sync .synchronize_stats , cfg ['metricsRefreshRate' ]),
749758 unique_keys_task ,
750759 clear_filter_task ,
760+ internal_events_task
751761 )
752762
753763 synchronizer = SynchronizerAsync (synchronizers , tasks )
@@ -770,11 +780,12 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
770780 )
771781
772782 await telemetry_init_producer .record_config (cfg , extra_cfg , total_flag_sets , invalid_flag_sets )
783+ internal_events_task .start ()
773784
774785 manager_start_task = asyncio .get_running_loop ().create_task (manager .start ())
775786
776787 return SplitFactoryAsync (api_key , storages , cfg ['labelsEnabled' ],
777- recorder , manager ,
788+ recorder , internal_events_queue , events_manager , manager ,
778789 telemetry_producer , telemetry_init_producer ,
779790 telemetry_submitter , manager_start_task = manager_start_task ,
780791 api_client = http_client , fallback_treatment_calculator = FallbackTreatmentCalculator (cfg ['fallbackTreatments' ]))
@@ -933,12 +944,16 @@ async def _build_redis_factory_async(api_key, cfg):
933944 manager = RedisManagerAsync (synchronizer )
934945 await telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
935946 manager .start ()
947+ internal_events_queue = asyncio .Queue ()
948+ events_manager = EventsManagerAsync (EventsManagerConfig (), EventsDelivery ())
936949
937950 split_factory = SplitFactoryAsync (
938951 api_key ,
939952 storages ,
940953 cfg ['labelsEnabled' ],
941954 recorder ,
955+ internal_events_queue ,
956+ events_manager ,
942957 manager ,
943958 telemetry_producer = telemetry_producer ,
944959 telemetry_init_producer = telemetry_init_producer ,
@@ -1101,12 +1116,16 @@ async def _build_pluggable_factory_async(api_key, cfg):
11011116 manager = RedisManagerAsync (synchronizer )
11021117 manager .start ()
11031118 await telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
1119+ internal_events_queue = asyncio .Queue ()
1120+ events_manager = EventsManagerAsync (EventsManagerConfig (), EventsDelivery ())
11041121
11051122 split_factory = SplitFactoryAsync (
11061123 api_key ,
11071124 storages ,
11081125 cfg ['labelsEnabled' ],
11091126 recorder ,
1127+ internal_events_queue ,
1128+ events_manager ,
11101129 manager ,
11111130 telemetry_producer = telemetry_producer ,
11121131 telemetry_init_producer = telemetry_init_producer ,
@@ -1205,10 +1224,12 @@ async def _build_localhost_factory_async(cfg):
12051224 telemetry_runtime_producer = telemetry_producer .get_telemetry_runtime_producer ()
12061225 telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
12071226
1227+ internal_events_queue = asyncio .Queue ()
1228+ events_manager = EventsManagerAsync (EventsManagerConfig (), EventsDelivery ())
12081229 storages = {
1209- 'splits' : InMemorySplitStorageAsync (),
1210- 'segments' : InMemorySegmentStorageAsync (), # not used, just to avoid possible future errors.
1211- 'rule_based_segments' : InMemoryRuleBasedSegmentStorageAsync (),
1230+ 'splits' : InMemorySplitStorageAsync (internal_events_queue ),
1231+ 'segments' : InMemorySegmentStorageAsync (internal_events_queue ), # not used, just to avoid possible future errors.
1232+ 'rule_based_segments' : InMemoryRuleBasedSegmentStorageAsync (internal_events_queue ),
12121233 'impressions' : LocalhostImpressionsStorageAsync (),
12131234 'events' : LocalhostEventsStorageAsync (),
12141235 }
@@ -1257,11 +1278,14 @@ async def _build_localhost_factory_async(cfg):
12571278 telemetry_evaluation_producer ,
12581279 telemetry_runtime_producer
12591280 )
1281+
12601282 return SplitFactoryAsync (
12611283 'localhost' ,
12621284 storages ,
12631285 False ,
12641286 recorder ,
1287+ internal_events_queue ,
1288+ events_manager ,
12651289 manager ,
12661290 telemetry_producer = telemetry_producer ,
12671291 telemetry_init_producer = telemetry_producer .get_telemetry_init_producer (),
0 commit comments