splitclient-rb 2.0.1 → 3.0.2
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/CHANGES.txt +12 -0
- data/NEWS +4 -0
- data/README.md +45 -11
- data/lib/cache/adapters/adapter.rb +23 -0
- data/lib/cache/adapters/memory_adapter.rb +46 -0
- data/lib/cache/repositories/repository.rb +25 -0
- data/lib/cache/repositories/segments_repository.rb +52 -0
- data/lib/cache/repositories/splits_repository.rb +51 -0
- data/lib/cache/stores/sdk_blocker.rb +47 -0
- data/lib/cache/stores/segment_store.rb +71 -0
- data/lib/cache/stores/split_store.rb +64 -0
- data/lib/engine/api/client.rb +29 -0
- data/lib/engine/api/segments.rb +60 -0
- data/lib/engine/api/splits.rb +58 -0
- data/lib/{splitclient-engine → engine}/evaluator/splitter.rb +0 -0
- data/lib/{splitclient-engine → engine}/impressions/impressions.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/all_keys_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/between_matcher.rb +2 -0
- data/lib/{splitclient-engine → engine}/matchers/combiners.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/combining_matcher.rb +1 -1
- data/lib/{splitclient-engine → engine}/matchers/equal_to_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/greater_than_or_equal_to_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/less_than_or_equal_to_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/negation_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/matchers/user_defined_segment_matcher.rb +4 -21
- data/lib/{splitclient-engine → engine}/matchers/whitelist_matcher.rb +0 -0
- data/lib/{splitclient-engine → engine}/metrics/binary_search_latency_tracker.rb +0 -0
- data/lib/{splitclient-engine → engine}/metrics/metrics.rb +0 -0
- data/lib/{splitclient-engine → engine}/parser/condition.rb +5 -7
- data/lib/{splitclient-engine → engine}/parser/partition.rb +0 -0
- data/lib/{splitclient-engine → engine}/parser/split.rb +11 -3
- data/lib/{splitclient-engine → engine}/parser/split_adapter.rb +20 -184
- data/lib/engine/parser/split_treatment.rb +65 -0
- data/lib/{splitclient-engine → engine}/partitions/treatments.rb +0 -0
- data/lib/exceptions/sdk_blocker_timeout_expired_exception.rb +4 -0
- data/lib/splitclient-rb.rb +31 -23
- data/lib/splitclient-rb/split_config.rb +41 -4
- data/lib/splitclient-rb/split_factory.rb +50 -20
- data/lib/splitclient-rb/version.rb +1 -1
- data/splitclient-rb.gemspec +2 -0
- metadata +62 -25
- data/lib/splitclient-cache/local_store.rb +0 -45
- data/lib/splitclient-engine/parser/segment.rb +0 -84
- data/lib/splitclient-engine/parser/segment_parser.rb +0 -46
- data/lib/splitclient-engine/parser/split_parser.rb +0 -122
@@ -0,0 +1,29 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Api
|
3
|
+
class Client
|
4
|
+
def call_api(path, config, api_key, params = {})
|
5
|
+
api_client.get(config.base_uri + path, params) do |req|
|
6
|
+
req.headers['Authorization'] = 'Bearer ' + api_key
|
7
|
+
req.headers['SplitSDKVersion'] = SplitIoClient::SplitFactory.sdk_version
|
8
|
+
req.headers['SplitSDKMachineName'] = config.machine_name
|
9
|
+
req.headers['SplitSDKMachineIP'] = config.machine_ip
|
10
|
+
req.headers['Accept-Encoding'] = 'gzip'
|
11
|
+
|
12
|
+
req.options.open_timeout = config.connection_timeout
|
13
|
+
req.options.timeout = config.read_timeout
|
14
|
+
|
15
|
+
config.logger.debug("GET #{config.base_uri + path}") if config.debug_enabled
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def api_client
|
22
|
+
@api_client ||= Faraday.new do |builder|
|
23
|
+
builder.use FaradayMiddleware::Gzip
|
24
|
+
builder.adapter :net_http_persistent
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Api
|
3
|
+
class Segments < Client
|
4
|
+
def initialize(api_key, config, metrics, segments_repository)
|
5
|
+
@config = config
|
6
|
+
@metrics = metrics
|
7
|
+
@api_key = api_key
|
8
|
+
@segments_repository = segments_repository
|
9
|
+
end
|
10
|
+
|
11
|
+
def store_segments_by_names(names)
|
12
|
+
start = Time.now
|
13
|
+
prefix = 'segmentChangeFetcher'
|
14
|
+
|
15
|
+
return if names.nil? || names.empty?
|
16
|
+
|
17
|
+
names.each do |name|
|
18
|
+
since = @segments_repository.get_change_number(name)
|
19
|
+
while true
|
20
|
+
fetch_segments(name, prefix, since).each { |segment| @segments_repository.add_to_segment(segment) }
|
21
|
+
@config.logger.debug("Segment #{name} fetched before: #{since}, till: #{@segments_repository.get_change_number(name)}") if @config.debug_enabled
|
22
|
+
|
23
|
+
break if (since.to_i >= @segments_repository.get_change_number(name).to_i)
|
24
|
+
since = @segments_repository.get_change_number(name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
latency = (Time.now - start) * 1000.0
|
29
|
+
@metrics.time(prefix + '.time', latency)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def fetch_segments(name, prefix, since)
|
35
|
+
segments = []
|
36
|
+
segment = call_api('/segmentChanges/' + name, @config, @api_key, { since: since })
|
37
|
+
|
38
|
+
if segment.status / 100 == 2
|
39
|
+
segment_content = JSON.parse(segment.body, symbolize_names: true)
|
40
|
+
@segments_repository.set_change_number(name, segment_content[:till])
|
41
|
+
@metrics.count(prefix + '.status.' + segment.status.to_s, 1)
|
42
|
+
|
43
|
+
if @config.debug_enabled
|
44
|
+
@config.logger.debug("\'#{segment_content[:name]}\' segment retrieved.")
|
45
|
+
@config.logger.debug("\'#{segment_content[:name]}\' #{segment_content[:added].size} added keys") if segment_content[:added].size > 0
|
46
|
+
@config.logger.debug("\'#{segment_content[:name]}\' #{segment_content[:removed].size} removed keys") if segment_content[:removed].size > 0
|
47
|
+
end
|
48
|
+
@config.logger.debug("#{segment_content}") if @config.transport_debug_enabled
|
49
|
+
|
50
|
+
segments << segment_content
|
51
|
+
else
|
52
|
+
@config.logger.error('Unexpected result from API call')
|
53
|
+
@metrics.count(prefix + '.status.' + segment.status.to_s, 1)
|
54
|
+
end
|
55
|
+
|
56
|
+
segments
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Api
|
3
|
+
class Splits < Client
|
4
|
+
def initialize(api_key, config, metrics)
|
5
|
+
@api_key = api_key
|
6
|
+
@config = config
|
7
|
+
@metrics = metrics
|
8
|
+
end
|
9
|
+
|
10
|
+
def since(since)
|
11
|
+
start = Time.now
|
12
|
+
prefix = 'splitChangeFetcher'
|
13
|
+
splits = call_api('/splitChanges', @config, @api_key, {:since => since})
|
14
|
+
|
15
|
+
if splits.status / 100 == 2
|
16
|
+
result = splits_with_segment_names(splits.body)
|
17
|
+
|
18
|
+
@metrics.count(prefix + '.status.' + splits.status.to_s, 1)
|
19
|
+
|
20
|
+
@config.logger.debug("#{result[:splits].length} splits retrieved. since=#{since}") if @config.debug_enabled and result[:splits].length > 0
|
21
|
+
@config.logger.debug("#{result}") if @config.transport_debug_enabled
|
22
|
+
else
|
23
|
+
@metrics.count(prefix + '.status.' + splits.status.to_s, 1)
|
24
|
+
|
25
|
+
@config.logger.error('Unexpected result from API call')
|
26
|
+
end
|
27
|
+
|
28
|
+
latency = (Time.now - start) * 1000.0
|
29
|
+
@metrics.time(prefix + '.time', latency)
|
30
|
+
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def splits_with_segment_names(splits_json)
|
37
|
+
parsed_splits = JSON.parse(splits_json, symbolize_names: true)
|
38
|
+
|
39
|
+
parsed_splits[:segment_names] =
|
40
|
+
parsed_splits[:splits].each_with_object(Set.new) do |split, splits|
|
41
|
+
splits << segment_names(split)
|
42
|
+
end.flatten
|
43
|
+
|
44
|
+
parsed_splits
|
45
|
+
end
|
46
|
+
|
47
|
+
def segment_names(split)
|
48
|
+
split[:conditions].each_with_object(Set.new) do |condition, names|
|
49
|
+
condition[:matcherGroup][:matchers].each do |matcher|
|
50
|
+
next if matcher[:userDefinedSegmentMatcherData].nil?
|
51
|
+
|
52
|
+
names << matcher[:userDefinedSegmentMatcherData][:segmentName]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,13 +7,10 @@ module SplitIoClient
|
|
7
7
|
|
8
8
|
attr_reader :matcher_type
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
def initialize(segment)
|
10
|
+
def initialize(segments_repository, segment_name)
|
13
11
|
@matcher_type = "IN_SEGMENT"
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
@segments_repository = segments_repository
|
13
|
+
@segment_name = segment_name
|
17
14
|
end
|
18
15
|
|
19
16
|
#
|
@@ -23,11 +20,7 @@ module SplitIoClient
|
|
23
20
|
#
|
24
21
|
# @return [boolean] evaluation of the key against the segment
|
25
22
|
def match?(key, attributes)
|
26
|
-
|
27
|
-
unless @segment.users.nil?
|
28
|
-
matches = @segment.users.include?(key)
|
29
|
-
end
|
30
|
-
matches
|
23
|
+
@segments_repository.in_segment?(@segment_name, key)
|
31
24
|
end
|
32
25
|
|
33
26
|
#
|
@@ -47,15 +40,5 @@ module SplitIoClient
|
|
47
40
|
false
|
48
41
|
end
|
49
42
|
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# function to print string value for this matcher
|
53
|
-
#
|
54
|
-
# @reutrn [string] string value of this matcher
|
55
|
-
def to_s
|
56
|
-
'in segment ' + @segment.name
|
57
|
-
end
|
58
|
-
|
59
43
|
end
|
60
|
-
|
61
44
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -45,9 +45,9 @@ module SplitIoClient
|
|
45
45
|
#returns UserDefinedSegmentMatcher[object]
|
46
46
|
def matcher_in_segment params
|
47
47
|
matcher = params[:matcher]
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
segment_name = matcher[:userDefinedSegmentMatcherData] && matcher[:userDefinedSegmentMatcherData][:segmentName]
|
49
|
+
|
50
|
+
UserDefinedSegmentMatcher.new(params[:segments_repository], segment_name)
|
51
51
|
end
|
52
52
|
|
53
53
|
#returns WhitelistMatcher[object] the whitelist for this condition in case it has a whitelist matcher
|
@@ -125,10 +125,8 @@ module SplitIoClient
|
|
125
125
|
|
126
126
|
#
|
127
127
|
# @return [boolean] true if the condition is empty false otherwise
|
128
|
-
def
|
129
|
-
@data.empty?
|
128
|
+
def empty?
|
129
|
+
@data.empty?
|
130
130
|
end
|
131
|
-
|
132
131
|
end
|
133
|
-
|
134
132
|
end
|
File without changes
|
@@ -46,8 +46,8 @@ module SplitIoClient
|
|
46
46
|
|
47
47
|
#
|
48
48
|
# @return [boolean] true if the condition is empty false otherwise
|
49
|
-
def
|
50
|
-
@data.empty?
|
49
|
+
def empty?
|
50
|
+
@data.empty?
|
51
51
|
end
|
52
52
|
|
53
53
|
#
|
@@ -63,6 +63,14 @@ module SplitIoClient
|
|
63
63
|
conditions_list
|
64
64
|
end
|
65
65
|
|
66
|
+
def to_h
|
67
|
+
{
|
68
|
+
name: name,
|
69
|
+
seed: seed,
|
70
|
+
status: status,
|
71
|
+
killed: killed?,
|
72
|
+
conditions: conditions
|
73
|
+
}
|
74
|
+
end
|
66
75
|
end
|
67
|
-
|
68
76
|
end
|
@@ -31,21 +31,26 @@ module SplitIoClient
|
|
31
31
|
|
32
32
|
attr_reader :impressions_producer
|
33
33
|
|
34
|
+
attr_reader :splits_repository, :segments_repository
|
35
|
+
|
34
36
|
#
|
35
37
|
# Creates a new split api adapter instance that consumes split api endpoints
|
36
38
|
#
|
37
39
|
# @param api_key [String] the API key for your split account
|
38
40
|
#
|
39
41
|
# @return [SplitIoClient] split.io client instance
|
40
|
-
def initialize(api_key, config)
|
42
|
+
def initialize(api_key, config, splits_repository, segments_repository, sdk_blocker)
|
41
43
|
|
42
44
|
@api_key = api_key
|
43
45
|
@config = config
|
44
|
-
@parsed_splits = SplitParser.new(@config.logger)
|
45
|
-
@parsed_segments = SegmentParser.new(@config.logger)
|
46
46
|
@impressions = Impressions.new(100)
|
47
47
|
@metrics = Metrics.new(100)
|
48
48
|
|
49
|
+
@splits_repository = splits_repository
|
50
|
+
@segments_repository = segments_repository
|
51
|
+
|
52
|
+
@sdk_blocker = sdk_blocker
|
53
|
+
|
49
54
|
@api_client = Faraday.new do |builder|
|
50
55
|
builder.use FaradayMiddleware::Gzip
|
51
56
|
builder.adapter :net_http_persistent
|
@@ -55,6 +60,7 @@ module SplitIoClient
|
|
55
60
|
@segments_consumer = create_segments_api_consumer
|
56
61
|
@metrics_producer = create_metrics_api_producer
|
57
62
|
@impressions_producer = create_impressions_api_producer
|
63
|
+
|
58
64
|
end
|
59
65
|
|
60
66
|
#
|
@@ -64,78 +70,11 @@ module SplitIoClient
|
|
64
70
|
#
|
65
71
|
# @return [void]
|
66
72
|
def create_splits_api_consumer
|
67
|
-
|
68
|
-
loop do
|
69
|
-
begin
|
70
|
-
#splits fetcher
|
71
|
-
splits_arr = []
|
72
|
-
data = get_splits(@parsed_splits.since)
|
73
|
-
if data
|
74
|
-
data[:splits].each do |split|
|
75
|
-
splits_arr << SplitIoClient::Split.new(split)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
if @parsed_splits.is_empty?
|
80
|
-
@parsed_splits.splits = splits_arr
|
81
|
-
else
|
82
|
-
refresh_splits(splits_arr)
|
83
|
-
end
|
84
|
-
@parsed_splits.since = data[:till]
|
85
|
-
|
86
|
-
random_interval = randomize_interval @config.features_refresh_rate
|
87
|
-
sleep(random_interval)
|
88
|
-
rescue StandardError => error
|
89
|
-
@config.log_found_exception(__method__.to_s, error)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
73
|
+
SplitIoClient::Cache::Stores::SplitStore.new(@splits_repository, @config, @api_key, @metrics, @sdk_blocker).call
|
93
74
|
end
|
94
75
|
|
95
76
|
def create_segments_api_consumer
|
96
|
-
|
97
|
-
loop do
|
98
|
-
begin
|
99
|
-
#segments fetcher
|
100
|
-
segments_arr = []
|
101
|
-
segment_data = get_segments(@parsed_splits.get_used_segments)
|
102
|
-
segment_data.each do |segment|
|
103
|
-
segments_arr << SplitIoClient::Segment.new(segment)
|
104
|
-
end
|
105
|
-
if @parsed_segments.is_empty?
|
106
|
-
@parsed_segments.segments = segments_arr
|
107
|
-
@parsed_segments.segments.map { |s| s.refresh_users(s.added, s.removed) }
|
108
|
-
else
|
109
|
-
refresh_segments(segments_arr)
|
110
|
-
end
|
111
|
-
|
112
|
-
random_interval = randomize_interval @config.segments_refresh_rate
|
113
|
-
sleep(random_interval)
|
114
|
-
rescue StandardError => error
|
115
|
-
@config.log_found_exception(__method__.to_s, error)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
#
|
122
|
-
# helper method to execute a get request to the provided endpoint
|
123
|
-
#
|
124
|
-
# @param path [string] api endpoint path
|
125
|
-
# @param params [object] hash of params that will be added to the request
|
126
|
-
#
|
127
|
-
# @return [object] response to the request
|
128
|
-
def call_api(path, params = {})
|
129
|
-
@api_client.get @config.base_uri + path, params do |req|
|
130
|
-
req.headers['Authorization'] = 'Bearer ' + @api_key
|
131
|
-
req.headers['SplitSDKVersion'] = SplitIoClient::SplitFactory.sdk_version
|
132
|
-
req.headers['SplitSDKMachineName'] = @config.machine_name
|
133
|
-
req.headers['SplitSDKMachineIP'] = @config.machine_ip
|
134
|
-
req.headers['Accept-Encoding'] = 'gzip'
|
135
|
-
req.options.open_timeout = @config.connection_timeout
|
136
|
-
req.options.timeout = @config.read_timeout
|
137
|
-
@config.logger.debug("GET #{@config.base_uri + path}") if @config.debug_enabled
|
138
|
-
end
|
77
|
+
SplitIoClient::Cache::Stores::SegmentStore.new(@segments_repository, @config, @api_key, @metrics, @sdk_blocker).call
|
139
78
|
end
|
140
79
|
|
141
80
|
#
|
@@ -159,105 +98,6 @@ module SplitIoClient
|
|
159
98
|
end
|
160
99
|
end
|
161
100
|
|
162
|
-
#
|
163
|
-
# helper method to fetch splits by using the appropriate api endpoint
|
164
|
-
#
|
165
|
-
# @param since [int] since value for the last fetch
|
166
|
-
#
|
167
|
-
# @return splits [object] splits structure in json format
|
168
|
-
def get_splits(since)
|
169
|
-
result = nil
|
170
|
-
start = Time.now
|
171
|
-
prefix = 'splitChangeFetcher'
|
172
|
-
|
173
|
-
splits = call_api('/splitChanges', {:since => since})
|
174
|
-
|
175
|
-
if splits.status / 100 == 2
|
176
|
-
result = JSON.parse(splits.body, symbolize_names: true)
|
177
|
-
@metrics.count(prefix + '.status.' + splits.status.to_s, 1)
|
178
|
-
@config.logger.info("#{result[:splits].length} splits retrieved.")
|
179
|
-
@config.logger.debug("#{result}") if @config.debug_enabled
|
180
|
-
else
|
181
|
-
@config.logger.error('Unexpected result from API call')
|
182
|
-
@metrics.count(prefix + '.status.' + splits.status.to_s, 1)
|
183
|
-
end
|
184
|
-
|
185
|
-
latency = (Time.now - start) * 1000.0
|
186
|
-
@metrics.time(prefix + '.time', latency)
|
187
|
-
|
188
|
-
result
|
189
|
-
end
|
190
|
-
|
191
|
-
#
|
192
|
-
# helper method to refresh splits values after a new fetch with changes
|
193
|
-
#
|
194
|
-
# @param splits_arr [object] array of splits to refresh
|
195
|
-
#
|
196
|
-
# @return [void]
|
197
|
-
def refresh_splits(splits_arr)
|
198
|
-
feature_names = splits_arr.map { |s| s.name }
|
199
|
-
@parsed_splits.splits.delete_if { |sp| feature_names.include?(sp.name) }
|
200
|
-
@parsed_splits.splits += splits_arr
|
201
|
-
end
|
202
|
-
|
203
|
-
#
|
204
|
-
# helper method to fetch segments by using the appropriate api endpoint
|
205
|
-
#
|
206
|
-
# @param names [object] array of segment names that must be fetched
|
207
|
-
#
|
208
|
-
# @return segments [object] segments structure in json format
|
209
|
-
def get_segments(names)
|
210
|
-
segments = []
|
211
|
-
start = Time.now
|
212
|
-
prefix = 'segmentChangeFetcher'
|
213
|
-
|
214
|
-
names.each do |name|
|
215
|
-
curr_segment = @parsed_segments.get_segment(name)
|
216
|
-
since = curr_segment.nil? ? -1 : curr_segment.till
|
217
|
-
|
218
|
-
while true
|
219
|
-
segment = call_api('/segmentChanges/' + name, {:since => since})
|
220
|
-
|
221
|
-
if segment.status / 100 == 2
|
222
|
-
segment_content = JSON.parse(segment.body, symbolize_names: true)
|
223
|
-
@parsed_segments.since = segment_content[:till]
|
224
|
-
@metrics.count(prefix + '.status.' + segment.status.to_s, 1)
|
225
|
-
@config.logger.info("\'#{segment_content[:name]}\' segment retrieved.")
|
226
|
-
@config.logger.debug("#{segment_content}") if @config.debug_enabled
|
227
|
-
segments << segment_content
|
228
|
-
else
|
229
|
-
@config.logger.error('Unexpected result from API call')
|
230
|
-
@metrics.count(prefix + '.status.' + segment.status.to_s, 1)
|
231
|
-
end
|
232
|
-
break if (since.to_i >= @parsed_segments.since.to_i)
|
233
|
-
since = @parsed_segments.since
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
latency = (Time.now - start) * 1000.0
|
238
|
-
@metrics.time(prefix + '.time', latency)
|
239
|
-
|
240
|
-
segments
|
241
|
-
end
|
242
|
-
|
243
|
-
#
|
244
|
-
# helper method to refresh segments values after a new fetch with changes
|
245
|
-
#
|
246
|
-
# @param segments_arr [object] array of segments to refresh
|
247
|
-
#
|
248
|
-
# @return [void]
|
249
|
-
def refresh_segments(segments_arr)
|
250
|
-
segment_names = @parsed_segments.segments.map { |s| s.name }
|
251
|
-
segments_arr.each do |s|
|
252
|
-
if segment_names.include?(s.name)
|
253
|
-
segment_to_update = @parsed_segments.get_segment(s.name)
|
254
|
-
segment_to_update.refresh_users(s.added, s.removed)
|
255
|
-
else
|
256
|
-
@parsed_segments.segments << s
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
101
|
#
|
262
102
|
# @return parsed_splits [object] parsed splits for this adapter
|
263
103
|
def parsed_splits
|
@@ -315,7 +155,7 @@ module SplitIoClient
|
|
315
155
|
# @return [void]
|
316
156
|
def post_impressions
|
317
157
|
if @impressions.queue.empty?
|
318
|
-
@config.logger.
|
158
|
+
@config.logger.debug('No impressions to report.') if @config.debug_enabled
|
319
159
|
else
|
320
160
|
popped_impressions = @impressions.clear
|
321
161
|
test_impression_array = []
|
@@ -333,7 +173,7 @@ module SplitIoClient
|
|
333
173
|
end
|
334
174
|
|
335
175
|
if filtered.empty?
|
336
|
-
@config.logger.
|
176
|
+
@config.logger.debug('No impressions to report post filtering.') if @config.debug_enabled
|
337
177
|
else
|
338
178
|
test_impression = {}
|
339
179
|
key_impressions = []
|
@@ -351,8 +191,7 @@ module SplitIoClient
|
|
351
191
|
if res.status / 100 != 2
|
352
192
|
@config.logger.error("Unexpected status code while posting impressions: #{res.status}")
|
353
193
|
else
|
354
|
-
@config.logger.
|
355
|
-
@config.logger.debug("#{test_impression_array}")if @config.debug_enabled
|
194
|
+
@config.logger.debug("Impressions reported: #{test_impression_array}") if @config.debug_enabled
|
356
195
|
end
|
357
196
|
end
|
358
197
|
end
|
@@ -365,7 +204,7 @@ module SplitIoClient
|
|
365
204
|
# @return [void]
|
366
205
|
def post_metrics
|
367
206
|
if @metrics.latencies.empty?
|
368
|
-
@config.logger.
|
207
|
+
@config.logger.debug('No latencies to report.') if @config.debug_enabled
|
369
208
|
else
|
370
209
|
@metrics.latencies.each do |l|
|
371
210
|
metrics_time = {}
|
@@ -374,15 +213,14 @@ module SplitIoClient
|
|
374
213
|
if res.status / 100 != 2
|
375
214
|
@config.logger.error("Unexpected status code while posting time metrics: #{res.status}")
|
376
215
|
else
|
377
|
-
@config.logger.
|
378
|
-
@config.logger.debug("#{metrics_time}") if @config.debug_enabled
|
216
|
+
@config.logger.debug("Metric time reported: #{metrics_time}") if @config.debug_enabled
|
379
217
|
end
|
380
218
|
end
|
381
219
|
end
|
382
220
|
@metrics.latencies.clear
|
383
221
|
|
384
222
|
if @metrics.counts.empty?
|
385
|
-
@config.logger.
|
223
|
+
@config.logger.debug('No counts to report.') if @config.debug_enabled
|
386
224
|
else
|
387
225
|
@metrics.counts.each do |c|
|
388
226
|
metrics_count = {}
|
@@ -391,15 +229,14 @@ module SplitIoClient
|
|
391
229
|
if res.status / 100 != 2
|
392
230
|
@config.logger.error("Unexpected status code while posting count metrics: #{res.status}")
|
393
231
|
else
|
394
|
-
@config.logger.
|
395
|
-
@config.logger.debug("#{metrics_count}") if @config.debug_enabled
|
232
|
+
@config.logger.debug("Metric counts reported: #{metrics_count}") if @config.debug_enabled
|
396
233
|
end
|
397
234
|
end
|
398
235
|
end
|
399
236
|
@metrics.counts.clear
|
400
237
|
|
401
238
|
if @metrics.gauges.empty?
|
402
|
-
@config.logger.
|
239
|
+
@config.logger.debug('No gauges to report.') if @config.debug_enabled
|
403
240
|
else
|
404
241
|
@metrics.gauges.each do |g|
|
405
242
|
metrics_gauge = {}
|
@@ -408,8 +245,7 @@ module SplitIoClient
|
|
408
245
|
if res.status / 100 != 2
|
409
246
|
@config.logger.error("Unexpected status code while posting gauge metrics: #{res.status}")
|
410
247
|
else
|
411
|
-
@config.logger.
|
412
|
-
@config.logger.debug("#{metrics_gauge}") if @config.debug_enabled
|
248
|
+
@config.logger.debug("Metric gauge reported: #{metrics_gauge}") if @config.debug_enabled
|
413
249
|
end
|
414
250
|
end
|
415
251
|
end
|