11"""Stats Recorder."""
22import abc
33import logging
4+ import random
5+
6+
7+ from splitio .client .config import DEFAULT_DATA_SAMPLING
48
59
610_LOGGER = logging .getLogger (__name__ )
@@ -83,7 +87,8 @@ def record_track_stats(self, event):
8387class PipelinedRecorder (StatsRecorder ):
8488 """PipelinedRecorder class."""
8589
86- def __init__ (self , pipe , impressions_manager , event_storage , impression_storage ):
90+ def __init__ (self , pipe , impressions_manager , event_storage ,
91+ impression_storage , data_sampling = DEFAULT_DATA_SAMPLING ):
8792 """
8893 Class constructor.
8994
@@ -95,11 +100,14 @@ def __init__(self, pipe, impressions_manager, event_storage, impression_storage)
95100 :type event_storage: splitio.storage.EventStorage
96101 :param impression_storage: impression storage instance
97102 :type impression_storage: splitio.storage.redis.RedisImpressionsStorage
103+ :param data_sampling: data sampling factor
104+ :type data_sampling: number
98105 """
99106 self ._make_pipe = pipe
100107 self ._impressions_manager = impressions_manager
101108 self ._event_sotrage = event_storage
102109 self ._impression_storage = impression_storage
110+ self ._data_sampling = data_sampling
103111
104112 def record_treatment_stats (self , impressions , latency , operation ):
105113 """
@@ -113,11 +121,21 @@ def record_treatment_stats(self, impressions, latency, operation):
113121 :type operation: str
114122 """
115123 try :
124+ # TODO @matias.melograno
125+ # Changing logic until TelemetryV2 released to avoid using pipelined operations
126+ # Deprecated Old Telemetry
127+ if self ._data_sampling < DEFAULT_DATA_SAMPLING :
128+ rnumber = random .uniform (0 , 1 )
129+ if self ._data_sampling < rnumber :
130+ return
116131 impressions = self ._impressions_manager .process_impressions (impressions )
117- pipe = self ._make_pipe ()
118- self ._impression_storage .add_impressions_to_pipe (impressions , pipe )
132+ # pipe = self._make_pipe()
133+ # self._impression_storage.add_impressions_to_pipe(impressions, pipe)
119134 # self._telemetry_storage.add_latency_to_pipe(operation, latency, pipe)
120- result = pipe .execute ()
135+ # result = pipe.execute()
136+ # if len(result) == 2:
137+ # self._impression_storage.expire_key(result[0], len(impressions))
138+ result = self ._impression_storage .put (impressions )
121139 if len (result ) == 2 :
122140 self ._impression_storage .expire_key (result [0 ], len (impressions ))
123141 except Exception : # pylint: disable=broad-except
0 commit comments