@@ -267,7 +267,7 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
267
267
to_return = Hash . new
268
268
sanitized_feature_flag_names . each { |name |
269
269
to_return [ name . to_sym ] = control_treatment_with_config
270
- impressions << @impressions_manager . build_impression ( matching_key , bucketing_key , name . to_sym , control_treatment_with_config . merge ( { label : Engine ::Models ::Label ::NOT_READY } ) , { attributes : attributes , time : nil } )
270
+ impressions << { :impression => @impressions_manager . build_impression ( matching_key , bucketing_key , name . to_sym , control_treatment_with_config . merge ( { :label => Engine ::Models ::Label ::NOT_READY } ) , false , { attributes : attributes , time : nil } ) , :disabled => false }
271
271
}
272
272
@impressions_manager . track ( impressions )
273
273
return to_return
@@ -278,7 +278,6 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
278
278
valid_feature_flag_names << feature_flag_name unless feature_flag_name . nil?
279
279
}
280
280
start = Time . now
281
- impressions_total = [ ]
282
281
283
282
feature_flags = @splits_repository . splits ( valid_feature_flag_names )
284
283
treatments = Hash . new
@@ -291,15 +290,14 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
291
290
next
292
291
end
293
292
treatments_labels_change_numbers , impressions = evaluate_treatment ( feature_flag , key , bucketing_key , matching_key , attributes , calling_method )
294
- impressions_total . concat ( impressions ) unless impressions . nil?
295
293
treatments [ key ] =
296
294
{
297
295
treatment : treatments_labels_change_numbers [ :treatment ] ,
298
296
config : treatments_labels_change_numbers [ :config ]
299
297
}
298
+ @impressions_manager . track ( impressions ) unless impressions . empty?
300
299
end
301
300
record_latency ( calling_method , start )
302
- @impressions_manager . track ( impressions_total ) unless impressions_total . empty?
303
301
304
302
treatments . merge ( invalid_treatments )
305
303
end
@@ -332,50 +330,50 @@ def treatment(key, feature_flag_name, attributes = {}, split_data = nil, store_i
332
330
end
333
331
334
332
feature_flag = @splits_repository . get_split ( feature_flag_name )
335
- treatments , impressions = evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple )
333
+ treatments , impressions_decorator = evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple )
336
334
337
- @impressions_manager . track ( impressions ) unless impressions . nil?
335
+ @impressions_manager . track ( impressions_decorator ) unless impressions_decorator . nil?
338
336
treatments
339
337
end
340
338
341
339
def evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple = false )
342
- impressions = [ ]
340
+ impressions_decorator = [ ]
343
341
begin
344
342
start = Time . now
345
343
if feature_flag . nil? && ready?
346
344
@config . logger . warn ( "#{ calling_method } : you passed #{ feature_flag_name } that " \
347
345
'does not exist in this environment, please double check what feature flags exist in the Split user interface' )
348
- return parsed_treatment ( control_treatment . merge ( { label : Engine ::Models ::Label ::NOT_FOUND } ) , multiple ) , nil
346
+ return parsed_treatment ( control_treatment . merge ( { :label => Engine ::Models ::Label ::NOT_FOUND } ) , multiple ) , nil
349
347
end
350
- treatment_data =
348
+
351
349
if !feature_flag . nil? && ready?
352
- @evaluator . evaluate_feature_flag (
350
+ treatment_data = @evaluator . evaluate_feature_flag (
353
351
{ bucketing_key : bucketing_key , matching_key : matching_key } , feature_flag , attributes
354
352
)
353
+ impressions_disabled = feature_flag [ :impressionsDisabled ]
355
354
else
356
355
@config . logger . error ( "#{ calling_method } : the SDK is not ready, results may be incorrect for feature flag #{ feature_flag_name } . Make sure to wait for SDK readiness before using this method." )
357
- control_treatment . merge ( { label : Engine ::Models ::Label ::NOT_READY } )
356
+ treatment_data = control_treatment . merge ( { :label => Engine ::Models ::Label ::NOT_READY } )
357
+ impressions_disabled = false
358
358
end
359
359
360
360
record_latency ( calling_method , start )
361
- impression = @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , treatment_data , { attributes : attributes , time : nil } )
362
- impressions << impression unless impression . nil?
361
+ impression_decorator = { : impression => @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , treatment_data , impressions_disabled , { attributes : attributes , time : nil } ) , :disabled => impressions_disabled }
362
+ impressions_decorator << impression_decorator unless impression_decorator . nil?
363
363
rescue StandardError => e
364
364
@config . log_found_exception ( __method__ . to_s , e )
365
-
366
365
record_exception ( calling_method )
366
+ impression_decorator = { :impression => @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , control_treatment , false , { attributes : attributes , time : nil } ) , :disabled => false }
367
+ impressions_decorator << impression_decorator unless impression_decorator . nil?
367
368
368
- impression = @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , control_treatment , { attributes : attributes , time : nil } )
369
- impressions << impression unless impression . nil?
370
-
371
- return parsed_treatment ( control_treatment . merge ( { label : Engine ::Models ::Label ::EXCEPTION } ) , multiple ) , impressions
369
+ return parsed_treatment ( control_treatment . merge ( { :label => Engine ::Models ::Label ::EXCEPTION } ) , multiple ) , impressions_decorator
372
370
end
373
371
374
- return parsed_treatment ( treatment_data , multiple ) , impressions
372
+ return parsed_treatment ( treatment_data , multiple ) , impressions_decorator
375
373
end
376
374
377
375
def control_treatment
378
- { treatment : Engine ::Models ::Treatment ::CONTROL }
376
+ { :treatment => Engine ::Models ::Treatment ::CONTROL }
379
377
end
380
378
381
379
def control_treatment_with_config
0 commit comments