@@ -498,7 +498,8 @@ def _wrap_impression_listener_async(listener, metadata):
498498 return None
499499
500500def _build_in_memory_factory (api_key , cfg , sdk_url = None , events_url = None , # pylint:disable=too-many-arguments,too-many-locals
501- auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ):
501+ auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ,
502+ total_flag_sets = 0 , invalid_flag_sets = 0 ):
502503 """Build and return a split factory tailored to the supplied config."""
503504 if not input_validator .validate_factory_instantiation (api_key ):
504505 return None
@@ -536,7 +537,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
536537 }
537538
538539 storages = {
539- 'splits' : InMemorySplitStorage (),
540+ 'splits' : InMemorySplitStorage (cfg [ 'flagSetsFilter' ] if cfg [ 'flagSetsFilter' ] is not None else [] ),
540541 'segments' : InMemorySegmentStorage (),
541542 'impressions' : InMemoryImpressionStorage (cfg ['impressionsQueueSize' ], telemetry_runtime_producer ),
542543 'events' : InMemoryEventStorage (cfg ['eventsQueueSize' ], telemetry_runtime_producer ),
@@ -607,7 +608,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
607608 unique_keys_tracker = unique_keys_tracker
608609 )
609610
610- telemetry_init_producer .record_config (cfg , extra_cfg )
611+ telemetry_init_producer .record_config (cfg , extra_cfg , total_flag_sets , invalid_flag_sets )
611612
612613 if preforked_initialization :
613614 synchronizer .sync_all (max_retry_attempts = _MAX_RETRY_SYNC_ALL )
@@ -625,7 +626,8 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
625626 telemetry_submitter )
626627
627628async def _build_in_memory_factory_async (api_key , cfg , sdk_url = None , events_url = None , # pylint:disable=too-many-arguments,too-many-localsa
628- auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ):
629+ auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ,
630+ total_flag_sets = 0 , invalid_flag_sets = 0 ):
629631 """Build and return a split factory tailored to the supplied config in async mode."""
630632 if not input_validator .validate_factory_instantiation (api_key ):
631633 return None
@@ -663,7 +665,7 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
663665 }
664666
665667 storages = {
666- 'splits' : InMemorySplitStorageAsync (),
668+ 'splits' : InMemorySplitStorageAsync (cfg [ 'flagSetsFilter' ] if cfg [ 'flagSetsFilter' ] is not None else [] ),
667669 'segments' : InMemorySegmentStorageAsync (),
668670 'impressions' : InMemoryImpressionStorageAsync (cfg ['impressionsQueueSize' ], telemetry_runtime_producer ),
669671 'events' : InMemoryEventStorageAsync (cfg ['eventsQueueSize' ], telemetry_runtime_producer ),
@@ -733,7 +735,7 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
733735 unique_keys_tracker = unique_keys_tracker
734736 )
735737
736- await telemetry_init_producer .record_config (cfg , extra_cfg )
738+ await telemetry_init_producer .record_config (cfg , extra_cfg , total_flag_sets , invalid_flag_sets )
737739
738740 if preforked_initialization :
739741 await synchronizer .sync_all (max_retry_attempts = _MAX_RETRY_SYNC_ALL )
@@ -814,7 +816,7 @@ def _build_redis_factory(api_key, cfg):
814816 initialization_thread = threading .Thread (target = manager .start , name = "SDKInitializer" , daemon = True )
815817 initialization_thread .start ()
816818
817- telemetry_init_producer .record_config (cfg , {})
819+ telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
818820
819821 split_factory = SplitFactory (
820822 api_key ,
@@ -894,7 +896,7 @@ async def _build_redis_factory_async(api_key, cfg):
894896 )
895897
896898 manager = RedisManagerAsync (synchronizer )
897- await telemetry_init_producer .record_config (cfg , {})
899+ await telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
898900 manager .start ()
899901
900902 split_factory = SplitFactoryAsync (
@@ -977,7 +979,7 @@ def _build_pluggable_factory(api_key, cfg):
977979 initialization_thread = threading .Thread (target = manager .start , name = "SDKInitializer" , daemon = True )
978980 initialization_thread .start ()
979981
980- telemetry_init_producer .record_config (cfg , {})
982+ telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
981983
982984 split_factory = SplitFactory (
983985 api_key ,
@@ -1056,7 +1058,7 @@ async def _build_pluggable_factory_async(api_key, cfg):
10561058 # Using same class as redis for consumer mode only
10571059 manager = RedisManagerAsync (synchronizer )
10581060 manager .start ()
1059- await telemetry_init_producer .record_config (cfg , {})
1061+ await telemetry_init_producer .record_config (cfg , {}, 0 , 0 )
10601062
10611063 split_factory = SplitFactoryAsync (
10621064 api_key ,
@@ -1083,7 +1085,7 @@ def _build_localhost_factory(cfg):
10831085 telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
10841086
10851087 storages = {
1086- 'splits' : InMemorySplitStorage (),
1088+ 'splits' : InMemorySplitStorage (cfg [ 'flagSetsFilter' ] if cfg [ 'flagSetsFilter' ] is not None else [] ),
10871089 'segments' : InMemorySegmentStorage (), # not used, just to avoid possible future errors.
10881090 'impressions' : LocalhostImpressionsStorage (),
10891091 'events' : LocalhostEventsStorage (),
@@ -1282,8 +1284,14 @@ async def get_factory_async(api_key, **kwargs):
12821284 _INSTANTIATED_FACTORIES .update ([api_key ])
12831285 _INSTANTIATED_FACTORIES_LOCK .release ()
12841286
1285- config = sanitize_config (api_key , kwargs .get ('config' , {}))
1287+ config_raw = kwargs .get ('config' , {})
1288+ total_flag_sets = 0
1289+ invalid_flag_sets = 0
1290+ if config_raw .get ('flagSetsFilter' ) is not None and isinstance (config_raw .get ('flagSetsFilter' ), list ):
1291+ total_flag_sets = len (config_raw .get ('flagSetsFilter' ))
1292+ invalid_flag_sets = total_flag_sets - len (input_validator .validate_flag_sets (config_raw .get ('flagSetsFilter' ), 'Telemetry Init' ))
12861293
1294+ config = sanitize_config (api_key , config_raw )
12871295 if config ['operationMode' ] == 'localhost' :
12881296 split_factory = await _build_localhost_factory_async (config )
12891297 elif config ['storageType' ] == 'redis' :
@@ -1298,8 +1306,9 @@ async def get_factory_async(api_key, **kwargs):
12981306 kwargs .get ('events_api_base_url' ),
12991307 kwargs .get ('auth_api_base_url' ),
13001308 kwargs .get ('streaming_api_base_url' ),
1301- kwargs .get ('telemetry_api_base_url' ))
1302-
1309+ kwargs .get ('telemetry_api_base_url' ),
1310+ total_flag_sets ,
1311+ invalid_flag_sets )
13031312 return split_factory
13041313
13051314def _get_active_and_redundant_count ():
0 commit comments