@@ -68,7 +68,7 @@ def make_output_events(self, events, summary):
68
68
def make_output_event (self , e ):
69
69
kind = e ['kind' ]
70
70
if kind == 'feature' :
71
- is_debug = ( not e [ 'trackEvents' ]) and ( e .get ('debugEventsUntilDate' ) is not None )
71
+ is_debug = e .get ('debug' )
72
72
out = {
73
73
'kind' : 'debug' if is_debug else 'feature' ,
74
74
'creationDate' : e ['creationDate' ],
@@ -78,7 +78,7 @@ def make_output_event(self, e):
78
78
'default' : e .get ('default' ),
79
79
'prereqOf' : e .get ('prereqOf' )
80
80
}
81
- if self ._inline_users :
81
+ if self ._inline_users or is_debug :
82
82
out ['user' ] = self ._user_filter .filter_user_props (e ['user' ])
83
83
else :
84
84
out ['userKey' ] = e ['user' ].get ('key' )
@@ -261,21 +261,37 @@ def _process_event(self, event):
261
261
if self ._disabled :
262
262
return
263
263
264
- # For each user we haven't seen before, we add an index event - unless this is already
265
- # an identify event for that user.
266
- user = event .get ('user' )
267
- if not self ._config .inline_users_in_events and user and not self .notice_user (user ):
268
- if event ['kind' ] != 'identify' :
269
- ie = { 'kind' : 'index' , 'creationDate' : event ['creationDate' ], 'user' : user }
270
- self ._buffer .add_event (ie )
271
-
272
264
# Always record the event in the summarizer.
273
265
self ._buffer .add_to_summary (event )
274
266
275
- if self ._should_track_full_event (event ):
276
- # Queue the event as-is; we'll transform it into an output event when we're flushing
277
- # (to avoid doing that work on our main thread).
267
+ # Decide whether to add the event to the payload. Feature events may be added twice, once for
268
+ # the event (if tracked) and once for debugging.
269
+ add_full_event = False
270
+ add_debug_event = False
271
+ add_index_event = False
272
+ if event ['kind' ] == "feature" :
273
+ add_full_event = event ['trackEvents' ]
274
+ add_debug_event = self ._should_debug_event (event )
275
+ else :
276
+ add_full_event = True
277
+
278
+ # For each user we haven't seen before, we add an index event - unless this is already
279
+ # an identify event for that user.
280
+ if not (add_full_event and self ._config .inline_users_in_events ):
281
+ user = event .get ('user' )
282
+ if user and not self .notice_user (user ):
283
+ if event ['kind' ] != 'identify' :
284
+ add_index_event = True
285
+
286
+ if add_index_event :
287
+ ie = { 'kind' : 'index' , 'creationDate' : event ['creationDate' ], 'user' : user }
288
+ self ._buffer .add_event (ie )
289
+ if add_full_event :
278
290
self ._buffer .add_event (event )
291
+ if add_debug_event :
292
+ debug_event = event .copy ()
293
+ debug_event ['debug' ] = True
294
+ self ._buffer .add_event (debug_event )
279
295
280
296
# Add to the set of users we've noticed, and return true if the user was already known to us.
281
297
def notice_user (self , user ):
@@ -288,19 +304,14 @@ def notice_user(self, user):
288
304
self ._user_keys [key ] = True
289
305
return False
290
306
291
- def _should_track_full_event (self , event ):
292
- if event ['kind' ] == 'feature' :
293
- if event .get ('trackEvents' ):
307
+ def _should_debug_event (self , event ):
308
+ debug_until = event .get ('debugEventsUntilDate' )
309
+ if debug_until is not None :
310
+ last_past = self ._last_known_past_time
311
+ now = int (time .time () * 1000 )
312
+ if debug_until > last_past and debug_until > now :
294
313
return True
295
- debug_until = event .get ('debugEventsUntilDate' )
296
- if debug_until is not None :
297
- last_past = self ._last_known_past_time
298
- now = int (time .time () * 1000 )
299
- if debug_until > last_past and debug_until > now :
300
- return True
301
- return False
302
- else :
303
- return True
314
+ return False
304
315
305
316
def _trigger_flush (self ):
306
317
if self ._disabled :
0 commit comments