vwo-sdk 1.14.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/vwo/enums.rb CHANGED
@@ -113,6 +113,7 @@ class VWO
113
113
  BULK_NOT_PROCESSED = "(%<file>s): Batch events couldn't be received by VWO. Calling Flush Callback with error and data."
114
114
  BEFORE_FLUSHING = '(%<file>s): Flushing events queue %<manually>s having %<length>s events %<timer>s queue summary: %<queue_metadata>s'
115
115
  EVENT_BATCHING_INSUFFICIENT = '(%<file>s): %<key>s not provided, assigning default value'
116
+ GOT_ELIGIBLE_CAMPAIGNS = "(%<file>s): Campaigns:%<eligible_campaigns_key>s are eligible, %<ineligible_campaigns_log_text>s are ineligible from the Group:%<group_name>s for the User ID:%<user_id>s"
116
117
  end
117
118
 
118
119
  # Info Messages
@@ -152,9 +153,13 @@ class VWO
152
153
  CAMPAIGN_NOT_ACTIVATED = '(%<file>s): Activate the campaign:%<campaign_key>s for User ID:%<user_id>s to %<reason>s.'
153
154
  GOAL_ALREADY_TRACKED = '(%<file>s): Goal:%<goal_identifier>s of Campaign:%<campaign_key>s for User ID:%<user_id>s has already been tracked earlier. Skipping now'
154
155
  USER_ALREADY_TRACKED = '(%<file>s): User ID:%<user_id>s for Campaign:%<campaign_key>s has already been tracked earlier for "%<api_name>s" API. Skipping now'
155
- API_CALLED = '(%<file>s): API: {api_name} called for UserId:%<user_id>s'
156
+ API_CALLED = '(%<file>s): API: %<api_name>s called for UserId:%<user_id>s'
156
157
  BULK_IMPRESSION_SUCCESS = '(%<file>s): Impression event - %<end_point>s was successfully received by VWO having accountId:%<a>s'
157
158
  AFTER_FLUSHING = '(%<file>s): Events queue having %<length>s events has been flushed %<manually>s queue summary: %<queue_metadata>s'
159
+ GOT_WINNER_CAMPAIGN = "(%<file>s): Campaign:%<campaign_key>s is selected from the mutually exclusive group:%<group_name>s for the User ID:%<user_id>s"
160
+ GOT_ELIGIBLE_CAMPAIGNS = "(%<file>s): Got %<no_of_eligible_campaigns>s eligible winners out of %<no_of_group_campaigns>s from the Group:%<group_name>s and for User ID:%<user_id>s"
161
+ CALLED_CAMPAIGN_NOT_WINNER = "(%<file>s): Campaign:%<campaign_key>s does not qualify from the mutually exclusive group:%<group_name>s for User ID:%<user_id>s"
162
+ OTHER_CAMPAIGN_SATISFIES_WHITELISTING_OR_STORAGE = "(%<file>s): Campaign:%<campaign_key>s of Group:%<group_name>s satisfies %<type>s for User ID:%<user_id>s"
158
163
  end
159
164
 
160
165
  # Warning Messages
data/lib/vwo/logger.rb CHANGED
@@ -28,8 +28,10 @@ class VWO
28
28
  end
29
29
 
30
30
  # Override this method to handle logs in a custom manner
31
- def log(level, message)
32
- @@logger_instance.log(level, message)
31
+ def log(level, message, disable_logs = false)
32
+ unless disable_logs
33
+ @@logger_instance.log(level, message)
34
+ end
33
35
  end
34
36
 
35
37
  def instance
@@ -54,7 +54,13 @@ class VWO
54
54
  },
55
55
  weight: {
56
56
  type: %w[number string]
57
- }
57
+ },
58
+ variables: {
59
+ type: 'array',
60
+ items: {
61
+ '$ref' => '#/definitions/variables_schema'
62
+ }
63
+ }
58
64
  },
59
65
  required: %w[id name weight]
