1
- use parking_lot:: RwLock ;
2
- use serde_json:: Value ;
3
- #[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
4
- use socketio_rs:: Client ;
5
- use std:: collections:: HashMap ;
6
- use std:: fmt:: Debug ;
7
- use std:: sync:: Arc ;
8
- use tracing:: trace;
9
-
10
1
use crate :: sync:: SyncType ;
11
2
use crate :: {
12
3
config:: Config ,
@@ -15,20 +6,25 @@ use crate::{
15
6
use crate :: { sync:: Synchronizer , FPConfig } ;
16
7
use crate :: { sync:: UpdateCallback , user:: FPUser } ;
17
8
use crate :: { FPDetail , SdkAuthorization , Toggle } ;
9
+ use event:: event:: AccessEvent ;
10
+ use event:: event:: CustomEvent ;
11
+ use event:: event:: Event ;
12
+ use event:: recorder:: unix_timestamp;
13
+ use event:: recorder:: EventRecorder ;
18
14
#[ cfg( feature = "event" ) ]
19
- use feature_probe_event_std:: event:: AccessEvent ;
20
- #[ cfg( feature = "event" ) ]
21
- use feature_probe_event_std:: recorder:: unix_timestamp;
22
- #[ cfg( feature = "event" ) ]
23
- use feature_probe_event_std:: recorder:: EventRecorder ;
24
- #[ cfg( feature = "event_tokio" ) ]
25
- use feature_probe_event_tokio:: event:: AccessEvent ;
26
- #[ cfg( feature = "event_tokio" ) ]
27
- use feature_probe_event_tokio:: recorder:: unix_timestamp;
15
+ use feature_probe_event_std as event;
28
16
#[ cfg( feature = "event_tokio" ) ]
29
- use feature_probe_event_tokio:: recorder :: EventRecorder ;
17
+ use feature_probe_event_tokio as event ;
30
18
#[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
31
19
use futures_util:: FutureExt ;
20
+ use parking_lot:: RwLock ;
21
+ use serde_json:: Value ;
22
+ #[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
23
+ use socketio_rs:: Client ;
24
+ use std:: collections:: HashMap ;
25
+ use std:: fmt:: Debug ;
26
+ use std:: sync:: Arc ;
27
+ use tracing:: { trace, warn} ;
32
28
33
29
#[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
34
30
type SocketCallback = std:: pin:: Pin < Box < dyn futures_util:: Future < Output = ( ) > + Send > > ;
@@ -122,6 +118,24 @@ impl FeatureProbe {
122
118
self . generic_detail ( toggle, user, default, Some )
123
119
}
124
120
121
+ pub fn track ( & self , event_name : & str , user : & FPUser , value : Option < f64 > ) {
122
+ let recorder = match self . event_recorder . as_ref ( ) {
123
+ None => {
124
+ warn ! ( "Event Recorder no ready." ) ;
125
+ return ;
126
+ }
127
+ Some ( recorder) => recorder,
128
+ } ;
129
+ let event = CustomEvent {
130
+ kind : "custom" . to_string ( ) ,
131
+ time : unix_timestamp ( ) ,
132
+ user : user. key ( ) ,
133
+ name : event_name. to_string ( ) ,
134
+ value,
135
+ } ;
136
+ recorder. record_event ( Event :: CustomEvent ( event) ) ;
137
+ }
138
+
125
139
pub fn new_with ( server_key : String , repo : Repository ) -> Self {
126
140
Self {
127
141
config : Config {
@@ -198,26 +212,39 @@ impl FeatureProbe {
198
212
. toggles
199
213
. get ( toggle)
200
214
. map ( |toggle| toggle. eval_detail ( user, & repo. segments ) ) ;
201
-
215
+ let track_access_events = match repo. toggles . get ( toggle) {
216
+ Some ( toggle) => toggle. track_access_events ( ) ,
217
+ None => false ,
218
+ } ;
202
219
#[ cfg( any( feature = "event" , feature = "event_tokio" ) ) ]
203
- self . record_detail ( toggle, & detail) ;
204
-
220
+ self . record_detail ( toggle, user, track_access_events, & detail) ;
205
221
detail
206
222
}
207
223
208
224
#[ cfg( any( feature = "event" , feature = "event_tokio" ) ) ]
209
- fn record_detail ( & self , toggle : & str , detail : & Option < EvalDetail < Value > > ) -> Option < ( ) > {
225
+ fn record_detail (
226
+ & self ,
227
+ toggle : & str ,
228
+ user : & FPUser ,
229
+ track_access_events : bool ,
230
+ detail : & Option < EvalDetail < Value > > ,
231
+ ) -> Option < ( ) > {
210
232
let recorder = self . event_recorder . as_ref ( ) ?;
211
233
let detail = detail. as_ref ( ) ?;
212
234
let value = detail. value . as_ref ( ) ?;
213
- recorder. record_access ( AccessEvent {
235
+ let event = AccessEvent {
236
+ kind : "access" . to_string ( ) ,
214
237
time : unix_timestamp ( ) ,
215
238
key : toggle. to_owned ( ) ,
239
+ user : user. key ( ) ,
216
240
value : value. clone ( ) ,
217
- index : detail. variation_index ,
241
+ variation_index : detail. variation_index . unwrap ( ) ,
218
242
version : detail. version ,
219
- reason : detail. reason . clone ( ) ,
220
- } ) ;
243
+ rule_index : detail. rule_index ,
244
+ reason : Some ( detail. reason . to_string ( ) ) ,
245
+ track_access_events,
246
+ } ;
247
+ recorder. record_event ( Event :: AccessEvent ( event) ) ;
221
248
None
222
249
}
223
250
0 commit comments