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-
101use crate :: sync:: SyncType ;
112use crate :: {
123 config:: Config ,
@@ -15,20 +6,25 @@ use crate::{
156use crate :: { sync:: Synchronizer , FPConfig } ;
167use crate :: { sync:: UpdateCallback , user:: FPUser } ;
178use 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 ;
1814#[ 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;
2816#[ cfg( feature = "event_tokio" ) ]
29- use feature_probe_event_tokio:: recorder :: EventRecorder ;
17+ use feature_probe_event_tokio as event ;
3018#[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
3119use 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} ;
3228
3329#[ cfg( all( feature = "use_tokio" , feature = "realtime" ) ) ]
3430type SocketCallback = std:: pin:: Pin < Box < dyn futures_util:: Future < Output = ( ) > + Send > > ;
@@ -122,6 +118,24 @@ impl FeatureProbe {
122118 self . generic_detail ( toggle, user, default, Some )
123119 }
124120
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+
125139 pub fn new_with ( server_key : String , repo : Repository ) -> Self {
126140 Self {
127141 config : Config {
@@ -198,26 +212,39 @@ impl FeatureProbe {
198212 . toggles
199213 . get ( toggle)
200214 . 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+ } ;
202219 #[ cfg( any( feature = "event" , feature = "event_tokio" ) ) ]
203- self . record_detail ( toggle, & detail) ;
204-
220+ self . record_detail ( toggle, user, track_access_events, & detail) ;
205221 detail
206222 }
207223
208224 #[ 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 < ( ) > {
210232 let recorder = self . event_recorder . as_ref ( ) ?;
211233 let detail = detail. as_ref ( ) ?;
212234 let value = detail. value . as_ref ( ) ?;
213- recorder. record_access ( AccessEvent {
235+ let event = AccessEvent {
236+ kind : "access" . to_string ( ) ,
214237 time : unix_timestamp ( ) ,
215238 key : toggle. to_owned ( ) ,
239+ user : user. key ( ) ,
216240 value : value. clone ( ) ,
217- index : detail. variation_index ,
241+ variation_index : detail. variation_index . unwrap ( ) ,
218242 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) ) ;
221248 None
222249 }
223250
0 commit comments