amplitude-experiment 1.2.4 → 1.2.6
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 +4 -4
- data/lib/amplitude-experiment.rb +1 -0
- data/lib/experiment/error.rb +11 -0
- data/lib/experiment/remote/client.rb +15 -5
- data/lib/experiment/user.rb +8 -1
- data/lib/experiment/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c2b4d645d6bc1a63154135eca42b2123dbaef5fb6597e77ea3c4d602235bbe7
|
4
|
+
data.tar.gz: b521d6b1f7af00b62fc9ec14e8c8e1db63a63b9330e8e73139fcf09ffb5f5dca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68d5921c26baf78c5f1dcff97e4b58124e35f5be6de93b02be240e593c12f67d32ecba973ea95cb8df66908132c280a55e94d9be2025f351c536129663359570
|
7
|
+
data.tar.gz: 5a66ce54c1ed89ae0bef261578ad006151c34292805aa6cf68725b7a61085089de4a96769401a52631fb2a57a759d89b0b7fe6a2e570ca25af49415badd5a1c2
|
data/lib/amplitude-experiment.rb
CHANGED
@@ -15,6 +15,7 @@ require 'experiment/local/assignment/assignment_service'
|
|
15
15
|
require 'experiment/local/assignment/assignment_config'
|
16
16
|
require 'experiment/util/lru_cache'
|
17
17
|
require 'experiment/util/hash'
|
18
|
+
require 'experiment/error'
|
18
19
|
|
19
20
|
# Amplitude Experiment Module
|
20
21
|
module AmplitudeExperiment
|
@@ -61,12 +61,14 @@ module AmplitudeExperiment
|
|
61
61
|
do_fetch(user, @config.fetch_timeout_millis)
|
62
62
|
rescue StandardError => e
|
63
63
|
@logger.error("[Experiment] Fetch failed: #{e.message}")
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
if should_retry_fetch?(e)
|
65
|
+
begin
|
66
|
+
retry_fetch(user)
|
67
|
+
rescue StandardError => err
|
68
|
+
@logger.error("[Experiment] Retry Fetch failed: #{err.message}")
|
69
|
+
end
|
68
70
|
end
|
69
|
-
|
71
|
+
raise e
|
70
72
|
end
|
71
73
|
|
72
74
|
# @param [User] user
|
@@ -108,6 +110,8 @@ module AmplitudeExperiment
|
|
108
110
|
end_time = Time.now
|
109
111
|
elapsed = (end_time - start_time) * 1000.0
|
110
112
|
@logger.debug("[Experiment] Fetch complete in #{elapsed.round(3)} ms")
|
113
|
+
raise FetchError.new(response.code.to_i, "Fetch error response: status=#{response.code} #{response.message}") if response.code != '200'
|
114
|
+
|
111
115
|
json = JSON.parse(response.body)
|
112
116
|
variants = parse_json_variants(json)
|
113
117
|
@logger.debug("[Experiment] Fetched variants: #{variants}")
|
@@ -140,5 +144,11 @@ module AmplitudeExperiment
|
|
140
144
|
user.library = "experiment-ruby-server/#{VERSION}"
|
141
145
|
user
|
142
146
|
end
|
147
|
+
|
148
|
+
def should_retry_fetch?(err)
|
149
|
+
return err.status_code < 400 || err.status_code >= 500 || err.status_code == 429 if err.is_a?(FetchError)
|
150
|
+
|
151
|
+
true
|
152
|
+
end
|
143
153
|
end
|
144
154
|
end
|
data/lib/experiment/user.rb
CHANGED
@@ -28,6 +28,10 @@ module AmplitudeExperiment
|
|
28
28
|
# @return [String, nil] the value of dma
|
29
29
|
attr_accessor :dma
|
30
30
|
|
31
|
+
# Predefined field, must be manually provided
|
32
|
+
# @return [String, nil] the value of ip address
|
33
|
+
attr_accessor :ip_address
|
34
|
+
|
31
35
|
# Predefined field, must be manually provided
|
32
36
|
# @return [String, nil] the value of language
|
33
37
|
attr_accessor :language
|
@@ -74,6 +78,7 @@ module AmplitudeExperiment
|
|
74
78
|
# @param [String, nil] city Predefined field, must be manually provided
|
75
79
|
# @param [String, nil] region Predefined field, must be manually provided
|
76
80
|
# @param [String, nil] dma Predefined field, must be manually provided
|
81
|
+
# @param [String, nil] ip_address Predefined field, must be manually provided
|
77
82
|
# @param [String, nil] language Predefined field, must be manually provided
|
78
83
|
# @param [String, nil] platform Predefined field, must be manually provided
|
79
84
|
# @param [String, nil] version Predefined field, must be manually provided
|
@@ -84,7 +89,7 @@ module AmplitudeExperiment
|
|
84
89
|
# @param [String, nil] carrier Predefined field, must be manually provided
|
85
90
|
# @param [String, nil] library Predefined field, auto populated, can be manually overridden
|
86
91
|
# @param [Hash, nil] user_properties Custom user properties
|
87
|
-
def initialize(device_id: nil, user_id: nil, country: nil, city: nil, region: nil, dma: nil, language: nil,
|
92
|
+
def initialize(device_id: nil, user_id: nil, country: nil, city: nil, region: nil, dma: nil, ip_address: nil, language: nil,
|
88
93
|
platform: nil, version: nil, os: nil, device_manufacturer: nil, device_brand: nil,
|
89
94
|
device_model: nil, carrier: nil, library: nil, user_properties: nil)
|
90
95
|
@device_id = device_id
|
@@ -93,6 +98,7 @@ module AmplitudeExperiment
|
|
93
98
|
@city = city
|
94
99
|
@region = region
|
95
100
|
@dma = dma
|
101
|
+
@ip_address = ip_address
|
96
102
|
@language = language
|
97
103
|
@platform = platform
|
98
104
|
@version = version
|
@@ -115,6 +121,7 @@ module AmplitudeExperiment
|
|
115
121
|
city: @city,
|
116
122
|
region: @region,
|
117
123
|
dma: @dma,
|
124
|
+
ip_address: @ip_address,
|
118
125
|
language: @language,
|
119
126
|
platform: @platform,
|
120
127
|
version: @version,
|
data/lib/experiment/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amplitude-experiment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amplitude
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- lib/amplitude/utils.rb
|
177
177
|
- lib/amplitude/workers.rb
|
178
178
|
- lib/experiment/cookie.rb
|
179
|
+
- lib/experiment/error.rb
|
179
180
|
- lib/experiment/factory.rb
|
180
181
|
- lib/experiment/local/assignment/assignment.rb
|
181
182
|
- lib/experiment/local/assignment/assignment_config.rb
|