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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f88b9bc60d39e9fda1919c399fe45f137f2d8a47
4
- data.tar.gz: 695fb50b166b6c6fbbf3d654368ff97163916525
3
+ metadata.gz: 9f0c2bd79b5a4b89a67fbf60f5df88573ea52e82
4
+ data.tar.gz: 5a5921c802fe03065300445e4e1c6c57ff554c03
5
5
  SHA512:
6
- metadata.gz: c9eaffe8ffd6a8d0543852eb0302761a7650e69284d27618cbbf0566bc014565c552da1e8fa5358da44c471b82c4b307453e120a1e35da38de96158786ee3a7d
7
- data.tar.gz: 98a60641d87bf4c45e3fc50519fb1a3f5cbf532a3291dd5e191b049635b107921ae6dc919f6a66c19559afe162721bb7c4379e214f0c16a7b6bcbdb11d62f481
6
+ metadata.gz: 8e9e5f105dc9435aaefc6784fb4d1fe561af0b9fa143f294d573da0255bfb4e76e6fb49d25549bb6fc0457ee92811ec3f2e4e5038f70aee75501cccf7cfbfc68
7
+ data.tar.gz: 207a06c7c9cc25f78625f43d48be2533c28f1c0c5c49090a3f1b0084c8a4179dc038ff7e7656577f004076208b8eef21f9dac9b2b60f75ddfed6d6537b564131
data/CHANGES.txt CHANGED
@@ -1,3 +1,6 @@
1
+ 3.2.4
2
+ - Fix Faraday compability issue (now compatible with Faraday 0.8.9)
3
+
1
4
  3.2.3
2
5
  - Fix Redis namespace issue to align with the spec
3
6
  - Allocate less memory by not creating Split model to check if Split is archived
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
- namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/impressions.#{split_name}"),
17
- data.merge(split_name: split_name).to_json
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
- 'key_name' => key,
27
- 'bucketing_key' => bucketing_key,
28
- 'treatment' => treatment_label_change_number[:treatment],
29
- 'label' => @config.labels_enabled ? treatment_label_change_number[:label] : nil,
30
- 'change_number' => treatment_label_change_number[:change_number],
31
- 'time' => time
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
- _, _, ip, = key.split('/')
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: parsed_impression['split_name'],
49
- impressions: parsed_impression.reject { |k| k == 'split_name' },
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 = namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count.#{counter}")
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 = namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency.#{operation}")
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(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count"))
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(namespace_key("ruby-#{VERSION}/#{@config.machine_ip}/count."), ''), data]
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(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency"))
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(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency."), ''), data]
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(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count"))
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(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency"))
81
+ keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))
82
82
  @adapter.delete(keys)
83
83
  end
84
84
 
@@ -14,6 +14,10 @@ module SplitIoClient
14
14
  def namespace_key(key)
15
15
  "#{@config.redis_namespace}#{key}"
16
16
  end
17
+
18
+ def impressions_metrics_key(key)
19
+ namespace_key("/#{@config.language}-#{@config.version}/#{@config.machine_ip}/#{key}")
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -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]['key_name']}:" \
66
- "#{impression[:impressions]['bucketing_key']}:" \
67
- "#{impression[:impressions]['change_number']}:" \
65
+ "#{impression[:impressions]['keyName']}:" \
66
+ "#{impression[:impressions]['bucketingKey']}:" \
67
+ "#{impression[:impressions]['changeNumber']}:" \
68
68
  "#{impression[:impressions]['treatment']}"
69
69
  end
70
70
  end
@@ -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.timeout = config.read_timeout
13
- req.options.open_timeout = config.connection_timeout
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.timeout = config.read_timeout
32
- req.options.open_timeout = config.connection_timeout
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' => SplitIoClient::SplitConfig.sdk_version,
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 = SplitIoClient::SplitConfig.sdk_version
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
 
@@ -24,7 +24,7 @@ module SplitIoClient
24
24
  #
25
25
  # @return [string] version value for this sdk
26
26
  def self.sdk_version
27
- 'RubyClientSDK-'+SplitIoClient::VERSION
27
+ 'ruby-'+SplitIoClient::VERSION
28
28
  end
29
29
 
30
30
  def get_treatments(key, split_names, attributes = nil)
@@ -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
  #
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '3.2.3'
2
+ VERSION = '3.2.4-rc1'
3
3
  end
data/splitio.yml.example CHANGED
@@ -1,11 +1,7 @@
1
1
  ---
2
- :api_key: r2tdmvojm6rp6vugmd9svhoedv43e71ejolk
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.3
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-16 00:00:00.000000000 Z
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: '0'
336
+ version: 1.3.1
337
337
  requirements: []
338
338
  rubyforge_project:
339
339
  rubygems_version: 2.5.2