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 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