11"""A module for Split.io Factories."""
22import logging
33import threading
4+ import sys
45from collections import Counter
56
67from enum import Enum
@@ -96,6 +97,7 @@ def __init__( # pylint: disable=too-many-arguments
9697 sync_manager = None ,
9798 sdk_ready_flag = None ,
9899 telemetry_producer = None ,
100+ telemetry_init_producer = None ,
99101 telemetry_submitter = None ,
100102 preforked_initialization = False ,
101103 ):
@@ -124,10 +126,8 @@ def __init__( # pylint: disable=too-many-arguments
124126 self ._sdk_internal_ready_flag = sdk_ready_flag
125127 self ._recorder = recorder
126128 self ._preforked_initialization = preforked_initialization
127- self ._telemetry_evaluation_producer = None
128- self ._telemetry_init_producer = None
129129 self ._telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
130- self ._telemetry_init_producer = telemetry_producer . get_telemetry_init_producer ()
130+ self ._telemetry_init_producer = telemetry_init_producer
131131 self ._telemetry_submitter = telemetry_submitter
132132 self ._ready_time = get_current_epoch_time_ms ()
133133 self ._start_status_updater ()
@@ -331,7 +331,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
331331 telemetry_consumer = TelemetryStorageConsumer (telemetry_storage )
332332 telemetry_runtime_producer = telemetry_producer .get_telemetry_runtime_producer ()
333333 telemetry_evaluation_producer = telemetry_producer .get_telemetry_evaluation_producer ()
334-
334+ telemetry_init_producer = telemetry_producer . get_telemetry_init_producer ()
335335
336336 http_client = HttpClient (
337337 sdk_url = sdk_url ,
@@ -418,21 +418,25 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
418418 telemetry_evaluation_producer
419419 )
420420
421+ telemetry_init_producer .record_config (cfg , extra_cfg )
422+ if int (_get_uwsgi_worker_id ()) > - 1 :
423+ telemetry_init_producer .add_config_tag ("initilization:uwsgi" )
424+ telemetry_init_producer .add_config_tag ("uwsgi_worker:#" + _get_uwsgi_worker_id ())
425+
421426 if preforked_initialization :
422427 synchronizer .sync_all (max_retry_attempts = _MAX_RETRY_SYNC_ALL )
423428 synchronizer ._split_synchronizers ._segment_sync .shutdown ()
429+
424430 return SplitFactory (api_key , storages , cfg ['labelsEnabled' ],
425- recorder , manager , None , telemetry_producer , apis [ 'telemetry' ] , preforked_initialization = preforked_initialization )
431+ recorder , manager , None , telemetry_producer , telemetry_init_producer , telemetry_submitter , preforked_initialization = preforked_initialization )
426432
427433 initialization_thread = threading .Thread (target = manager .start , name = "SDKInitializer" )
428434 initialization_thread .setDaemon (True )
429435 initialization_thread .start ()
430436
431- telemetry_producer .get_telemetry_init_producer ().record_config (cfg , extra_cfg )
432-
433437 return SplitFactory (api_key , storages , cfg ['labelsEnabled' ],
434438 recorder , manager , sdk_ready_flag ,
435- telemetry_producer ,
439+ telemetry_producer , telemetry_init_producer ,
436440 telemetry_submitter )
437441
438442def _build_redis_factory (api_key , cfg ):
@@ -450,6 +454,7 @@ def _build_redis_factory(api_key, cfg):
450454 }
451455 telemetry_producer = TelemetryStorageProducer (storages ['telemetry' ])
452456 telemetry_runtime_producer = telemetry_producer .get_telemetry_runtime_producer ()
457+ telemetry_init_producer = telemetry_producer .get_telemetry_init_producer ()
453458 telemetry_submitter = RedisTelemetrySubmitter (storages ['telemetry' ])
454459
455460 data_sampling = cfg .get ('dataSampling' , DEFAULT_DATA_SAMPLING )
@@ -497,7 +502,10 @@ def _build_redis_factory(api_key, cfg):
497502 initialization_thread .setDaemon (True )
498503 initialization_thread .start ()
499504
500- telemetry_producer .get_telemetry_init_producer ().record_config (cfg , {})
505+ telemetry_init_producer .record_config (cfg , {})
506+ if int (_get_uwsgi_worker_id ()) > - 1 :
507+ telemetry_init_producer .add_config_tag ("initilization:uwsgi" )
508+ telemetry_init_producer .add_config_tag ("uwsgi_worker:#" + _get_uwsgi_worker_id ())
501509
502510 split_factory = SplitFactory (
503511 api_key ,
@@ -507,6 +515,7 @@ def _build_redis_factory(api_key, cfg):
507515 manager ,
508516 sdk_ready_flag = None ,
509517 telemetry_producer = telemetry_producer ,
518+ telemetry_init_producer = telemetry_init_producer
510519 )
511520 redundant_factory_count , active_factory_count = _get_active_and_redundant_count ()
512521 storages ['telemetry' ].record_active_and_redundant_factories (active_factory_count , redundant_factory_count )
@@ -560,6 +569,7 @@ def _build_localhost_factory(cfg):
560569 manager ,
561570 ready_event ,
562571 telemetry_producer = telemetry_producer ,
572+ telemetry_init_producer = telemetry_producer .get_telemetry_init_producer (),
563573 telemetry_submitter = LocalhostTelemetrySubmitter (),
564574 )
565575
@@ -613,3 +623,12 @@ def _get_active_and_redundant_count():
613623 active_factory_count += _INSTANTIATED_FACTORIES [item ]
614624 _INSTANTIATED_FACTORIES_LOCK .release ()
615625 return redundant_factory_count , active_factory_count
626+
627+ def _get_uwsgi_worker_id ():
628+ try :
629+ import uwsgi
630+ _LOGGER .debug ("uwsgi lib detected" )
631+ return str (uwsgi .worker_id ())
632+ except ModuleNotFoundError :
633+ pass
634+ return "-1"
0 commit comments