Skip to content

Commit 83a12da

Browse files
committed
Refactor telemetry constants
1 parent fefe620 commit 83a12da

27 files changed

+346
-332
lines changed

splitio/api/auth.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import json
55

66
from splitio.api import APIException
7-
from splitio.api.commons import headers_from_metadata, record_telemetry, get_current_epoch_time
7+
from splitio.api.commons import headers_from_metadata, record_telemetry
8+
from splitio.util.time import get_current_epoch_time
89
from splitio.api.client import HttpClientException
910
from splitio.models.token import from_raw
1011
from splitio.models.telemetry import HTTPExceptionsAndLatencies
@@ -46,7 +47,7 @@ def authenticate(self):
4647
self._apikey,
4748
extra_headers=self._metadata,
4849
)
49-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TOKEN.value, self._telemetry_runtime_producer)
50+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TOKEN, self._telemetry_runtime_producer)
5051
if 200 <= response.status_code < 300:
5152
payload = json.loads(response.body)
5253
return from_raw(payload)

splitio/api/commons.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Commons module."""
2-
import time
2+
from splitio.util.time import get_current_epoch_time
33

44
_CACHE_CONTROL = 'Cache-Control'
55
_CACHE_CONTROL_NO_CACHE = 'no-cache'
@@ -113,13 +113,4 @@ def build_fetch(change_number, fetch_options, metadata):
113113
extra_headers[_CACHE_CONTROL] = _CACHE_CONTROL_NO_CACHE
114114
if fetch_options.change_number is not None:
115115
query['till'] = fetch_options.change_number
116-
return query, extra_headers
117-
118-
def get_current_epoch_time():
119-
"""
120-
Get current epoch time in milliseconds
121-
122-
:return: epoch time
123-
:rtype: int
124-
"""
125-
return int(round(time.time() * 1000))
116+
return query, extra_headers

splitio/api/events.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
from splitio.api import APIException
66
from splitio.api.client import HttpClientException
7-
from splitio.api.commons import headers_from_metadata, record_telemetry, get_current_epoch_time
7+
from splitio.api.commons import headers_from_metadata, record_telemetry
8+
from splitio.util.time import get_current_epoch_time
89
from splitio.models.telemetry import HTTPExceptionsAndLatencies
910

1011

@@ -73,7 +74,7 @@ def flush_events(self, events):
7374
body=bulk,
7475
extra_headers=self._metadata,
7576
)
76-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.EVENT.value, self._telemetry_runtime_producer)
77+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.EVENT, self._telemetry_runtime_producer)
7778
if not 200 <= response.status_code < 300:
7879
raise APIException(response.body, response.status_code)
7980
except HttpClientException as exc:

splitio/api/impressions.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from splitio.api import APIException
77
from splitio.api.client import HttpClientException
8-
from splitio.api.commons import headers_from_metadata, record_telemetry, get_current_epoch_time
8+
from splitio.api.commons import headers_from_metadata, record_telemetry
9+
from splitio.util.time import get_current_epoch_time
910
from splitio.engine.impressions import ImpressionsMode
1011
from splitio.models.telemetry import HTTPExceptionsAndLatencies
1112

@@ -102,7 +103,7 @@ def flush_impressions(self, impressions):
102103
body=bulk,
103104
extra_headers=self._metadata,
104105
)
105-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.IMPRESSION.value, self._telemetry_runtime_producer)
106+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.IMPRESSION, self._telemetry_runtime_producer)
106107
if not 200 <= response.status_code < 300:
107108
raise APIException(response.body, response.status_code)
108109
except HttpClientException as exc:
@@ -129,7 +130,7 @@ def flush_counters(self, counters):
129130
body=bulk,
130131
extra_headers=self._metadata,
131132
)
132-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.IMPRESSION_COUNT.value, self._telemetry_runtime_producer)
133+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.IMPRESSION_COUNT, self._telemetry_runtime_producer)
133134
if not 200 <= response.status_code < 300:
134135
raise APIException(response.body, response.status_code)
135136
except HttpClientException as exc:

splitio/api/segments.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import time
66

77
from splitio.api import APIException
8-
from splitio.api.commons import headers_from_metadata, build_fetch, record_telemetry, get_current_epoch_time
8+
from splitio.api.commons import headers_from_metadata, build_fetch, record_telemetry
9+
from splitio.util.time import get_current_epoch_time
910
from splitio.api.client import HttpClientException
1011
from splitio.models.telemetry import HTTPExceptionsAndLatencies
1112

@@ -59,7 +60,7 @@ def fetch_segment(self, segment_name, change_number, fetch_options):
5960
extra_headers=extra_headers,
6061
query=query,
6162
)
62-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.SEGMENT.value, self._telemetry_runtime_producer)
63+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.SEGMENT, self._telemetry_runtime_producer)
6364
if 200 <= response.status_code < 300:
6465
return json.loads(response.body)
6566
else:

splitio/api/splits.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import time
66

77
from splitio.api import APIException
8-
from splitio.api.commons import headers_from_metadata, build_fetch, record_telemetry, get_current_epoch_time
8+
from splitio.api.commons import headers_from_metadata, build_fetch, record_telemetry
9+
from splitio.util.time import get_current_epoch_time
910
from splitio.api.client import HttpClientException
1011
from splitio.models.telemetry import HTTPExceptionsAndLatencies
1112

@@ -54,7 +55,7 @@ def fetch_splits(self, change_number, fetch_options):
5455
extra_headers=extra_headers,
5556
query=query,
5657
)
57-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.SPLIT.value, self._telemetry_runtime_producer)
58+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.SPLIT, self._telemetry_runtime_producer)
5859
if 200 <= response.status_code < 300:
5960
return json.loads(response.body)
6061
else:

splitio/api/telemetry.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
from splitio.api import APIException
66
from splitio.api.client import HttpClientException
7-
from splitio.api.commons import headers_from_metadata, record_telemetry, get_current_epoch_time
7+
from splitio.api.commons import headers_from_metadata, record_telemetry
8+
from splitio.util.time import get_current_epoch_time
89
from splitio.models.telemetry import HTTPExceptionsAndLatencies
910

1011
_LOGGER = logging.getLogger(__name__)
@@ -42,7 +43,7 @@ def record_unique_keys(self, uniques):
4243
body=uniques,
4344
extra_headers=self._metadata
4445
)
45-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY.value, self._telemetry_runtime_producer)
46+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY, self._telemetry_runtime_producer)
4647
if not 200 <= response.status_code < 300:
4748
raise APIException(response.body, response.status_code)
4849
except HttpClientException as exc:
@@ -68,7 +69,7 @@ def record_init(self, configs):
6869
body=configs,
6970
extra_headers=self._metadata,
7071
)
71-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY.value, self._telemetry_runtime_producer)
72+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY, self._telemetry_runtime_producer)
7273
if not 200 <= response.status_code < 300:
7374
raise APIException(response.body, response.status_code)
7475
except HttpClientException as exc:
@@ -94,7 +95,7 @@ def record_stats(self, stats):
9495
body=stats,
9596
extra_headers=self._metadata,
9697
)
97-
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY.value, self._telemetry_runtime_producer)
98+
record_telemetry(response.status_code, get_current_epoch_time() - start, HTTPExceptionsAndLatencies.TELEMETRY, self._telemetry_runtime_producer)
9899
if not 200 <= response.status_code < 300:
99100
raise APIException(response.body, response.status_code)
100101
except HttpClientException as exc:

splitio/client/client.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
from splitio.models.events import Event, EventWrapper
88
from splitio.models.telemetry import get_latency_bucket_index, MethodExceptionsAndLatencies
99
from splitio.client import input_validator
10-
from splitio.util import utctime_ms
11-
from splitio.api.commons import get_current_epoch_time
10+
from splitio.util.time import get_current_epoch_time, utctime_ms
1211

1312
_LOGGER = logging.getLogger(__name__)
1413

@@ -124,7 +123,7 @@ def _make_evaluation(self, key, feature, attributes, method_name, metric_name):
124123
except Exception: # pylint: disable=broad-except
125124
_LOGGER.error('Error getting treatment for feature')
126125
_LOGGER.debug('Error: ', exc_info=True)
127-
self._telemetry_evaluation_producer.record_exception(method_name[4:])
126+
self._telemetry_evaluation_producer.record_exception(self._get_method_constant(method_name[4:]))
128127
try:
129128
impression = self._build_impression(
130129
matching_key,
@@ -207,12 +206,12 @@ def _make_evaluations(self, key, features, attributes, method_name, metric_name)
207206
_LOGGER.error('%s: An exception when trying to store '
208207
'impressions.' % method_name)
209208
_LOGGER.debug('Error: ', exc_info=True)
210-
self._telemetry_evaluation_producer.record_exception(method_name[4:])
209+
self._telemetry_evaluation_producer.record_exception(self._get_method_constant(method_name[4:]))
211210

212-
self._telemetry_evaluation_producer.record_latency(method_name[4:], get_current_epoch_time() - start)
211+
self._telemetry_evaluation_producer.record_latency(self._get_method_constant(method_name[4:]), get_current_epoch_time() - start)
213212
return treatments
214213
except Exception: # pylint: disable=broad-except
215-
self._telemetry_evaluation_producer.record_exception(method_name[4:])
214+
self._telemetry_evaluation_producer.record_exception(self._get_method_constant(method_name[4:]))
216215
_LOGGER.error('Error getting treatment for features')
217216
_LOGGER.debug('Error: ', exc_info=True)
218217
return input_validator.generate_control_treatments(list(features), method_name)
@@ -350,8 +349,8 @@ def _record_stats(self, impressions, start, operation, method_name=None):
350349
end = get_current_epoch_time()
351350
self._recorder.record_treatment_stats(impressions, get_latency_bucket_index(end - start),
352351
operation)
353-
if not method_name == None:
354-
self._telemetry_evaluation_producer.record_latency(method_name[4:], end - start)
352+
if method_name is not None:
353+
self._telemetry_evaluation_producer.record_latency(self._get_method_constant(method_name[4:]), end - start)
355354

356355

357356
def track(self, key, traffic_type, event_type, value=None, properties=None):
@@ -413,10 +412,20 @@ def track(self, key, traffic_type, event_type, value=None, properties=None):
413412
event=event,
414413
size=size,
415414
)])
416-
self._telemetry_evaluation_producer.record_latency(MethodExceptionsAndLatencies.TRACK.value, get_current_epoch_time() - start)
415+
self._telemetry_evaluation_producer.record_latency(MethodExceptionsAndLatencies.TRACK, get_current_epoch_time() - start)
416+
return return_flag
417417
except Exception: # pylint: disable=broad-except
418-
self._telemetry_evaluation_producer.record_exception(MethodExceptionsAndLatencies.TRACK.value)
418+
self._telemetry_evaluation_producer.record_exception(MethodExceptionsAndLatencies.TRACK)
419419
_LOGGER.error('Error processing track event')
420420
_LOGGER.debug('Error: ', exc_info=True)
421+
return False
421422

422-
return return_flag
423+
def _get_method_constant(self, method):
424+
if method == 'treatment':
425+
return MethodExceptionsAndLatencies.TREATMENT
426+
elif method == 'treatments':
427+
return MethodExceptionsAndLatencies.TREATMENTS
428+
elif method == 'treatment_with_config':
429+
return MethodExceptionsAndLatencies.TREATMENT_WITH_CONFIG
430+
elif method == 'treatments_with_config':
431+
return MethodExceptionsAndLatencies.TREATMENTS_WITH_CONFIG

splitio/client/factory.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from splitio.api.events import EventsAPI
3434
from splitio.api.auth import AuthAPI
3535
from splitio.api.telemetry import TelemetryAPI, LocalhostTelemetryAPI
36-
from splitio.api.commons import get_current_epoch_time
36+
from splitio.util.time import get_current_epoch_time
3737

3838
# Tasks
3939
from splitio.tasks.split_sync import SplitSynchronizationTask
@@ -511,7 +511,7 @@ def _build_localhost_factory(cfg):
511511
telemetry_storage = LocalhostTelemetryStorage()
512512
telemetry_producer = TelemetryStorageProducer(telemetry_storage)
513513
telemetry_consumer = TelemetryStorageConsumer(telemetry_storage)
514-
telemetry_runtime_producer=telemetry_producer.get_telemetry_runtime_producer()
514+
telemetry_runtime_producer = telemetry_producer.get_telemetry_runtime_producer()
515515

516516
storages = {
517517
'splits': InMemorySplitStorage(),
@@ -535,7 +535,7 @@ def _build_localhost_factory(cfg):
535535
sdk_metadata = util.get_metadata(cfg)
536536
ready_event = threading.Event()
537537
synchronizer = LocalhostSynchronizer(synchronizers, tasks)
538-
manager = Manager(ready_event, synchronizer, None, False, sdk_metadata)
538+
manager = Manager(ready_event, synchronizer, None, False, sdk_metadata, telemetry_runtime_producer)
539539
manager.start()
540540
recorder = StandardRecorder(
541541
ImpressionsManager(StrategyDebugMode(), telemetry_runtime_producer),

splitio/engine/impressions/impressions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from enum import Enum
33

44
from splitio.client.listener import ImpressionListenerException
5+
from splitio.models import telemetry
56

67
class ImpressionsMode(Enum):
78
"""Impressions tracking mode."""
@@ -39,7 +40,7 @@ def process_impressions(self, impressions):
3940
"""
4041
for_log, for_listener = self._strategy.process_impressions(impressions)
4142
if len(impressions) > len(for_log):
42-
self._telemetry_runtime_producer.record_impression_stats('impressionsDeduped', len(impressions) - len(for_log))
43+
self._telemetry_runtime_producer.record_impression_stats(telemetry.CounterConstants.IMPRESSIONS_DEDUPED, len(impressions) - len(for_log))
4344
self._send_impressions_to_listener(for_listener)
4445
return for_log
4546

0 commit comments

Comments
 (0)