@@ -158,10 +158,27 @@ def synchronize_for_testing(flush_workers)
158
158
def dispatch_event ( event , buffer )
159
159
return if @disabled . value
160
160
161
+ # Always record the event in the summary.
162
+ buffer . add_to_summary ( event )
163
+
164
+ # Decide whether to add the event to the payload. Feature events may be added twice, once for
165
+ # the event (if tracked) and once for debugging.
166
+ will_add_full_event = false
167
+ debug_event = nil
168
+ if event [ :kind ] == "feature"
169
+ will_add_full_event = event [ :trackEvents ]
170
+ if should_debug_event ( event )
171
+ debug_event = event . clone
172
+ debug_event [ :debug ] = true
173
+ end
174
+ else
175
+ will_add_full_event = true
176
+ end
177
+
161
178
# For each user we haven't seen before, we add an index event - unless this is already
162
179
# an identify event for that user.
163
- if !@config . inline_users_in_events && event . has_key? ( :user ) && ! notice_user ( event [ :user ] )
164
- if event [ :kind ] != "identify"
180
+ if !( will_add_full_event && @config . inline_users_in_events )
181
+ if event . has_key? ( :user ) && ! notice_user ( event [ :user ] ) && event [ :kind ] != "identify"
165
182
buffer . add_event ( {
166
183
kind : "index" ,
167
184
creationDate : event [ :creationDate ] ,
@@ -170,13 +187,8 @@ def dispatch_event(event, buffer)
170
187
end
171
188
end
172
189
173
- # Always record the event in the summary.
174
- buffer . add_to_summary ( event )
175
-
176
- if should_track_full_event ( event )
177
- # Queue the event as-is; we'll transform it into an output event when we're flushing.
178
- buffer . add_event ( event )
179
- end
190
+ buffer . add_event ( event ) if will_add_full_event
191
+ buffer . add_event ( debug_event ) if !debug_event . nil?
180
192
end
181
193
182
194
# Add to the set of users we've noticed, and return true if the user was already known to us.
@@ -188,21 +200,13 @@ def notice_user(user)
188
200
end
189
201
end
190
202
191
- def should_track_full_event ( event )
192
- if event [ :kind ] == "feature"
193
- if event [ :trackEvents ]
194
- true
195
- else
196
- debugUntil = event [ :debugEventsUntilDate ]
197
- if !debugUntil . nil?
198
- last_past = @last_known_past_time . value
199
- debugUntil > last_past && debugUntil > now_millis
200
- else
201
- false
202
- end
203
- end
203
+ def should_debug_event ( event )
204
+ debug_until = event [ :debugEventsUntilDate ]
205
+ if !debug_until . nil?
206
+ last_past = @last_known_past_time . value
207
+ debug_until > last_past && debug_until > now_millis
204
208
else
205
- true
209
+ false
206
210
end
207
211
end
208
212
@@ -319,7 +323,7 @@ def make_output_events(events, summary)
319
323
def make_output_event ( event )
320
324
case event [ :kind ]
321
325
when "feature"
322
- is_debug = ! event [ :trackEvents ] && event . has_key? ( :debugEventsUntilDate )
326
+ is_debug = event [ :debug ]
323
327
out = {
324
328
kind : is_debug ? "debug" : "feature" ,
325
329
creationDate : event [ :creationDate ] ,
@@ -329,7 +333,7 @@ def make_output_event(event)
329
333
out [ :default ] = event [ :default ] if event . has_key? ( :default )
330
334
out [ :version ] = event [ :version ] if event . has_key? ( :version )
331
335
out [ :prereqOf ] = event [ :prereqOf ] if event . has_key? ( :prereqOf )
332
- if @inline_users
336
+ if @inline_users || is_debug
333
337
out [ :user ] = @user_filter . transform_user_props ( event [ :user ] )
334
338
else
335
339
out [ :userKey ] = event [ :user ] [ :key ]
0 commit comments