vwo-sdk 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/vwo.rb +348 -0
- data/lib/vwo/constants.rb +63 -0
- data/lib/vwo/core/bucketer.rb +177 -0
- data/lib/vwo/core/variation_decider.rb +308 -0
- data/lib/vwo/enums.rb +115 -0
- data/lib/vwo/logger.rb +37 -0
- data/lib/vwo/schemas/settings_file.rb +102 -0
- data/lib/vwo/services/event_dispatcher.rb +82 -0
- data/lib/vwo/services/settings_file_manager.rb +84 -0
- data/lib/vwo/services/settings_file_processor.rb +54 -0
- data/lib/vwo/user_storage.rb +36 -0
- data/lib/vwo/utils/campaign.rb +125 -0
- data/lib/vwo/utils/function.rb +39 -0
- data/lib/vwo/utils/impression.rb +98 -0
- data/lib/vwo/utils/request.rb +31 -0
- data/lib/vwo/utils/uuid.rb +93 -0
- data/lib/vwo/utils/validations.rb +56 -0
- metadata +117 -0
@@ -0,0 +1,308 @@
|
|
1
|
+
# Copyright 2019 Wingify Software Pvt. Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# frozen_string_literal: true
|
16
|
+
|
17
|
+
require_relative '../logger'
|
18
|
+
require_relative '../enums'
|
19
|
+
require_relative '../utils/campaign'
|
20
|
+
require_relative '../utils/validations'
|
21
|
+
require_relative 'bucketer'
|
22
|
+
|
23
|
+
class VWO
|
24
|
+
module Core
|
25
|
+
class VariationDecider
|
26
|
+
attr_reader :user_storage_service
|
27
|
+
|
28
|
+
include VWO::Enums
|
29
|
+
include VWO::Utils::Campaign
|
30
|
+
include VWO::Utils::Validations
|
31
|
+
|
32
|
+
FILE = FileNameEnum::VariationDecider
|
33
|
+
|
34
|
+
# Initializes various services
|
35
|
+
# @param[Hash] - Settings file
|
36
|
+
# @param[Class] - Class instance having the capability of
|
37
|
+
# get and save.
|
38
|
+
def initialize(settings_file, user_storage_service = nil)
|
39
|
+
@logger = VWO::Logger.get_instance
|
40
|
+
@user_storage_service = user_storage_service
|
41
|
+
# Check if user_storage_service provided is valid or not
|
42
|
+
@user_storage_service = user_storage_service
|
43
|
+
@bucketer = VWO::Core::Bucketer.new
|
44
|
+
@settings_file = settings_file
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns variation for the user for the passed campaign-key
|
48
|
+
# Check in User Storage, if user found, validate variation and return
|
49
|
+
# Otherwise, proceed with variation assignment logic
|
50
|
+
#
|
51
|
+
#
|
52
|
+
# @param[String] :user_id The unique ID assigned to User
|
53
|
+
# @param[Hash] :campaign Campaign hash itslef
|
54
|
+
# @return[String,String] ({variation_id, variation_name}|Nil): Tuple of
|
55
|
+
# variation_id and variation_name if variation allotted, else nil
|
56
|
+
|
57
|
+
def get_variation(user_id, campaign)
|
58
|
+
if campaign
|
59
|
+
campaign_key = campaign['key']
|
60
|
+
end
|
61
|
+
|
62
|
+
user_campaign_map = get_user_storage(user_id, campaign_key)
|
63
|
+
variation = get_stored_variation(user_id, campaign_key, user_campaign_map) if valid_hash?(user_campaign_map)
|
64
|
+
|
65
|
+
if variation
|
66
|
+
@logger.log(
|
67
|
+
LogLevelEnum::INFO,
|
68
|
+
format(
|
69
|
+
LogMessageEnum::InfoMessages::GOT_STORED_VARIATION,
|
70
|
+
file: FILE,
|
71
|
+
campaign_key: campaign_key,
|
72
|
+
user_id: user_id,
|
73
|
+
variation_name: variation['name']
|
74
|
+
)
|
75
|
+
)
|
76
|
+
return variation['id'], variation['name']
|
77
|
+
end
|
78
|
+
|
79
|
+
variation_id, variation_name = get_variation_allotted(user_id, campaign)
|
80
|
+
|
81
|
+
if variation_name
|
82
|
+
save_user_storage(user_id, campaign_key, variation_name) if variation_name
|
83
|
+
|
84
|
+
@logger.log(
|
85
|
+
LogLevelEnum::INFO,
|
86
|
+
format(
|
87
|
+
LogMessageEnum::InfoMessages::VARIATION_ALLOCATED,
|
88
|
+
file: FILE,
|
89
|
+
campaign_key: campaign_key,
|
90
|
+
user_id: user_id,
|
91
|
+
variation_name: variation_name
|
92
|
+
)
|
93
|
+
)
|
94
|
+
else
|
95
|
+
@logger.log(
|
96
|
+
LogLevelEnum::INFO,
|
97
|
+
format(LogMessageEnum::InfoMessages::NO_VARIATION_ALLOCATED, file: FILE, campaign_key: campaign_key, user_id: user_id)
|
98
|
+
)
|
99
|
+
end
|
100
|
+
[variation_id, variation_name]
|
101
|
+
end
|
102
|
+
|
103
|
+
# Returns the Variation Alloted for required campaign
|
104
|
+
#
|
105
|
+
# @param[String] :user_id The unique ID assigned to User
|
106
|
+
# @param[Hash] :campaign Campaign hash for Unique campaign key
|
107
|
+
#
|
108
|
+
# @return[Hash]
|
109
|
+
|
110
|
+
def get_variation_allotted(user_id, campaign)
|
111
|
+
variation_id, variation_name = nil
|
112
|
+
unless valid_value?(user_id)
|
113
|
+
@logger.log(
|
114
|
+
LogLevelEnum::ERROR,
|
115
|
+
format(LogMessageEnum::ErrorMessages::INVALID_USER_ID, file: FILE, user_id: user_id, method: 'get_variation_alloted')
|
116
|
+
)
|
117
|
+
return variation_id, variation_name
|
118
|
+
end
|
119
|
+
|
120
|
+
if @bucketer.user_part_of_campaign?(user_id, campaign)
|
121
|
+
variation_id, variation_name = get_variation_of_campaign_for_user(user_id, campaign)
|
122
|
+
@logger.log(
|
123
|
+
LogLevelEnum::DEBUG,
|
124
|
+
format(
|
125
|
+
LogMessageEnum::DebugMessages::GOT_VARIATION_FOR_USER,
|
126
|
+
file: FILE,
|
127
|
+
variation_name: variation_name,
|
128
|
+
user_id: user_id,
|
129
|
+
campaign_key: campaign['key'],
|
130
|
+
method: 'get_variation_allotted'
|
131
|
+
)
|
132
|
+
)
|
133
|
+
else
|
134
|
+
# not part of campaign
|
135
|
+
@logger.log(
|
136
|
+
LogLevelEnum::DEBUG,
|
137
|
+
format(
|
138
|
+
LogMessageEnum::DebugMessages::USER_NOT_PART_OF_CAMPAIGN,
|
139
|
+
file: FILE,
|
140
|
+
user_id: user_id,
|
141
|
+
campaign_key: nil,
|
142
|
+
method: 'get_variation_allotted'
|
143
|
+
)
|
144
|
+
)
|
145
|
+
end
|
146
|
+
[variation_id, variation_name]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Assigns variation to a particular user depending on the campaign PercentTraffic.
|
150
|
+
#
|
151
|
+
# @param[String] :user_id The unique ID assigned to a user
|
152
|
+
# @param[Hash] :campaign The Campaign of which user is to be made a part of
|
153
|
+
# @return[Hash] Variation allotted to User
|
154
|
+
def get_variation_of_campaign_for_user(user_id, campaign)
|
155
|
+
unless campaign
|
156
|
+
@logger.log(
|
157
|
+
LogLevelEnum::ERROR,
|
158
|
+
format(
|
159
|
+
LogMessageEnum::ErrorMessages::INVALID_CAMPAIGN,
|
160
|
+
file: FILE,
|
161
|
+
method: 'get_variation_of_campaign_for_user'
|
162
|
+
)
|
163
|
+
)
|
164
|
+
return nil, nil
|
165
|
+
end
|
166
|
+
|
167
|
+
variation = @bucketer.bucket_user_to_variation(user_id, campaign)
|
168
|
+
|
169
|
+
if variation && variation['name']
|
170
|
+
@logger.log(
|
171
|
+
LogLevelEnum::INFO,
|
172
|
+
format(
|
173
|
+
LogMessageEnum::InfoMessages::GOT_VARIATION_FOR_USER,
|
174
|
+
file: FILE,
|
175
|
+
variation_name: variation['name'],
|
176
|
+
user_id: user_id,
|
177
|
+
campaign_key: campaign['key']
|
178
|
+
)
|
179
|
+
)
|
180
|
+
return variation['id'], variation['name']
|
181
|
+
end
|
182
|
+
|
183
|
+
@logger.log(
|
184
|
+
LogLevelEnum::INFO,
|
185
|
+
format(
|
186
|
+
LogMessageEnum::InfoMessages::USER_GOT_NO_VARIATION,
|
187
|
+
file: FILE,
|
188
|
+
user_id: user_id,
|
189
|
+
campaign_key: campaign['key']
|
190
|
+
)
|
191
|
+
)
|
192
|
+
[nil, nil]
|
193
|
+
end
|
194
|
+
|
195
|
+
private
|
196
|
+
|
197
|
+
# Get the UserStorageData after looking up into get method
|
198
|
+
# Being provided via UserStorageService
|
199
|
+
#
|
200
|
+
# @param[String]: Unique user identifier
|
201
|
+
# @param[String]: Unique campaign key
|
202
|
+
# @return[Hash|Boolean]: user_storage data
|
203
|
+
|
204
|
+
def get_user_storage(user_id, campaign_key)
|
205
|
+
unless @user_storage_service
|
206
|
+
@logger.log(
|
207
|
+
LogLevelEnum::DEBUG,
|
208
|
+
format(LogMessageEnum::DebugMessages::NO_USER_STORAGE_SERVICE_LOOKUP, file: FILE)
|
209
|
+
)
|
210
|
+
return false
|
211
|
+
end
|
212
|
+
|
213
|
+
data = @user_storage_service.get(user_id, campaign_key)
|
214
|
+
@logger.log(
|
215
|
+
LogLevelEnum::INFO,
|
216
|
+
format(
|
217
|
+
LogMessageEnum::InfoMessages::LOOKING_UP_USER_STORAGE_SERVICE,
|
218
|
+
file: FILE,
|
219
|
+
user_id: user_id,
|
220
|
+
status: data.nil? ? 'Not Found' : 'Found'
|
221
|
+
)
|
222
|
+
)
|
223
|
+
data
|
224
|
+
rescue StandardError
|
225
|
+
@logger.log(
|
226
|
+
LogLevelEnum::ERROR,
|
227
|
+
format(LogMessageEnum::ErrorMessages::LOOK_UP_USER_STORAGE_SERVICE_FAILED, file: FILE, user_id: user_id)
|
228
|
+
)
|
229
|
+
false
|
230
|
+
end
|
231
|
+
|
232
|
+
# If UserStorageService is provided and variation was stored,
|
233
|
+
# Get the stored variation
|
234
|
+
# @param[String] :user_id
|
235
|
+
# @param[String] :campaign_key campaign identified
|
236
|
+
# @param[Hash] :user_campaign_map BucketMap consisting of stored user variation
|
237
|
+
#
|
238
|
+
# @return[Object, nil] if found then variation settings object otherwise None
|
239
|
+
|
240
|
+
def get_stored_variation(user_id, campaign_key, user_campaign_map)
|
241
|
+
if user_campaign_map[campaign_key] == campaign_key
|
242
|
+
variation_name = user_campaign_map[:variationName]
|
243
|
+
@logger.log(
|
244
|
+
LogLevelEnum::DEBUG,
|
245
|
+
format(
|
246
|
+
LogMessageEnum::DebugMessages::GETTING_STORED_VARIATION,
|
247
|
+
file: FILE,
|
248
|
+
campaign_key: campaign_key,
|
249
|
+
user_id: user_id,
|
250
|
+
variation_name: variation_name
|
251
|
+
)
|
252
|
+
)
|
253
|
+
return get_campaign_variation(
|
254
|
+
@settings_file,
|
255
|
+
campaign_key,
|
256
|
+
variation_name
|
257
|
+
)
|
258
|
+
end
|
259
|
+
|
260
|
+
@logger.log(
|
261
|
+
LogLevelEnum::DEBUG,
|
262
|
+
format(
|
263
|
+
LogMessageEnum::DebugMessages::NO_STORED_VARIATION,
|
264
|
+
file: FILE,
|
265
|
+
campaign_key: campaign_key,
|
266
|
+
user_id: user_id
|
267
|
+
)
|
268
|
+
)
|
269
|
+
nil
|
270
|
+
end
|
271
|
+
|
272
|
+
# If UserStorageService is provided, save the assigned variation
|
273
|
+
#
|
274
|
+
# @param[String] :user_id Unique user identifier
|
275
|
+
# @param[String] :campaign_key Unique campaign identifier
|
276
|
+
# @param[String] :variation_name Variation identifier
|
277
|
+
# @return[Boolean] true if found otherwise false
|
278
|
+
|
279
|
+
def save_user_storage(user_id, campaign_key, variation_name)
|
280
|
+
unless @user_storage_service
|
281
|
+
@logger.log(
|
282
|
+
LogLevelEnum::DEBUG,
|
283
|
+
format(LogMessageEnum::DebugMessages::NO_USER_STORAGE_SERVICE_SAVE, file: FILE)
|
284
|
+
)
|
285
|
+
return false
|
286
|
+
end
|
287
|
+
new_campaign_user_mapping = {}
|
288
|
+
new_campaign_user_mapping['campaign_key'] = campaign_key
|
289
|
+
new_campaign_user_mapping['user_id'] = user_id
|
290
|
+
new_campaign_user_mapping['variation_name'] = variation_name
|
291
|
+
|
292
|
+
@user_storage_service.set(new_campaign_user_mapping)
|
293
|
+
|
294
|
+
@logger.log(
|
295
|
+
LogLevelEnum::INFO,
|
296
|
+
format(LogMessageEnum::InfoMessages::SAVING_DATA_USER_STORAGE_SERVICE, file: FILE, user_id: user_id)
|
297
|
+
)
|
298
|
+
true
|
299
|
+
rescue StandardError
|
300
|
+
@logger.log(
|
301
|
+
LogLevelEnum::ERROR,
|
302
|
+
format(LogMessageEnum::ErrorMessages::SAVE_USER_STORAGE_SERVICE_FAILED, file: FILE, user_id: user_id)
|
303
|
+
)
|
304
|
+
false
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
data/lib/vwo/enums.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# Copyright 2019 Wingify Software Pvt. Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# frozen_string_literal: true
|
16
|
+
|
17
|
+
# rubocop:disable Metrics/LineLength
|
18
|
+
|
19
|
+
require 'logger'
|
20
|
+
|
21
|
+
class VWO
|
22
|
+
module Enums
|
23
|
+
module FileNameEnum
|
24
|
+
VWO_PATH = 'vwo'
|
25
|
+
UTIL_PATH = 'vwo/utils'
|
26
|
+
|
27
|
+
VWO = VWO_PATH + '/vwo'
|
28
|
+
Bucketer = VWO_PATH + '/core/bucketer'
|
29
|
+
VariationDecider = VWO_PATH + '/core/variation_decider'
|
30
|
+
EventDispatcher = VWO_PATH + '/services/event_dispatcher'
|
31
|
+
Logger = VWO_PATH + '/logger'
|
32
|
+
SettingsFileProcessor = VWO_PATH + '/services/settings_file_processor'
|
33
|
+
|
34
|
+
CampaignUtil = UTIL_PATH + '/campaign'
|
35
|
+
FunctionUtil = UTIL_PATH + '/function'
|
36
|
+
ImpressionUtil = UTIL_PATH + '/impression'
|
37
|
+
UuidUtil = UTIL_PATH + '/uuid'
|
38
|
+
ValidateUtil = UTIL_PATH + '/validations'
|
39
|
+
end
|
40
|
+
|
41
|
+
# Logging Enums
|
42
|
+
module LogMessageEnum
|
43
|
+
# Debug Messages
|
44
|
+
module DebugMessages
|
45
|
+
LOG_LEVEL_SET = '(%<file>s): Log level set to %<level>s'
|
46
|
+
SET_DEVELOPMENT_MODE = '(%<file>s): DEVELOPMENT mode is ON'
|
47
|
+
VALID_CONFIGURATION = '(%<file>s): SDK configuration and account settings are valid.'
|
48
|
+
CUSTOM_LOGGER_USED = '(%<file>s): Custom logger used'
|
49
|
+
SDK_INITIALIZED = '(%<file>s): SDK properly initialized'
|
50
|
+
SETTINGS_FILE_PROCESSED = '(%<file>s): Settings file processed'
|
51
|
+
NO_STORED_VARIATION = '(%<file>s): No stored variation for UserId:%<user_id>s for Campaign:%<campaign_key>s found in UserStorageService'
|
52
|
+
NO_USER_STORAGE_SERVICE_LOOKUP = '(%<file>s): No UserStorageService to look for stored data'
|
53
|
+
NO_USER_STORAGE_SERVICE_SAVE = '(%<file>s): No UserStorageService to save data'
|
54
|
+
GETTING_STORED_VARIATION = '(%<file>s): Got stored variation for UserId:%<user_id>s of Campaign:%<campaign_key>s as Variation: %<variation_name>s found in UserStorageService'
|
55
|
+
CHECK_USER_ELIGIBILITY_FOR_CAMPAIGN = '(%<file>s): campaign:%<campaign_key>s having traffic allocation:%<traffic_allocation>s assigned value:%<traffic_allocation>s to userId:%<user_id>s'
|
56
|
+
USER_HASH_BUCKET_VALUE = '(%<file>s): userId:%<user_id>s having hash:%<hash_value>s got bucketValue:%<bucket_value>s'
|
57
|
+
VARIATION_HASH_BUCKET_VALUE = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s having percent traffic:%<percent_traffic>s got hash-value:%<hash_value>s and bucket value:%<bucket_value>s'
|
58
|
+
IMPRESSION_FAILED = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s got variationName:%<variation_name>s inside method:%<method>s'
|
59
|
+
USER_NOT_PART_OF_CAMPAIGN = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s did not become part of campaign method:%<method>s'
|
60
|
+
UUID_FOR_USER = '(%<file>s): Uuid generated for userId:%<user_id>s and accountId:%<account_id>s is %<desired_uuid>s'
|
61
|
+
IMPRESSION_FOR_TRACK_USER = '(%<file>s): Impression built for track-user - %<properties>s'
|
62
|
+
IMPRESSION_FOR_TRACK_GOAL = '(%<file>s): Impression built for track-goal - %<properties>s'
|
63
|
+
GOT_VARIATION_FOR_USER = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s got variationName:%<variation_name>s'
|
64
|
+
end
|
65
|
+
|
66
|
+
# Info Messages
|
67
|
+
module InfoMessages
|
68
|
+
VARIATION_RANGE_ALLOCATION = '(%<file>s): Campaign:%<campaign_key>s having variations:%<variation_name>s with weight:%<variation_weight>s got range as: ( %<start>s - %<end>s ))'
|
69
|
+
VARIATION_ALLOCATED = '(%<file>s): UserId:%<user_id>s of Campaign:%<campaign_key>s got variation: %<variation_name>s'
|
70
|
+
LOOKING_UP_USER_STORAGE_SERVICE = '(%<file>s): Looked into UserStorageService for userId:%<user_id>s %<status>s'
|
71
|
+
SAVING_DATA_USER_STORAGE_SERVICE = '(%<file>s): Saving into UserStorageService for userId:%<user_id>s successful'
|
72
|
+
GOT_STORED_VARIATION = '(%<file>s): Got stored variation:%<variation_name>s of campaign:%<campaign_key>s for userId:%<user_id>s from UserStorageService'
|
73
|
+
NO_VARIATION_ALLOCATED = '(%<file>s): UserId:%<user_id>s of Campaign:%<campaign_key>s did not get any variation'
|
74
|
+
USER_ELIGIBILITY_FOR_CAMPAIGN = '(%<file>s): Is userId:%<user_id>s part of campaign? %<is_user_part>s'
|
75
|
+
AUDIENCE_CONDITION_NOT_MET = '(%<file>s): userId:%<user_id>s does not become part of campaign because of not meeting audience conditions'
|
76
|
+
GOT_VARIATION_FOR_USER = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s got variationName:%<variation_name>s'
|
77
|
+
USER_GOT_NO_VARIATION = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s did not allot any variation'
|
78
|
+
IMPRESSION_SUCCESS = '(%<file>s): Impression event - %<end_point>s was successfully received by VWO having main keys: accountId:%<account_id>s userId:%<user_id>s campaignId:%<campaign_id>s and variationId:%<variation_id>s'
|
79
|
+
INVALID_VARIATION_KEY = '(%<file>s): Variation was not assigned to userId:%<user_id>s for campaign:%<campaign_key>s'
|
80
|
+
end
|
81
|
+
|
82
|
+
# Warning Messages
|
83
|
+
module WarningMessages; end
|
84
|
+
|
85
|
+
# Error Messages
|
86
|
+
module ErrorMessages
|
87
|
+
SETTINGS_FILE_CORRUPTED = '(%<file>s): Settings file is corrupted. Please contact VWO Support for help.'
|
88
|
+
ACTIVATE_API_MISSING_PARAMS = '(%<file>s): "activate" API got bad parameters. It expects campaignTestKey(String) as first and userId(String) as second argument'
|
89
|
+
ACTIVATE_API_CONFIG_CORRUPTED = '(%<file>s): "activate" API has corrupted configuration'
|
90
|
+
GET_VARIATION_NAME_API_MISSING_PARAMS = '(%<file>s): "getVariation" API got bad parameters. It expects campaignTestKey(String) as first and userId(String) as second argument'
|
91
|
+
GET_VARIATION_API_CONFIG_CORRUPTED = '(%<file>s): "getVariation" API has corrupted configuration'
|
92
|
+
TRACK_API_MISSING_PARAMS = '(%<file>s): "track" API got bad parameters. It expects campaignTestKey(String) as first userId(String) as second and goalIdentifier(String/Number) as third argument. Fourth is revenueValue(Float/Number/String) and is required for revenue goal only.'
|
93
|
+
TRACK_API_CONFIG_CORRUPTED = '(%<file>s): "track" API has corrupted configuration'
|
94
|
+
TRACK_API_GOAL_NOT_FOUND = '(%<file>s): Goal:%<goal_identifier>s not found for campaign:%<campaign_key>s and userId:%<user_id>s'
|
95
|
+
TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL = '(%<file>s): Revenue value should be passed for revenue goal:%<goal_identifier>s for campaign:%<campaign_key>s and userId:%<user_id>s'
|
96
|
+
TRACK_API_VARIATION_NOT_FOUND = '(%<file>s): Variation not found for campaign:%<campaign_key>s and userId:%<user_id>s'
|
97
|
+
CAMPAIGN_NOT_RUNNING = '(%<file>s): API used:%<api>s - Campaign:%<campaign_key>s is not RUNNING. Please verify from VWO App'
|
98
|
+
LOOK_UP_USER_STORAGE_SERVICE_FAILED = '(%<file>s): Looking data from UserStorageService failed for userId:%<user_id>s'
|
99
|
+
SAVE_USER_STORAGE_SERVICE_FAILED = '(%<file>s): Saving data into UserStorageService failed for userId:%<user_id>s'
|
100
|
+
INVALID_CAMPAIGN = '(%<file>s): Invalid campaign passed to %<method>s of this file'
|
101
|
+
INVALID_USER_ID = '(%<file>s): Invalid userId:%<user_id>s passed to %<method>s of this file'
|
102
|
+
IMPRESSION_FAILED = '(%<file>s): Impression event could not be sent to VWO - %<end_point>s'
|
103
|
+
CUSTOM_LOGGER_MISCONFIGURED = '(%<file>s): Custom logger is provided but seems to have mis-configured. %<extra_info>s Please check the API Docs. Using default logger.'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
module LogLevelEnum
|
108
|
+
INFO = ::Logger::INFO
|
109
|
+
DEBUG = ::Logger::DEBUG
|
110
|
+
WARNING = ::Logger::WARN
|
111
|
+
ERROR = ::Logger::ERROR
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
# rubocop:enable Metrics/LineLength
|
data/lib/vwo/logger.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright 2019 Wingify Software Pvt. Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# frozen_string_literal: true
|
16
|
+
|
17
|
+
require 'logger'
|
18
|
+
|
19
|
+
class VWO
|
20
|
+
class Logger
|
21
|
+
@logger = nil
|
22
|
+
@logger_instance = nil
|
23
|
+
|
24
|
+
def self.get_instance(logger_instance = nil)
|
25
|
+
@@logger ||= VWO::Logger.new(logger_instance)
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(logger_instance)
|
29
|
+
@@logger_instance = logger_instance || ::Logger.new(STDOUT)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Override this method to handle logs in a custom manner
|
33
|
+
def log(level, message)
|
34
|
+
@@logger_instance.log(level, message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|