|
12 | 12 | # See the License for the specific language governing permissions and |
13 | 13 | # limitations under the License. |
14 | 14 |
|
| 15 | +from typing import Optional |
15 | 16 | import logging |
16 | 17 | import time |
17 | 18 | from threading import Event |
|
20 | 21 | from featureprobe.config import Config |
21 | 22 | from featureprobe.context import Context |
22 | 23 | from featureprobe.detail import Detail |
23 | | -from featureprobe.event import AccessEvent |
| 24 | +from featureprobe.event import AccessEvent, CustomEvent |
24 | 25 | from featureprobe.internal.empty_str import empty_str |
25 | 26 | from featureprobe.user import User |
26 | 27 |
|
@@ -105,12 +106,17 @@ def value(self, toggle_key: str, user: User, default) -> Any: |
105 | 106 | return default |
106 | 107 |
|
107 | 108 | eval_result = toggle.eval(user, segments, default) |
108 | | - access_event = AccessEvent(timestamp=int(time.time() * 1000), |
109 | | - user=user, |
110 | | - key=toggle_key, |
111 | | - value=str(eval_result.value), |
112 | | - version=eval_result.version, |
113 | | - index=eval_result.variation_index) |
| 109 | + access_event = AccessEvent( |
| 110 | + timestamp=int( |
| 111 | + time.time() * 1000), |
| 112 | + user=user, |
| 113 | + key=toggle_key, |
| 114 | + value=eval_result.value, |
| 115 | + version=eval_result.version, |
| 116 | + variation_index=eval_result.variation_index, |
| 117 | + rule_index=eval_result.rule_index, |
| 118 | + reason=eval_result.reason, |
| 119 | + track_access_events=toggle.track_access_events) |
114 | 120 | self._event_processor.push(access_event) |
115 | 121 | return eval_result.value |
116 | 122 |
|
@@ -140,11 +146,35 @@ def value_detail(self, toggle_key: str, user: User, default) -> Detail: |
140 | 146 | reason=eval_result.reason, |
141 | 147 | rule_index=eval_result.rule_index, |
142 | 148 | version=eval_result.version) |
143 | | - access_event = AccessEvent(timestamp=int(time.time() * 1000), |
144 | | - user=user, |
145 | | - key=toggle_key, |
146 | | - value=eval_result.value, |
147 | | - version=eval_result.version, |
148 | | - index=eval_result.variation_index) |
| 149 | + access_event = AccessEvent( |
| 150 | + timestamp=int( |
| 151 | + time.time() * 1000), |
| 152 | + user=user, |
| 153 | + key=toggle_key, |
| 154 | + value=eval_result.value, |
| 155 | + version=eval_result.version, |
| 156 | + variation_index=eval_result.variation_index, |
| 157 | + rule_index=eval_result.rule_index, |
| 158 | + reason=eval_result.reason, |
| 159 | + track_access_events=toggle.track_access_events) |
149 | 160 | self._event_processor.push(access_event) |
150 | 161 | return detail |
| 162 | + |
| 163 | + def track( |
| 164 | + self, |
| 165 | + event_name: str, |
| 166 | + user: User, |
| 167 | + value: Optional[float] = None): |
| 168 | + """Tracks that a custom defined event |
| 169 | +
|
| 170 | + :param event_name: the name of the event. |
| 171 | + :param user: :obj:`~featureprobe.User` to be evaluated. |
| 172 | + :param value: a numeric value(Optional). |
| 173 | + """ |
| 174 | + self._event_processor.push( |
| 175 | + CustomEvent( |
| 176 | + timestamp=int( |
| 177 | + time.time() * 1000), |
| 178 | + name=event_name, |
| 179 | + user=user, |
| 180 | + value=value)) |
0 commit comments