@@ -18,19 +18,16 @@ def initialize(config,
1818 @unique_keys_tracker = unique_keys_tracker
1919 end
2020
21- def build_impression ( matching_key , bucketing_key , split_name , treatment , params = { } )
21+ def build_impression ( matching_key , bucketing_key , split_name , treatment , impressions_disabled , params = { } )
2222 impression_data = impression_data ( matching_key , bucketing_key , split_name , treatment , params [ :time ] )
23-
2423 begin
25- case @config . impressions_mode
26- when :debug # In DEBUG mode we should calculate the pt only.
27- impression_data [ :pt ] = @impression_observer . test_and_set ( impression_data )
28- when :none # In NONE mode we should track the total amount of evaluations and the unique keys.
24+ if @config . impressions_mode == :none || impressions_disabled # In NONE mode we should track the total amount of evaluations and the unique keys.
2925 @impression_counter . inc ( split_name , impression_data [ :m ] )
3026 @unique_keys_tracker . track ( split_name , matching_key )
27+ elsif @config . impressions_mode == :debug # In DEBUG mode we should calculate the pt only.
28+ impression_data [ :pt ] = @impression_observer . test_and_set ( impression_data )
3129 else # In OPTIMIZED mode we should track the total amount of evaluations and deduplicate the impressions.
3230 impression_data [ :pt ] = @impression_observer . test_and_set ( impression_data )
33-
3431 @impression_counter . inc ( split_name , impression_data [ :m ] ) unless impression_data [ :pt ] . nil?
3532 end
3633 rescue StandardError => e
@@ -40,24 +37,25 @@ def build_impression(matching_key, bucketing_key, split_name, treatment, params
4037 impression ( impression_data , params [ :attributes ] )
4138 end
4239
43- def track ( impressions )
44- return if impressions . empty?
45-
46- stats = { dropped : 0 , queued : 0 , dedupe : 0 }
47- begin
48- case @config . impressions_mode
49- when :none
50- return
51- when :debug
52- track_debug_mode ( impressions , stats )
53- when :optimized
54- track_optimized_mode ( impressions , stats )
40+ def track ( impressions_decorator )
41+ return if impressions_decorator . empty?
42+
43+ impressions_decorator . each do |impression_decorator |
44+ stats = { dropped : 0 , queued : 0 , dedupe : 0 }
45+ begin
46+ if @config . impressions_mode == :none || impression_decorator [ :disabled ]
47+ return
48+ elsif @config . impressions_mode == :debug
49+ track_debug_mode ( [ impression_decorator [ :impression ] ] , stats )
50+ elsif @config . impressions_mode == :optimized
51+ track_optimized_mode ( [ impression_decorator [ :impression ] ] , stats )
52+ end
53+ rescue StandardError => e
54+ @config . log_found_exception ( __method__ . to_s , e )
55+ ensure
56+ record_stats ( stats )
57+ impression_router . add_bulk ( [ impression_decorator [ :impression ] ] )
5558 end
56- rescue StandardError => e
57- @config . log_found_exception ( __method__ . to_s , e )
58- ensure
59- record_stats ( stats )
60- impression_router . add_bulk ( impressions )
6159 end
6260 end
6361
@@ -126,11 +124,10 @@ def track_debug_mode(impressions, stats)
126124
127125 def track_optimized_mode ( impressions , stats )
128126 optimized_impressions = impressions . select { |imp | should_queue_impression? ( imp [ :i ] ) }
129-
127+ stats [ :dedupe ] = impressions . length - optimized_impressions . length
130128 return if optimized_impressions . empty?
131129
132130 stats [ :dropped ] = @impressions_repository . add_bulk ( optimized_impressions )
133- stats [ :dedupe ] = impressions . length - optimized_impressions . length
134131 stats [ :queued ] = optimized_impressions . length - stats [ :dropped ]
135132 end
136133 end
0 commit comments