@@ -158,10 +158,27 @@ def synchronize_for_testing(flush_workers)
158158 def dispatch_event ( event , buffer )
159159 return if @disabled . value
160160
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+
161178 # For each user we haven't seen before, we add an index event - unless this is already
162179 # 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"
165182 buffer . add_event ( {
166183 kind : "index" ,
167184 creationDate : event [ :creationDate ] ,
@@ -170,13 +187,8 @@ def dispatch_event(event, buffer)
170187 end
171188 end
172189
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?
180192 end
181193
182194 # 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)
188200 end
189201 end
190202
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
204208 else
205- true
209+ false
206210 end
207211 end
208212
@@ -319,7 +323,7 @@ def make_output_events(events, summary)
319323 def make_output_event ( event )
320324 case event [ :kind ]
321325 when "feature"
322- is_debug = ! event [ :trackEvents ] && event . has_key? ( :debugEventsUntilDate )
326+ is_debug = event [ :debug ]
323327 out = {
324328 kind : is_debug ? "debug" : "feature" ,
325329 creationDate : event [ :creationDate ] ,
@@ -329,7 +333,7 @@ def make_output_event(event)
329333 out [ :default ] = event [ :default ] if event . has_key? ( :default )
330334 out [ :version ] = event [ :version ] if event . has_key? ( :version )
331335 out [ :prereqOf ] = event [ :prereqOf ] if event . has_key? ( :prereqOf )
332- if @inline_users
336+ if @inline_users || is_debug
333337 out [ :user ] = @user_filter . transform_user_props ( event [ :user ] )
334338 else
335339 out [ :userKey ] = event [ :user ] [ :key ]
0 commit comments