Skip to content

Commit b9f04a8

Browse files
committed
Telemetry producer refactor
1 parent e9b0be6 commit b9f04a8

File tree

4 files changed

+58
-22
lines changed

4 files changed

+58
-22
lines changed

splitio/client/factory.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from splitio.engine.impressions.manager import Counter as ImpressionsCounter
1717
from splitio.engine.impressions.strategies import StrategyNoneMode, StrategyDebugMode, StrategyOptimizedMode
1818
from splitio.engine.impressions.adapters import InMemorySenderAdapter, RedisSenderAdapter
19-
from splitio.engine.telemetry import TelemetryStorageProducer, TelemetryStorageConsumer
19+
from splitio.engine.telemetry import TelemetryStorageProducer, TelemetryStorageConsumer, RedisTelemetryInitProducer, RedisTelemetryStorageProducer
2020

2121
# Storage
2222
from splitio.storage.inmemmory import InMemorySplitStorage, InMemorySegmentStorage, \
@@ -161,7 +161,7 @@ def _update_redis_init(self):
161161
"""Push Config Telemetry into redis storage"""
162162
redundant_factory_count, active_factory_count = _get_active_and_redundant_count()
163163
self._telemetry_init_producer.record_active_and_redundant_factories(active_factory_count, redundant_factory_count)
164-
self._telemetry_init_producer.get_telemetry_storage().push_config_stats()
164+
self._telemetry_init_producer.push_config()
165165

166166
def _update_status_when_ready(self):
167167
"""Wait until the sdk is ready and update the status."""
@@ -449,7 +449,7 @@ def _build_redis_factory(api_key, cfg):
449449
cache_enabled = cfg.get('redisLocalCacheEnabled', False)
450450
cache_ttl = cfg.get('redisLocalCacheTTL', 5)
451451
telemetry_storage = RedisTelemetryStorage(redis_adapter, sdk_metadata)
452-
telemetry_producer = TelemetryStorageProducer(telemetry_storage)
452+
telemetry_producer = RedisTelemetryStorageProducer(telemetry_storage)
453453
telemetry_consumer = TelemetryStorageConsumer(telemetry_storage)
454454
telemetry_runtime_producer = telemetry_producer.get_telemetry_runtime_producer()
455455
storages = {

splitio/engine/telemetry.py

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ def record_not_ready_usage(self):
5151
def record_active_and_redundant_factories(self, active_factory_count, redundant_factory_count):
5252
self._telemetry_storage.record_active_and_redundant_factories(active_factory_count, redundant_factory_count)
5353

54-
def get_telemetry_storage(self):
55-
return self._telemetry_storage
56-
5754
class TelemetryEvaluationProducer(object):
5855
"""Telemetry evaluation producer class."""
5956

@@ -295,3 +292,54 @@ def pop_formatted_stats(self):
295292
} for event in self.pop_streaming_events()['streamingEvents']],
296293
'sL': self.get_session_length()
297294
}
295+
296+
class RedisTelemetryStorageProducer(object):
297+
"""Telemetry storage producer class."""
298+
299+
def __init__(self, telemetry_storage):
300+
"""Initialize all producer classes."""
301+
self._telemetry_init_producer = RedisTelemetryInitProducer(telemetry_storage)
302+
self._telemetry_evaluation_producer = TelemetryEvaluationProducer(telemetry_storage)
303+
self._telemetry_runtime_producer = TelemetryRuntimeProducer(telemetry_storage)
304+
305+
def get_telemetry_init_producer(self):
306+
"""get init producer instance."""
307+
return self._telemetry_init_producer
308+
309+
def get_telemetry_evaluation_producer(self):
310+
"""get evaluation producer instance."""
311+
return self._telemetry_evaluation_producer
312+
313+
def get_telemetry_runtime_producer(self):
314+
"""get runtime producer instance."""
315+
return self._telemetry_runtime_producer
316+
317+
class RedisTelemetryInitProducer(object):
318+
"""Telemetry init producer class."""
319+
320+
def __init__(self, telemetry_storage):
321+
"""Constructor."""
322+
self._telemetry_storage = telemetry_storage
323+
324+
def record_config(self, config, extra_config):
325+
"""Record configurations."""
326+
self._telemetry_storage.record_config(config, extra_config)
327+
328+
def push_config(self):
329+
"""Record configurations."""
330+
self._telemetry_storage.push_config_stats()
331+
332+
def record_ready_time(self, ready_time):
333+
"""Record ready time."""
334+
pass
335+
336+
def record_bur_time_out(self):
337+
"""Record block until ready timeout."""
338+
pass
339+
340+
def record_not_ready_usage(self):
341+
"""record non-ready usage."""
342+
pass
343+
344+
def record_active_and_redundant_factories(self, active_factory_count, redundant_factory_count):
345+
self._telemetry_storage.record_active_and_redundant_factories(active_factory_count, redundant_factory_count)

splitio/storage/adapters/redis.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
"""Redis client wrapper with prefix support."""
22
from builtins import str
33

4-
import logging
5-
_LOGGER = logging.getLogger(__name__)
6-
74
from splitio.version import __version__
8-
from splitio.util.host_info import get_ip, get_hostname
95

106
try:
117
from redis import StrictRedis
@@ -20,8 +16,6 @@ def missing_redis_dependencies(*_, **__):
2016
)
2117
StrictRedis = Sentinel = missing_redis_dependencies
2218

23-
TELEMETRY_CONFIG_KEY = 'SPLITIO.telemetry.init'
24-
2519
class RedisAdapterException(Exception):
2620
"""Exception to be thrown when a redis command fails with an exception."""
2721

@@ -311,15 +305,6 @@ def pipeline(self):
311305
except RedisError as exc:
312306
raise RedisAdapterException('Error executing ttl operation') from exc
313307

314-
def record_init(self, *values):
315-
"""Write config init values to redis."""
316-
try:
317-
host_ip = get_ip()
318-
host_name = get_hostname()
319-
return self.hset(TELEMETRY_CONFIG_KEY, 'python-' + __version__ + '/' + host_name+ '/' + host_ip, str(*values))
320-
except RedisError as exc:
321-
raise RedisAdapterException('Error pushing telemetry config operation') from exc
322-
323308
class RedisPipelineAdapter(object):
324309
"""
325310
Instance decorator for Redis Pipeline.

splitio/storage/redis.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ def expire_keys(self, total_keys, inserted):
583583
class RedisTelemetryStorage(TelemetryStorage):
584584
"""Redis based telemetry storage class."""
585585

586+
_TELEMETRY_CONFIG_KEY = 'SPLITIO.telemetry.init'
586587
_TELEMETRY_LATENCIES_KEY = 'SPLITIO.telemetry.latencies'
587588
_TELEMETRY_EXCEPTIONS_KEY = 'SPLITIO.telemetry.exceptions'
588589
_TELEMETRY_KEY_DEFAULT_TTL = 3600
@@ -616,7 +617,9 @@ def record_config(self, config, extra_config):
616617

617618
def push_config_stats(self):
618619
"""push config stats to redis."""
619-
self._redis_client.record_init(self._format_config_stats())
620+
host_ip = get_ip()
621+
host_name = get_hostname()
622+
self._redis_client.hset(self._TELEMETRY_CONFIG_KEY, 'python-' + __version__ + '/' + host_name+ '/' + host_ip, str(self._format_config_stats()))
620623

621624
def _format_config_stats(self):
622625
"""format only selected config stats to json"""

0 commit comments

Comments
 (0)