@@ -124,8 +124,11 @@ def __init__( # pylint: disable=too-many-arguments
124124 self ._sdk_internal_ready_flag = sdk_ready_flag
125125 self ._recorder = recorder
126126 self ._preforked_initialization = preforked_initialization
127- self ._telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
128- self ._telemetry_init_producer = telemetry_producer .get_telemetry_init_producer ()
127+ self ._telemetry_evaluation_producer = None
128+ self ._telemetry_init_producer = None
129+ if not telemetry_producer == None :
130+ self ._telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
131+ self ._telemetry_init_producer = telemetry_producer .get_telemetry_init_producer ()
129132 self ._telemetry_init_consumer = telemetry_init_consumer
130133 self ._telemetry_api = telemetry_api
131134 self ._ready_time = get_current_epoch_time ()
@@ -156,13 +159,14 @@ def _update_status_when_ready(self):
156159 self ._sdk_internal_ready_flag .wait ()
157160 self ._status = Status .READY
158161 self ._sdk_ready_flag .set ()
159- self ._telemetry_init_producer .record_ready_time (get_current_epoch_time () - self ._ready_time )
160- redundant_factory_count , active_factory_count = _get_active_and_redundant_count ()
161- self ._telemetry_init_producer .record_active_and_redundant_factories (active_factory_count , redundant_factory_count )
162+ if not self ._telemetry_init_producer == None :
163+ self ._telemetry_init_producer .record_ready_time (get_current_epoch_time () - self ._ready_time )
164+ redundant_factory_count , active_factory_count = _get_active_and_redundant_count ()
165+ self ._telemetry_init_producer .record_active_and_redundant_factories (active_factory_count , redundant_factory_count )
162166
163- config_post_thread = threading .Thread (target = self ._telemetry_api .record_init (self ._telemetry_init_consumer .get_config_stats ()), name = "PostConfigData" )
164- config_post_thread .setDaemon (True )
165- config_post_thread .start ()
167+ config_post_thread = threading .Thread (target = self ._telemetry_api .record_init (self ._telemetry_init_consumer .get_config_stats ()), name = "PostConfigData" )
168+ config_post_thread .setDaemon (True )
169+ config_post_thread .start ()
166170
167171
168172 def _get_storage (self , name ):
@@ -329,7 +333,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
329333 telemetry_producer = TelemetryStorageProducer (telemetry_storage )
330334 telemetry_consumer = TelemetryStorageConsumer (telemetry_storage )
331335 telemetry_runtime_producer = telemetry_producer .get_telemetry_runtime_producer ()
332- telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
336+ # telemetry_evaluation_producer=telemetry_producer.get_telemetry_evaluation_producer()
333337
334338
335339 http_client = HttpClient (
@@ -365,8 +369,8 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
365369 imp_strategy = set_classes ('MEMORY' , cfg ['impressionsMode' ], apis )
366370
367371 imp_manager = ImpressionsManager (
368- _wrap_impression_listener ( cfg [ 'impressionListener' ], sdk_metadata ) ,
369- imp_strategy , telemetry_runtime_producer )
372+ imp_strategy , telemetry_runtime_producer ,
373+ _wrap_impression_listener ( cfg [ 'impressionListener' ], sdk_metadata ) )
370374
371375 synchronizers = SplitSynchronizers (
372376 SplitSynchronizer (apis ['splits' ], storages ['splits' ]),
@@ -375,9 +379,9 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
375379 cfg ['impressionsBulkSize' ]),
376380 EventSynchronizer (apis ['events' ], storages ['events' ], cfg ['eventsBulkSize' ]),
377381 impressions_count_sync ,
382+ TelemetrySynchronizer (telemetry_consumer , storages ['splits' ], storages ['segments' ], apis ['telemetry' ]),
378383 unique_keys_synchronizer ,
379384 clear_filter_sync ,
380- TelemetrySynchronizer (telemetry_consumer , storages ['splits' ], storages ['segments' ], apis ['telemetry' ])
381385 )
382386
383387 tasks = SplitTasks (
@@ -395,9 +399,9 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
395399 ),
396400 EventsSyncTask (synchronizers .events_sync .synchronize_events , cfg ['eventsPushRate' ]),
397401 impressions_count_task ,
402+ TelemetrySyncTask (synchronizers .telemetry_sync .synchronize_stats , cfg ['metricsRefreshRate' ]),
398403 unique_keys_task ,
399404 clear_filter_task ,
400- TelemetrySyncTask (synchronizers .telemetry_sync .synchronize_stats , cfg ['metricsRefreshRate' ]),
401405 )
402406
403407 synchronizer = Synchronizer (synchronizers , tasks )
@@ -421,7 +425,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
421425 synchronizer .sync_all ()
422426 synchronizer ._split_synchronizers ._segment_sync .shutdown ()
423427 return SplitFactory (api_key , storages , cfg ['labelsEnabled' ],
424- recorder , manager , preforked_initialization = preforked_initialization )
428+ recorder , manager , None , telemetry_producer , telemetry_consumer . get_telemetry_init_consumer (), apis [ 'telemetry' ], preforked_initialization = preforked_initialization )
425429
426430 initialization_thread = threading .Thread (target = manager .start , name = "SDKInitializer" )
427431 initialization_thread .setDaemon (True )
@@ -444,6 +448,11 @@ def _build_redis_factory(api_key, cfg):
444448 'impressions' : RedisImpressionsStorage (redis_adapter , sdk_metadata ),
445449 'events' : RedisEventsStorage (redis_adapter , sdk_metadata ),
446450 }
451+ telemetry_storage = InMemoryTelemetryStorage ()
452+ telemetry_producer = TelemetryStorageProducer (telemetry_storage )
453+ telemetry_consumer = TelemetryStorageConsumer (telemetry_storage )
454+ telemetry_runtime_producer = telemetry_producer .get_telemetry_runtime_producer ()
455+
447456 data_sampling = cfg .get ('dataSampling' , DEFAULT_DATA_SAMPLING )
448457 if data_sampling < _MIN_DEFAULT_DATA_SAMPLING_ALLOWED :
449458 _LOGGER .warning ("dataSampling cannot be less than %.2f, defaulting to minimum" ,
@@ -455,17 +464,21 @@ def _build_redis_factory(api_key, cfg):
455464 imp_strategy = set_classes ('REDIS' , cfg ['impressionsMode' ], redis_adapter )
456465
457466 imp_manager = ImpressionsManager (
467+ imp_strategy ,
468+ telemetry_runtime_producer ,
458469 _wrap_impression_listener (cfg ['impressionListener' ], sdk_metadata ),
459- imp_strategy )
470+ )
460471
461472 synchronizers = SplitSynchronizers (None , None , None , None ,
462473 impressions_count_sync ,
474+ None ,
463475 unique_keys_synchronizer ,
464476 clear_filter_sync
465477 )
466478
467479 tasks = SplitTasks (None , None , None , None ,
468480 impressions_count_task ,
481+ None ,
469482 unique_keys_task ,
470483 clear_filter_task
471484 )
@@ -490,9 +503,11 @@ def _build_redis_factory(api_key, cfg):
490503 cfg ['labelsEnabled' ],
491504 recorder ,
492505 manager ,
506+ sdk_ready_flag = None ,
507+ telemetry_producer = telemetry_producer ,
508+ telemetry_init_consumer = telemetry_consumer .get_telemetry_init_consumer ()
493509 )
494510
495-
496511def _build_localhost_factory (cfg ):
497512 """Build and return a localhost factory for testing/development purposes."""
498513 storages = {
@@ -520,7 +535,7 @@ def _build_localhost_factory(cfg):
520535 manager = Manager (ready_event , synchronizer , None , False , sdk_metadata )
521536 manager .start ()
522537 recorder = StandardRecorder (
523- ImpressionsManager (None , StrategyDebugMode ()),
538+ ImpressionsManager (StrategyDebugMode ()),
524539 storages ['events' ],
525540 storages ['impressions' ],
526541 )
@@ -530,7 +545,7 @@ def _build_localhost_factory(cfg):
530545 False ,
531546 recorder ,
532547 manager ,
533- ready_event
548+ ready_event ,
534549 )
535550
536551def get_factory (api_key , ** kwargs ):
0 commit comments