60
66
  },
@@ -79,9 +85,34 @@ class VWO
79
85
  '$ref' => '#/definitions/campaign_variation_schema'
80
86
  }
81
87
  },
88
+ variables: {
89
+ type: 'array',
90
+ items: {
91
+ '$ref' => '#/definitions/variables_schema'
92
+ }
93
+ },
94
+ isBucketingSeedEnabled: ['boolean'],
82
95
  minItems: 2
83
96
  }
84
97
  },
98
+ variables_schema: {
99
+ type: 'object',
100
+ properties: {
101
+ id: {
102
+ type: %w[number string]
103
+ },
104
+ key: {
105
+ type: ['string']
106
+ },
107
+ type: {
108
+ type: ['string']
109
+ },
110
+ value: {
111
+ type: %w[number string boolean double object]
112
+ }
113
+ },
114
+ required: %w[id key type value]
115
+ },
85
116
  required: %w[
86
117
  id
87
118
  key
@@ -63,10 +63,11 @@ class VWO
63
63
  # @param[String] :user_id Unique user identifier
64
64
  # @param[Hash] :dsl Segments provided in the settings_file
65
65
  # @param[Hash] :custom_variables Custom variables provided in the apis
66
+ # @param[Boolean] :disable_logs disable logs if True
66
67
  #
67
68
  # @return[Boolean] true if user passed pre-segmentation, else false
68
69
  #
69
- def evaluate(campaign_key, user_id, dsl, custom_variables)
70
+ def evaluate(campaign_key, user_id, dsl, custom_variables, disable_logs = false)
70
71
  result = evaluate_util(dsl, custom_variables) if valid_value?(dsl)
71
72
  result
72
73
  rescue StandardError => e
@@ -79,7 +80,8 @@ class VWO
79
80
  campaign_key: campaign_key,
80
81
  custom_variables: custom_variables,
81
82
  error_message: e
82
- )
83
+ ),
84
+ disable_logs
83
85
  )
84
86
  false
85
87
  end
@@ -57,6 +57,26 @@ class VWO
57
57
  end
58
58
  end
59
59
 
60
+ # Sets campaign allocation range in the provided campaigns list
61
+ #
62
+ # @param [Array]: Array of Campaigns
63
+ def set_campaign_allocation(campaigns)
64
+ current_allocation = 0
65
+ campaigns.each do |campaign|
66
+ step_factor = get_variation_bucketing_range(campaign['weight'])
67
+ if step_factor > 0
68
+ start_range = current_allocation + 1
69
+ end_range = current_allocation + step_factor
70
+ campaign['min_range'] = start_range
71
+ campaign['max_range'] = end_range
72
+ current_allocation += step_factor
73
+ else
74
+ campaign['min_range'] = -1
75
+ campaign['max_range'] = -1
76
+ end
77
+ end
78
+ end
79
+
60
80
  # Returns goal from given campaign_key and gaol_identifier.
61
81
  # @param[String] :campaign Campaign object
62
82
  # @param[String] :goal_identifier Goal identifier
@@ -190,7 +210,7 @@ class VWO
190
210
  end
191
211
  goal = get_campaign_goal(campaign, goal_identifier)
192
212
  if validate_goal(goal, goal_type_to_track)
193
- campaigns.append(campaign)
213
+ campaigns.push(campaign)
194
214
  end
195
215
  end
196
216
  end
@@ -215,7 +235,7 @@ class VWO
215
235
 
216
236
  campaign = get_campaign_for_campaign_key_and_goal(campaign_key, settings_file, goal_identifier, goal_type_to_track)
217
237
  if campaign
218
- campaigns.append(campaign)
238
+ campaigns.push(campaign)
219
239
  end
220
240
  end
221
241
  campaigns
@@ -249,6 +269,44 @@ class VWO
249
269
  return campaign
250
270
  end
251
271
 
