splitclient-rb 3.2.3 → 3.2.4.pre.rc1
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 +3 -0
- data/Detailed-README.md +16 -0
- data/lib/cache/repositories/impressions/redis_repository.rb +16 -12
- data/lib/cache/repositories/metrics/redis_repository.rb +8 -8
- data/lib/cache/repositories/repository.rb +4 -0
- data/lib/cache/senders/impressions_formatter.rb +6 -6
- data/lib/engine/api/client.rb +9 -9
- data/lib/splitclient-rb/clients/localhost_split_client.rb +1 -1
- data/lib/splitclient-rb/clients/split_client.rb +0 -8
- data/lib/splitclient-rb/split_config.rb +8 -10
- data/lib/splitclient-rb/version.rb +1 -1
- data/splitio.yml.example +1 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f0c2bd79b5a4b89a67fbf60f5df88573ea52e82
|
4
|
+
data.tar.gz: 5a5921c802fe03065300445e4e1c6c57ff554c03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e9e5f105dc9435aaefc6784fb4d1fe561af0b9fa143f294d573da0255bfb4e76e6fb49d25549bb6fc0457ee92811ec3f2e4e5038f70aee75501cccf7cfbfc68
|
7
|
+
data.tar.gz: 207a06c7c9cc25f78625f43d48be2533c28f1c0c5c49090a3f1b0084c8a4179dc038ff7e7656577f004076208b8eef21f9dac9b2b60f75ddfed6d6537b564131
|
data/CHANGES.txt
CHANGED
data/Detailed-README.md
CHANGED
@@ -174,6 +174,22 @@ To use Redis, you have to include `redis-rb` in your app's Gemfile.
|
|
174
174
|
|
175
175
|
*default value* = `memory`
|
176
176
|
|
177
|
+
**language** : SDK runner language (used in metrics/impressions Redis namespace)
|
178
|
+
|
179
|
+
*default value* = `'ruby'`
|
180
|
+
|
181
|
+
**version** : SDK runner version (used in metrics/impressions Redis namespace)
|
182
|
+
|
183
|
+
*default value* = `current version of Ruby SDK`
|
184
|
+
|
185
|
+
**machine_ip** : SDK runner machine ip (used in metrics/impressions Redis namespace)
|
186
|
+
|
187
|
+
*default value* = `current host's ip`
|
188
|
+
|
189
|
+
**machine_name** : SDK runner machine name (used in metrics/impressions Redis namespace)
|
190
|
+
|
191
|
+
*default value* = `current hostname`
|
192
|
+
|
177
193
|
**redis_url** : Redis URL or hash with configuration for SDK to connect to.
|
178
194
|
|
179
195
|
*default value* = `'redis://127.0.0.1:6379/0'`
|
@@ -13,8 +13,8 @@ module SplitIoClient
|
|
13
13
|
# Store impression data in Redis
|
14
14
|
def add(split_name, data)
|
15
15
|
@adapter.add_to_set(
|
16
|
-
|
17
|
-
data.
|
16
|
+
impressions_metrics_key("impressions.#{split_name}"),
|
17
|
+
data.to_json
|
18
18
|
)
|
19
19
|
end
|
20
20
|
|
@@ -23,13 +23,12 @@ module SplitIoClient
|
|
23
23
|
treatments_labels_change_numbers.each_slice(IMPRESSIONS_SLICE) do |treatments_labels_change_numbers_slice|
|
24
24
|
treatments_labels_change_numbers_slice.each do |split_name, treatment_label_change_number|
|
25
25
|
add(split_name,
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
)
|
26
|
+
'keyName' => key,
|
27
|
+
'bucketingKey' => bucketing_key,
|
28
|
+
'treatment' => treatment_label_change_number[:treatment],
|
29
|
+
'label' => @config.labels_enabled ? treatment_label_change_number[:label] : nil,
|
30
|
+
'changeNumber' => treatment_label_change_number[:change_number],
|
31
|
+
'time' => time)
|
33
32
|
end
|
34
33
|
end
|
35
34
|
end
|
@@ -39,14 +38,19 @@ module SplitIoClient
|
|
39
38
|
# delete fetched impressions afterwards
|
40
39
|
def clear
|
41
40
|
impressions = impression_keys.each_with_object([]) do |key, memo|
|
42
|
-
|
41
|
+
ip = key.split('/')[-2] # 'prefix/sdk_lang/ip/impressions.name' -> ip
|
42
|
+
if ip.nil?
|
43
|
+
@config.logger.warn("Impressions IP parse error for key: #{key}")
|
44
|
+
next
|
45
|
+
end
|
46
|
+
split_name = key.split('.').last
|
43
47
|
members = @adapter.random_set_elements(key, @config.impressions_queue_size)
|
44
48
|
members.each do |impression|
|
45
49
|
parsed_impression = JSON.parse(impression)
|
46
50
|
|
47
51
|
memo << {
|
48
|
-
feature:
|
49
|
-
impressions: parsed_impression
|
52
|
+
feature: split_name,
|
53
|
+
impressions: parsed_impression,
|
50
54
|
ip: ip
|
51
55
|
}
|
52
56
|
end
|
@@ -9,14 +9,14 @@ module SplitIoClient
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def add_count(counter, delta)
|
12
|
-
prefixed_name =
|
12
|
+
prefixed_name = impressions_metrics_key("count.#{counter}")
|
13
13
|
counts = @adapter.find_strings_by_prefix(prefixed_name)
|
14
14
|
|
15
15
|
@adapter.inc(prefixed_name, delta)
|
16
16
|
end
|
17
17
|
|
18
18
|
def add_latency(operation, time_in_ms, binary_search)
|
19
|
-
prefixed_name =
|
19
|
+
prefixed_name = impressions_metrics_key("latency.#{operation}")
|
20
20
|
latencies = @adapter.find_strings_by_prefix(prefixed_name)
|
21
21
|
|
22
22
|
if operation == 'sdk.get_treatment'
|
@@ -32,24 +32,24 @@ module SplitIoClient
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def counts
|
35
|
-
keys = @adapter.find_strings_by_prefix(
|
35
|
+
keys = @adapter.find_strings_by_prefix(impressions_metrics_key("count"))
|
36
36
|
|
37
37
|
return [] if keys.empty?
|
38
38
|
|
39
39
|
@adapter.multiple_strings(keys).map do |name, data|
|
40
|
-
[name.gsub(
|
40
|
+
[name.gsub(impressions_metrics_key('count.'), ''), data]
|
41
41
|
end.to_h
|
42
42
|
end
|
43
43
|
|
44
44
|
def latencies
|
45
45
|
collected_latencies = {}
|
46
46
|
latencies_array = Array.new(BinarySearchLatencyTracker::BUCKETS.length, 0)
|
47
|
-
keys = @adapter.find_strings_by_prefix(
|
47
|
+
keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))
|
48
48
|
|
49
49
|
return [] if keys.empty?
|
50
50
|
|
51
51
|
found_latencies = @adapter.multiple_strings(keys).map do |name, data|
|
52
|
-
[name.gsub(
|
52
|
+
[name.gsub(impressions_metrics_key('latency.'), ''), data]
|
53
53
|
end.to_h
|
54
54
|
|
55
55
|
found_latencies.each do |key, value|
|
@@ -73,12 +73,12 @@ module SplitIoClient
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def clear_counts
|
76
|
-
keys = @adapter.find_strings_by_prefix(
|
76
|
+
keys = @adapter.find_strings_by_prefix(impressions_metrics_key('count'))
|
77
77
|
@adapter.delete(keys)
|
78
78
|
end
|
79
79
|
|
80
80
|
def clear_latencies
|
81
|
-
keys = @adapter.find_strings_by_prefix(
|
81
|
+
keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))
|
82
82
|
@adapter.delete(keys)
|
83
83
|
end
|
84
84
|
|
@@ -21,12 +21,12 @@ module SplitIoClient
|
|
21
21
|
.map do |impression|
|
22
22
|
ip = impression[:ip]
|
23
23
|
{
|
24
|
-
keyName: impression[:impressions]['key_name'],
|
24
|
+
keyName: impression[:impressions]['keyName'] || impression[:impressions]['key_name'],
|
25
25
|
treatment: impression[:impressions]['treatment'],
|
26
26
|
time: impression[:impressions]['time'],
|
27
|
-
bucketingKey: impression[:impressions]['bucketing_key'],
|
27
|
+
bucketingKey: impression[:impressions]['bucketingKey'] || impression[:impressions]['bucketing_key'],
|
28
28
|
label: impression[:impressions]['label'],
|
29
|
-
changeNumber: impression[:impressions]['change_number'],
|
29
|
+
changeNumber: impression[:impressions]['changeNumber'] || impression[:impressions]['change_number'],
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
@@ -62,9 +62,9 @@ module SplitIoClient
|
|
62
62
|
|
63
63
|
def impression_hash(impression)
|
64
64
|
"#{impression[:feature]}:" \
|
65
|
-
"#{impression[:impressions]['
|
66
|
-
"#{impression[:impressions]['
|
67
|
-
"#{impression[:impressions]['
|
65
|
+
"#{impression[:impressions]['keyName']}:" \
|
66
|
+
"#{impression[:impressions]['bucketingKey']}:" \
|
67
|
+
"#{impression[:impressions]['changeNumber']}:" \
|
68
68
|
"#{impression[:impressions]['treatment']}"
|
69
69
|
end
|
70
70
|
end
|
data/lib/engine/api/client.rb
CHANGED
@@ -9,10 +9,10 @@ module SplitIoClient
|
|
9
9
|
api_client.get(url, params) do |req|
|
10
10
|
req.headers = common_headers(api_key, config).merge('Accept-Encoding' => 'gzip')
|
11
11
|
|
12
|
-
req.options
|
13
|
-
req.options
|
12
|
+
req.options[:timeout] = config.read_timeout
|
13
|
+
req.options[:open_timeout] = config.connection_timeout
|
14
14
|
|
15
|
-
config.logger.debug("GET #{url}") if config.debug_enabled
|
15
|
+
config.logger.debug("GET #{url} proxy: #{api_client.proxy}") if config.debug_enabled
|
16
16
|
end
|
17
17
|
rescue StandardError => e
|
18
18
|
config.logger.warn("#{e}\nURL:#{url}\nparams:#{params}")
|
@@ -28,8 +28,8 @@ module SplitIoClient
|
|
28
28
|
|
29
29
|
req.body = data.to_json
|
30
30
|
|
31
|
-
req.options
|
32
|
-
req.options
|
31
|
+
req.options[:timeout] = config.read_timeout
|
32
|
+
req.options[:open_timeout] = config.connection_timeout
|
33
33
|
|
34
34
|
if config.transport_debug_enabled
|
35
35
|
config.logger.debug("POST #{url} #{req.body}")
|
@@ -55,15 +55,15 @@ module SplitIoClient
|
|
55
55
|
def common_headers(api_key, config)
|
56
56
|
{
|
57
57
|
'Authorization' => "Bearer #{api_key}",
|
58
|
-
'SplitSDKVersion' =>
|
58
|
+
'SplitSDKVersion' => "#{config.language}-#{config.version}",
|
59
59
|
'SplitSDKMachineName' => config.machine_name,
|
60
60
|
'SplitSDKMachineIP' => config.machine_ip,
|
61
|
-
'Referer' => referer
|
61
|
+
'Referer' => referer(config)
|
62
62
|
}
|
63
63
|
end
|
64
64
|
|
65
|
-
def referer
|
66
|
-
result =
|
65
|
+
def referer(config)
|
66
|
+
result = "#{config.language}-#{config.version}"
|
67
67
|
|
68
68
|
result = "#{result}::#{SplitIoClient::SplitConfig.get_hostname}" unless SplitIoClient::SplitConfig.get_hostname == 'localhost'
|
69
69
|
|
@@ -124,13 +124,5 @@ module SplitIoClient
|
|
124
124
|
treatment_label_change_number[:treatment]
|
125
125
|
end
|
126
126
|
end
|
127
|
-
|
128
|
-
#
|
129
|
-
# method that returns the sdk gem version
|
130
|
-
#
|
131
|
-
# @return [string] version value for this sdk
|
132
|
-
def self.sdk_version
|
133
|
-
'ruby-'+SplitIoClient::VERSION
|
134
|
-
end
|
135
127
|
end
|
136
128
|
end
|
@@ -53,8 +53,11 @@ module SplitIoClient
|
|
53
53
|
@debug_enabled = opts[:debug_enabled] || SplitConfig.default_debug
|
54
54
|
@transport_debug_enabled = opts[:transport_debug_enabled] || SplitConfig.default_debug
|
55
55
|
@block_until_ready = opts[:ready] || opts[:block_until_ready] || 0
|
56
|
-
@machine_name = SplitConfig.get_hostname
|
57
|
-
@machine_ip = SplitConfig.get_ip
|
56
|
+
@machine_name = opts[:machine_name] || SplitConfig.get_hostname
|
57
|
+
@machine_ip = opts[:machine_ip] || SplitConfig.get_ip
|
58
|
+
|
59
|
+
@language = opts[:language] || 'ruby'
|
60
|
+
@version = opts[:version] || SplitIoClient::VERSION
|
58
61
|
|
59
62
|
@labels_enabled = opts[:labels_enabled].nil? ? SplitConfig.default_labels_logging : opts[:labels_enabled]
|
60
63
|
|
@@ -142,6 +145,9 @@ module SplitIoClient
|
|
142
145
|
attr_reader :machine_ip
|
143
146
|
attr_reader :machine_name
|
144
147
|
|
148
|
+
attr_reader :language
|
149
|
+
attr_reader :version
|
150
|
+
|
145
151
|
attr_reader :features_refresh_rate
|
146
152
|
attr_reader :segments_refresh_rate
|
147
153
|
attr_reader :metrics_refresh_rate
|
@@ -164,14 +170,6 @@ module SplitIoClient
|
|
164
170
|
SplitConfig.new
|
165
171
|
end
|
166
172
|
|
167
|
-
#
|
168
|
-
# method that returns the sdk gem version
|
169
|
-
#
|
170
|
-
# @return [string] version value for this sdk
|
171
|
-
def self.sdk_version
|
172
|
-
'ruby-'+SplitIoClient::VERSION
|
173
|
-
end
|
174
|
-
|
175
173
|
#
|
176
174
|
# The default base uri for api calls
|
177
175
|
#
|
data/splitio.yml.example
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
---
|
2
|
-
:api_key:
|
3
|
-
#:base_uri: 'https://sdk-aws-staging.split.io/api'
|
4
|
-
#:events_uri: 'https://events-aws-staging.split.io/api'
|
2
|
+
:api_key: api_key
|
5
3
|
:mode: :producer
|
6
4
|
:cache_adapter: :redis
|
7
5
|
:debug_enabled: true
|
8
6
|
:transport_debug_enabled: true
|
9
7
|
:impressions_refresh_rate: 30
|
10
|
-
:block_until_ready: 10
|
11
|
-
:redis_namespace: "PATO"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splitclient-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.4.pre.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Split Software
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -331,9 +331,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
331
331
|
version: '0'
|
332
332
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
333
333
|
requirements:
|
334
|
-
- - "
|
334
|
+
- - ">"
|
335
335
|
- !ruby/object:Gem::Version
|
336
|
-
version:
|
336
|
+
version: 1.3.1
|
337
337
|
requirements: []
|
338
338
|
rubyforge_project:
|
339
339
|
rubygems_version: 2.5.2
|