splitclient-rb 3.2.3 → 3.2.4.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|