272
+ # Checks whether a campaign is part of a group.
273
+ #
274
+ # @param[Hash] :settings_file Settings file for the project
275
+ # @param[Integer] :campaign_id Id of campaign which is to be checked
276
+ # @return[Boolean]
277
+ def is_part_of_group(settings_file, campaign_id)
278
+ if settings_file["campaignGroups"] && (settings_file["campaignGroups"].has_key?(campaign_id.to_s))
279
+ return true
280
+ end
281
+ false
282
+ end
283
+
284
+ # Returns campaigns which are part of given group using group_id.
285
+ #
286
+ # @param[Hash] :settings_file Settings file for the project
287
+ # @param[Integer] :group_id id of group whose campaigns are to be return
288
+ # @return[Array]
289
+ def get_group_campaigns(settings_file, group_id)
290
+ group_campaign_ids = []
291
+ group_campaigns = []
292
+ groups = settings_file["groups"]
293
+
294
+ if groups && groups.has_key?(group_id.to_s)
295
+ group_campaign_ids = groups[group_id.to_s]["campaigns"]
296
+ end
297
+
298
+ if group_campaign_ids
299
+ group_campaign_ids.each do |campaign_id|
300
+ settings_file["campaigns"].each do |campaign|
301
+ if campaign["id"] == campaign_id && campaign["status"] == STATUS_RUNNING
302
+ group_campaigns.append(campaign)
303
+ end
304
+ end
305
+ end
306
+ end
307
+ group_campaigns
308
+ end
309
+
252
310
  end
253
311
  end
254
312
  end
@@ -38,6 +38,8 @@ class VWO
38
38
  return value.to_f if variable_type == VariableTypes::DOUBLE
39
39
 
40
40
  return !value || value == 0 ? false : true if variable_type == VariableTypes.BOOLEAN
41
+
42
+ return value if variable_type == VariableTypes::JSON
41
43
  rescue StandardError => _e
42
44
  VWO::Logger.get_instance.log(
43
45
  LogLevelEnum::ERROR,
data/lib/vwo.rb CHANGED
@@ -413,7 +413,6 @@ class VWO
413
413
  )
414
414
  end
415
415
  end
416
- variation['name']
417
416
  else
418
417
  @logger.log(
419
418
  LogLevelEnum::INFO,
@@ -425,8 +424,8 @@ class VWO
425
424
  api_name: ApiMethods::ACTIVATE
426
425
  )
427
426
  )
428
- nil
429
427
  end
428
+ variation['name']
430
429
  rescue StandardError => e
431
430
  @logger.log(
432
431
  LogLevelEnum::ERROR,
@@ -437,7 +436,7 @@ class VWO
437
436
  exception: e
438
437
  )
439
438
  )
440
- nil
439
+ e
441
440
  end
442
441
 
443
442
  # This API method: Gets the variation name assigned for the
@@ -563,10 +562,11 @@ class VWO
563
562
  # @param[String] :campaign_key Unique campaign key
564
563
  # @param[String] :user_id ID assigned to a user
565
564
  # @param[String] :goal_identifier Unique campaign's goal identifier
566
- # @param[Array|Hash] :args Contains revenue value and custom variables
565
+ # @param[Hash] :options Contains revenue value and custom variables
567
566
  # @param[Numeric|String] :revenue_value It is the revenue generated on triggering the goal
568
567
  #
569
- def track(campaign_key, user_id, goal_identifier, *args)
568
+
569
+ def track(campaign_key, user_id, goal_identifier, options = {})
570
570
  unless @is_instance_valid
