Skip to content

Commit d752a89

Browse files
committed
polishing
1 parent 44da7d6 commit d752a89

File tree

3 files changed

+52
-28
lines changed

3 files changed

+52
-28
lines changed

splitio/client/factory.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -292,12 +292,13 @@ def _wrap_impression_listener(listener, metadata):
292292
return None
293293

294294

295-
def _build_in_memory_factory(api_key, cfg, extra_cfg, sdk_url=None, events_url=None, # pylint:disable=too-many-arguments,too-many-locals
295+
def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pylint:disable=too-many-arguments,too-many-locals
296296
auth_api_base_url=None, streaming_api_base_url=None, telemetry_api_base_url=None):
297297
"""Build and return a split factory tailored to the supplied config."""
298298
if not input_validator.validate_factory_instantiation(api_key):
299299
return None
300300

301+
extra_cfg = {}
301302
extra_cfg['sdk_url'] = sdk_url
302303
extra_cfg['events_url'] = events_url
303304
extra_cfg['auth_url'] = auth_api_base_url
@@ -524,7 +525,6 @@ def get_factory(api_key, **kwargs):
524525
)
525526

526527
config = sanitize_config(api_key, kwargs.get('config', {}))
527-
extra_config = {}
528528

529529
if config['operationMode'] == 'localhost-standalone':
530530
return _build_localhost_factory(config)
@@ -535,20 +535,22 @@ def get_factory(api_key, **kwargs):
535535
return _build_in_memory_factory(
536536
api_key,
537537
config,
538-
extra_config,
539538
kwargs.get('sdk_api_base_url'),
540539
kwargs.get('events_api_base_url'),
541540
kwargs.get('auth_api_base_url'),
542541
kwargs.get('streaming_api_base_url'),
543542
kwargs.get('telemetry_api_base_url')
544543
)
545544
finally:
546-
redundant_factory_count = 0
547-
active_factory_count = 0
548545
_INSTANTIATED_FACTORIES.update([api_key])
549-
for item in _INSTANTIATED_FACTORIES:
550-
redundant_factory_count = redundant_factory_count + _INSTANTIATED_FACTORIES[item] - 1
551-
active_factory_count = active_factory_count + _INSTANTIATED_FACTORIES[item]
552-
extra_config['redundant_factory_count'] = redundant_factory_count
553-
extra_config['active_factory_count'] = active_factory_count
554546
_INSTANTIATED_FACTORIES_LOCK.release()
547+
548+
def _get_active_and_derundant_count():
549+
redundant_factory_count = 0
550+
active_factory_count = 0
551+
_INSTANTIATED_FACTORIES_LOCK.acquire()
552+
for item in _INSTANTIATED_FACTORIES:
553+
redundant_factory_count = redundant_factory_count + _INSTANTIATED_FACTORIES[item] - 1
554+
active_factory_count = active_factory_count + _INSTANTIATED_FACTORIES[item]
555+
_INSTANTIATED_FACTORIES_LOCK.release()
556+
return redundant_factory_count, active_factory_count