571
571
  @logger.log(
572
572
  LogLevelEnum::ERROR,
@@ -579,18 +579,11 @@ class VWO
579
579
  return false
580
580
  end
581
581
 
582
- if args[0].is_a?(Hash)
583
- revenue_value = args[0]['revenue_value'] || args[0][:revenue_value]
584
- custom_variables = args[0]['custom_variables'] || args[0][:custom_variables]
585
- variation_targeting_variables = args[0]['variation_targeting_variables'] || args[0][:variation_targeting_variables]
586
- should_track_returning_user = get_should_track_returning_user(args[0])
587
- goal_type_to_track = get_goal_type_to_track(args[0])
588
- elsif args.is_a?(Array)
589
- revenue_value = args[0]
590
- custom_variables = nil
591
- should_track_returning_user = @should_track_returning_user
592
- goal_type_to_track = @goal_type_to_track
593
- end
582
+ revenue_value = options['revenue_value'] || options[:revenue_value]
583
+ custom_variables = options['custom_variables'] || options[:custom_variables]
584
+ variation_targeting_variables = options['variation_targeting_variables'] || options[:variation_targeting_variables]
585
+ should_track_returning_user = get_should_track_returning_user(options)
586
+ goal_type_to_track = get_goal_type_to_track(options)
594
587
 
595
588
  # Check for valid args
596
589
  unless (valid_string?(campaign_key) || campaign_key.is_a?(Array) || campaign_key.nil?) && valid_string?(user_id) && valid_string?(goal_identifier) && (custom_variables.nil? || valid_hash?(custom_variables)) &&
@@ -617,147 +610,149 @@ class VWO
617
610
 
618
611
  result = {}
619
612
  campaigns.each do |campaign|
620
- campaign_type = campaign['type']
613
+ begin
614
+ campaign_type = campaign['type']
621
615
 
622
- if campaign_type == CampaignTypes::FEATURE_ROLLOUT
623
- @logger.log(
624
- LogLevelEnum::ERROR,
625
- format(
626
- LogMessageEnum::ErrorMessages::INVALID_API,
627
- file: FILE,
628
- api_name: ApiMethods::TRACK,
629
- user_id: user_id,
630
- campaign_key: campaign['key'],
631
- campaign_type: campaign_type
632
- )
633
- )
634
- result[campaign['key']] = false
635
- next
636
- end
637
-
638
- variation = @variation_decider.get_variation(user_id, campaign, ApiMethods::TRACK, campaign['key'], custom_variables, variation_targeting_variables, goal_identifier)
639
-
640
- if variation
641
- goal = get_campaign_goal(campaign, goal_identifier)
642
- if goal.nil? || !goal["id"]
643
- @logger.log(
644
- LogLevelEnum::ERROR,
645
- format(
646
- LogMessageEnum::ErrorMessages::TRACK_API_GOAL_NOT_FOUND,
647
- file: FILE,
648
- goal_identifier: goal_identifier,
649
- user_id: user_id,
650
- campaign_key: campaign['key'],
651
- api_name: ApiMethods::TRACK
652
- )
653
- )
654
- result[campaign['key']] = false
655
- next
656
- elsif goal['type'] == GoalTypes::REVENUE && !valid_value?(revenue_value)
616
+ if campaign_type == CampaignTypes::FEATURE_ROLLOUT
657
617
  @logger.log(
658
618
  LogLevelEnum::ERROR,
659
619
  format(
660
- LogMessageEnum::ErrorMessages::TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL,
620
+ LogMessageEnum::ErrorMessages::INVALID_API,
661
621
  file: FILE,
622
+ api_name: ApiMethods::TRACK,
662
623
  user_id: user_id,
663
- goal_identifier: goal_identifier,
664
624
  campaign_key: campaign['key'],
665
- api_name: ApiMethods::TRACK
625
+ campaign_type: campaign_type
666
626
  )
667
627
  )
668
628
  result[campaign['key']] = false
669
629
  next
670
- elsif goal['type'] == GoalTypes::CUSTOM
671
- revenue_value = nil
672
630
  end
673
631
 
674
- if variation['goal_identifier']
675
- identifiers = variation['goal_identifier'].split(VWO_DELIMITER)
676
- else
677
- variation['goal_identifier'] = ''
678
- identifiers = []
679
- end
632
+ variation = @variation_decider.get_variation(user_id, campaign, ApiMethods::TRACK, campaign['key'], custom_variables, variation_targeting_variables, goal_identifier)
680
633
 
681
- if !identifiers.include? goal_identifier
682
- updated_goal_identifier = variation['goal_identifier']
683
- updated_goal_identifier += VWO_DELIMITER + goal_identifier
684
- @variation_decider.save_user_storage(user_id, campaign['key'], variation['name'], updated_goal_identifier) if variation['name']
685
- # set variation at user storage
686
- elsif !should_track_returning_user
687
- @logger.log(
688
- LogLevelEnum::INFO,
689
- format(
690
- LogMessageEnum::InfoMessages::GOAL_ALREADY_TRACKED,
691
- file: FILE,
692
- user_id: user_id,
693
- campaign_key: campaign['key'],
694
- goal_identifier: goal_identifier,
695
- api_name: ApiMethods::TRACK
634
+ if variation
635
+ goal = get_campaign_goal(campaign, goal_identifier)
636
+ if goal.nil? || !goal["id"]
637
+ @logger.log(
638
+ LogLevelEnum::ERROR,
639
+ format(
640
+ LogMessageEnum::ErrorMessages::TRACK_API_GOAL_NOT_FOUND,
641
+ file: FILE,
642
+ goal_identifier: goal_identifier,
643
+ user_id: user_id,
644
+ campaign_key: campaign['key'],
645
+ api_name: ApiMethods::TRACK
646
+ )
696
647
  )
697
- )
698
- result[campaign['key']] = false
699
- next
700
- end
701
-
702
- if defined?(@batch_events)
703
- impression = create_bulk_event_impression(
704
- @settings_file,
705
- campaign['id'],
706
- variation['id'],
707
- user_id,
708
- goal['id'],
709
- revenue_value
710
- )
711
- @batch_events_queue.enqueue(impression)
712
- else
713
- impression = create_impression(
714
- @settings_file,
715
- campaign['id'],
716
- variation['id'],
717
- user_id,
718
- @sdk_key,
719
- goal['id'],
720
- revenue_value
721
- )
722
- if @event_dispatcher.dispatch(impression)
648
+ result[campaign['key']] = false
649
+ next
650
+ elsif goal['type'] == GoalTypes::REVENUE && !valid_value?(revenue_value)
723
651
  @logger.log(
724
- LogLevelEnum::INFO,
652
+ LogLevelEnum::ERROR,
725
653
  format(
726
- LogMessageEnum::InfoMessages::IMPRESSION_SUCCESS,
654
+ LogMessageEnum::ErrorMessages::TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL,
727
655
  file: FILE,
728
- sdk_key: @sdk_key,
729
- account_id: @account_id,
730
- campaign_id: campaign['id'],
731
- variation_id: variation['id'],
732
- end_point: EVENTS::TRACK_GOAL
656
+ user_id: user_id,
657
+ goal_identifier: goal_identifier,
658
+ campaign_key: campaign['key'],
659
+ api_name: ApiMethods::TRACK
733
660
  )
734
661
  )
662
+ result[campaign['key']] = false
663
+ next
664
+ elsif goal['type'] == GoalTypes::CUSTOM
665
+ revenue_value = nil
666
+ end
667
+
668
+ if variation['goal_identifier']
669
+ identifiers = variation['goal_identifier'].split(VWO_DELIMITER)
670
+ else
671
+ variation['goal_identifier'] = ''
672
+ identifiers = []
673
+ end
674
+
675
+ if !identifiers.include? goal_identifier
676
+ updated_goal_identifier = variation['goal_identifier']
677
+ updated_goal_identifier += VWO_DELIMITER + goal_identifier
678
+ @variation_decider.save_user_storage(user_id, campaign['key'], campaign['name'], variation['name'], updated_goal_identifier) if variation['name']
679
+ # set variation at user storage
680
+ elsif !should_track_returning_user
735
681
  @logger.log(
736
682
  LogLevelEnum::INFO,
737
683
  format(
738
- LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
684
+ LogMessageEnum::InfoMessages::GOAL_ALREADY_TRACKED,
739
685
  file: FILE,
740
- sdk_key: @sdk_key,
741
- campaign_id: impression[:experiment_id],
742
- account_id: impression[:account_id],
743
- variation_id: impression[:combination]
686
+ user_id: user_id,
687
+ campaign_key: campaign['key'],
688
+ goal_identifier: goal_identifier,
689
+ api_name: ApiMethods::TRACK
744
690
  )
745
691
  )
692
+ result[campaign['key']] = false
693
+ next
694
+ end
695
+
696
+ if defined?(@batch_events)
697
+ impression = create_bulk_event_impression(
698
+ @settings_file,
699
+ campaign['id'],
700
+ variation['id'],
701
+ user_id,
702
+ goal['id'],
703
+ revenue_value
704
+ )
705
+ @batch_events_queue.enqueue(impression)
706
+ else
707
+ impression = create_impression(
708
+ @settings_file,
709
+ campaign['id'],
710
+ variation['id'],
711
+ user_id,
712
+ @sdk_key,
713
+ goal['id'],
714
+ revenue_value
715
+ )
716
+ if @event_dispatcher.dispatch(impression)
717
+ @logger.log(
718
+ LogLevelEnum::INFO,
719
+ format(
720
+ LogMessageEnum::InfoMessages::IMPRESSION_SUCCESS,
721
+ file: FILE,
722
+ sdk_key: @sdk_key,
723
+ account_id: @account_id,
724
+ campaign_id: campaign['id'],
725
+ variation_id: variation['id'],
726
+ end_point: EVENTS::TRACK_GOAL
727
+ )
728
+ )
729
+ @logger.log(
730
+ LogLevelEnum::INFO,
731
+ format(
732
+ LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
733
+ file: FILE,
734
+ sdk_key: @sdk_key,
735
+ campaign_id: impression[:experiment_id],
736
+ account_id: impression[:account_id],
737
+ variation_id: impression[:combination]
738
+ )
739
+ )
740
+ end
746
741
  end
742
+ result[campaign['key']] = true
743
+ next
747
744
  end
748
- result[campaign['key']] = true
749
- next
750
- end
751
- result[campaign['key']] = false
752
- rescue StandardError => e
753
- @logger.log(
754
- LogLevelEnum::ERROR,
755
- format(
756
- e.message,
757
- file: FILE,
758
- exception: e
745
+ result[campaign['key']] = false
746
+ rescue StandardError => e
747
+ @logger.log(
748
+ LogLevelEnum::ERROR,
749
+ format(
750
+ e.message,
751
+ file: FILE,
752
+ exception: e
753
+ )
759
754
  )
760
- )
755
+ end
761
756
  end
762
757
 
763
758
  if result.length() == 0
@@ -874,80 +869,85 @@ class VWO
874
869
  return false unless variation
875
870
 
876
871
  # if campaign type is feature_test Send track call to server
877
- if campaign_type == CampaignTypes::FEATURE_TEST
878
- if is_eligible_to_send_impression(should_track_returning_user)
879
- if defined?(@batch_events)
880
- impression = create_bulk_event_impression(
881
- @settings_file,
882
- campaign['id'],
883
- variation['id'],
884
- user_id
885
- )
886
- @batch_events_queue.enqueue(impression)
887
- else
888
- impression = create_impression(
889
- @settings_file,
890
- campaign['id'],
891
- variation['id'],
892
- user_id,
893
- @sdk_key,
894
- goal_id: nil,
895
- revenue: nil,
896
- usage_stats: @usage_stats.usage_stats
897
- )
898
872
 
899
- @event_dispatcher.dispatch(impression)
900
- @logger.log(
901
- LogLevelEnum::INFO,
902
- format(
903
- LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
904
- file: FILE,
905
- campaign_id: impression[:experiment_id],
906
- sdk_key: @sdk_key,
907
- account_id: impression[:account_id],
908
- variation_id: impression[:combination]
909
- )
910
- )
911
- end
912
- result = variation['isFeatureEnabled']
913
- if result
914
- @logger.log(
915
- LogLevelEnum::INFO,
916
- format(
917
- LogMessageEnum::InfoMessages::FEATURE_ENABLED_FOR_USER,
918
- file: FILE,
919
- user_id: user_id,
920
- feature_key: campaign_key,
921
- api_name: ApiMethods::IS_FEATURE_ENABLED
922
- )
923
- )
924
- else
925
- @logger.log(
926
- LogLevelEnum::INFO,
927
- format(
928
- LogMessageEnum::InfoMessages::FEATURE_NOT_ENABLED_FOR_USER,
929
- file: FILE,
930
- user_id: user_id,
931
- feature_key: campaign_key,
932
- api_name: ApiMethods::IS_FEATURE_ENABLED
933
- )
934
- )
935
- end
936
- return result
873
+ if is_eligible_to_send_impression(should_track_returning_user)
874
+ if defined?(@batch_events)
875
+ impression = create_bulk_event_impression(
876
+ @settings_file,
877
+ campaign['id'],
878
+ variation['id'],
879
+ user_id
880
+ )
881
+ @batch_events_queue.enqueue(impression)
937
882
  else
883
+ impression = create_impression(
884
+ @settings_file,
885
+ campaign['id'],
886
+ variation['id'],
887
+ user_id,
888
+ @sdk_key,
889
+ nil,
890
+ nil,
891
+ usage_stats: @usage_stats.usage_stats
892
+ )
893
+
894
+ @event_dispatcher.dispatch(impression)
938
895
  @logger.log(
939
896
  LogLevelEnum::INFO,
940
897
  format(
941
- LogMessageEnum::InfoMessages::USER_ALREADY_TRACKED,
898
+ LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
942
899
  file: FILE,
943
- user_id: user_id,
944
- campaign_key: campaign_key,
945
- api_name: ApiMethods::IS_FEATURE_ENABLED
900
+ campaign_id: impression[:experiment_id],
901
+ sdk_key: @sdk_key,
902
+ account_id: impression[:account_id],
903
+ variation_id: impression[:combination]
946
904
  )
947
905
  )
948
906
  end
907
+
908
+ else
909
+ @logger.log(
910
+ LogLevelEnum::INFO,
911
+ format(
912
+ LogMessageEnum::InfoMessages::USER_ALREADY_TRACKED,
913
+ file: FILE,
914
+ user_id: user_id,
915
+ campaign_key: campaign_key,
916
+ api_name: ApiMethods::IS_FEATURE_ENABLED
917
+ )
918
+ )
949
919
  end
950
- true
920
+ if campaign_type == CampaignTypes::FEATURE_ROLLOUT
921
+ result = true
922
+ else
923
+ result = variation['isFeatureEnabled']
924
+ end
925
+
926
+ if result
927
+ @logger.log(
928
+ LogLevelEnum::INFO,
929
+ format(
930
+ LogMessageEnum::InfoMessages::FEATURE_ENABLED_FOR_USER,
931
+ file: FILE,
932
+ user_id: user_id,
933
+ feature_key: campaign_key,
934
+ api_name: ApiMethods::IS_FEATURE_ENABLED
935
+ )
936
+ )
937
+ else
938
+ @logger.log(
939
+ LogLevelEnum::INFO,
940
+ format(
941
+ LogMessageEnum::InfoMessages::FEATURE_NOT_ENABLED_FOR_USER,
942
+ file: FILE,
943
+ user_id: user_id,
944
+ feature_key: campaign_key,
945
+ api_name: ApiMethods::IS_FEATURE_ENABLED
946
+ )
947
+ )
948
+ end
949
+
950
+ result
951
951
  rescue StandardError => e
952
952
  @logger.log(
953
953
  LogLevelEnum::ERROR,