splitio/engine/telemetry.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""Telemetry engine classes."""
2+
import json
3+
24
from splitio.storage.inmemmory import InMemoryTelemetryStorage
35

46
class TelemetryStorageProducer(object):
@@ -147,6 +149,9 @@ def get_config_stats(self):
147149
"""Get none-ready usage."""
148150
return self._telemetry_storage.get_config_stats()
149151

152+
def get_config_stats_to_json(self):
153+
return json.dumps(self._telemetry_storage.get_config_stats())
154+
150155
class TelemetryEvaluationConsumer(object):
151156
"""Telemetry evaluation consumer class."""
152157

@@ -162,6 +167,14 @@ def pop_latencies(self):
162167
"""Get and reset eval latencies."""
163168
return self._telemetry_storage.pop_latencies()
164169

170+
def pop_formatted_stats(self):
171+
"""Get formatted and reset stats."""
172+
return {
173+
**{'mE': self.pop_exceptions()},
174+
**{'mL': self.pop_latencies()},
175+
}
176+
177+
165178
class TelemetryRuntimeConsumer(object):
166179
"""Telemetry runtime consumer class."""
167180

@@ -208,3 +221,21 @@ def pop_streaming_events(self):
208221
def get_session_length(self):
209222
"""Get session length"""
210223
return self._telemetry_storage.get_session_length()
224+
225+
def pop_formatted_stats(self):
226+
"""Get formatted and reset stats."""
227+
return {
228+
**{'iQ': self.get_impressions_stats('iQ')},
229+
**{'iDe': self.get_impressions_stats('iDe')},
230+
**{'iDr': self.get_impressions_stats('iDr')},
231+
**{'eQ': self.get_events_stats('eQ')},
232+
**{'eD': self.get_events_stats('eD')},
233+
**{'IS': self.get_last_synchronization()},
234+
**{'t': self.pop_tags()},
235+
**{'hE': self.pop_http_errors()},
236+
**{'hL': self.pop_http_latencies()},
237+
**{'aR': self.pop_auth_rejections()},
238+
**{'tR': self.pop_token_refreshes()},
239+
**{'sE': self.pop_streaming_events()},
240+
**{'sL': self.get_session_length()}
241+
}

splitio/sync/telemetry.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,18 @@ def __init__(self, telemetry_consumer, split_storage, segment_storage, telemetry
3232

3333
def synchronize_config(self):
3434
"""synchronize initial config data classe."""
35-
self._telemetry_api.record_init(json.dumps(self._telemetry_init_consumer.get_config_stats()))
35+
self._telemetry_api.record_init(self._telemetry_init_consumer.get_config_stats_to_json())
3636

3737
def synchronize_stats(self):
3838
"""synchronize runtime stats class."""
39-
self._telemetry_api.record_stats(json.dumps({
40-
**{'iQ': self._telemetry_runtime_consumer.get_impressions_stats('iQ')},
41-
**{'iDe': self._telemetry_runtime_consumer.get_impressions_stats('iDe')},
42-
**{'iDr': self._telemetry_runtime_consumer.get_impressions_stats('iDr')},
43-
**{'eQ': self._telemetry_runtime_consumer.get_events_stats('eQ')},
44-
**{'eD': self._telemetry_runtime_consumer.get_events_stats('eD')},
45-
**{'IS': self._telemetry_runtime_consumer.get_last_synchronization()},
46-
**{'t': self._telemetry_runtime_consumer.pop_tags()},
47-
**{'hE': self._telemetry_runtime_consumer.pop_http_errors()},
48-
**{'hL': self._telemetry_runtime_consumer.pop_http_latencies()},
49-
**{'aR': self._telemetry_runtime_consumer.pop_auth_rejections()},
50-
**{'tR': self._telemetry_runtime_consumer.pop_token_refreshes()},
51-
**{'sE': self._telemetry_runtime_consumer.pop_streaming_events()},
52-
**{'sL': self._telemetry_runtime_consumer.get_session_length()},
53-
**{'mE': self._telemetry_evaluation_consumer.pop_exceptions()},
54-
**{'mL': self._telemetry_evaluation_consumer.pop_latencies()},
39+
self._telemetry_api.record_stats(self._build_stats())
40+
41+
def _build_stats(self):
42+
"""Format stats to JSON."""
43+
return json.dumps({
44+
**self._telemetry_runtime_consumer.pop_formatted_stats(),
45+
**self._telemetry_evaluation_consumer.pop_formatted_stats(),
5546
**{'spC': self._split_storage.get_splits_count()},
5647
**{'seC': self._segment_storage.get_segments_count()},
5748
**{'skC': self._segment_storage.get_segments_keys_count()},
58-
}))
49+
})

0 commit comments

Comments
 (0)