splitclient-rb 5.0.2.pre.rc1-java → 5.0.3-java

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: fbae000c8e4e3ec9bd6cf3aa3b836e91b71df014
4
- data.tar.gz: faf5514108c7bda89d8e1c0b8148c8ad09f9cb55
3
+ metadata.gz: 3d25dfd36c9ddd3f35ae8be7bfd1d0dc4e6de872
4
+ data.tar.gz: d78ae6bd4d7161f707ea3559f1c05236de2362f1
5
5
  SHA512:
6
- metadata.gz: edfbb0409a4b6c9e0446ca58e1ae39ae0fbc6f8119a887122cff5e93218803f2d37dbda0e82502c3c327f829144e219ad35791d9bfe09f4bdb92dfb4d1383f2b
7
- data.tar.gz: 6580f82bfaa89ae94c8d5c00b2cca211a8eda81cc0e29dd26ef7f7a3d183ed2e436dbccd85c2690ce8299494cbb87c480ac235dac671e7115a91ce6907c6b503
6
+ metadata.gz: bff71d7dc6a4efe9527aada4f34974d8138e0d84a54f308dfb06772c3737b6f1550b8c19094caf35da1b0c34e012de7a8a5220f3ad69ab0a28d3227a48d6f4c3
7
+ data.tar.gz: 8204a8a2d9a986f726798506ad99172f505660cf39732999a0dea59c637122f3553983d2a0204f1ff33a237e4f0b1bf7c355938a8ac0fe903d6eb8208d612e5d
data/CHANGES.txt CHANGED
@@ -1,3 +1,6 @@
1
+ 5.0.3 (August 13th, 2018)
2
+ - Add `impressions_bulk_size` option to set the max number of impressions to be sent to the Split backend on each post.
3
+
1
4
  5.0.2 (July 31st, 2018)
2
5
  - Prevents the impression thread from being started if a listener is not in place
3
6
 
data/Detailed-README.md CHANGED
@@ -136,7 +136,9 @@ split_client.get_treatment('user_id','feature_name', attr: 'val')
136
136
 
137
137
  **impressions_refresh_rate** : The SDK sends information on who got what treatment at what time back to Split servers to power analytics. This parameter controls how often this data is sent to Split servers in seconds
138
138
 
139
- **impressions_queue_size** : The size of the impressions queue in case of `cache_adapter == :memory` and the size impressions batch to be fetched from Redis in case of `cache_adapter == :redis`. Use `-1` to disable impressions.
139
+ **impressions_queue_size** : The size of the impressions queue in case of `cache_adapter == :memory`.
140
+
141
+ **impressions_bulk_size** : Max number of impressions to be sent to the backend on each post. Defaults to `impressions_queue_size`.
140
142
 
141
143
  *default value* = `60`
142
144
 
data/NEWS CHANGED
@@ -1,3 +1,9 @@
1
+ 5.0.3
2
+
3
+ Creates a new configuration parameter (impressions_bulk_size) to manage the max number of impressions sent to the Split backend on each post.
4
+ Changes impressions_queue_size so that it manages only the queue size in the memory adapter.
5
+ A backwards compatibility fail safe is included for users of previous SDK versions.
6
+
1
7
  5.0.2
2
8
 
3
9
  Turn Impression Listener into an optional SDK feature.
@@ -24,19 +24,21 @@ module SplitIoClient
24
24
  @current_size.increment
25
25
  end
26
26
 
27
- # Get all items from the queue
28
27
  def clear
29
- items = []
28
+ get_batch(@current_size.value)
29
+ end
30
30
 
31
- loop do
31
+ def get_batch(size)
32
+ items = []
33
+ size.times do
32
34
  items << @queue.pop(true)
33
-
34
35
  @current_size.decrement
35
36
  end
36
-
37
- rescue ThreadError
37
+ items
38
+ rescue ThreadError
38
39
  items
39
40
  end
41
+
40
42
  end
41
43
  end
42
44
  end
@@ -3,6 +3,7 @@ module SplitIoClient
3
3
  module Repositories
4
4
  module Impressions
5
5
  class MemoryRepository
6
+
6
7
  def initialize(adapter, config)
7
8
  @adapter = adapter
8
9
  @config = config
@@ -18,23 +19,25 @@ module SplitIoClient
18
19
  end
19
20
  end
20
21
 
21
- def add_bulk(key, bucketing_key, treatments_labels_change_numbers, time)
22
- treatments_labels_change_numbers.each do |split_name, treatment_label_number|
22
+ def add_bulk(key, bucketing_key, treatments, time)
23
+ treatments.each do |split_name, treatment|
23
24
  add(
24
25
  split_name,
25
26
  'keyName' => key,
26
27
  'bucketingKey' => bucketing_key,
27
- 'treatment' => treatment_label_number[:treatment],
28
- 'label' => @config.labels_enabled ? treatment_label_number[:label] : nil,
29
- 'changeNumber' => treatment_label_number[:change_number],
28
+ 'treatment' => treatment[:treatment],
29
+ 'label' => @config.labels_enabled ? treatment[:label] : nil,
30
+ 'changeNumber' => treatment[:change_number],
30
31
  'time' => time
31
32
  )
32
33
  end
33
34
  end
34
35
 
35
- # Get everything from the queue and leave it empty
36
- def clear
37
- @adapter.clear.map { |impression| impression.update(ip: @config.machine_ip) }
36
+ def get_batch
37
+ return [] if @config.impressions_bulk_size == 0
38
+ @adapter.get_batch(@config.impressions_bulk_size).map do |impression|
39
+ impression.update(ip: @config.machine_ip)
40
+ end
38
41
  end
39
42
 
40
43
  private
@@ -3,7 +3,6 @@ module SplitIoClient
3
3
  module Repositories
4
4
  module Impressions
5
5
  class RedisRepository < Repository
6
- IMPRESSIONS_SLICE = 1000
7
6
 
8
7
  def initialize(adapter, config)
9
8
  @adapter = adapter
@@ -18,25 +17,23 @@ module SplitIoClient
18
17
  )
19
18
  end
20
19
 
21
- def add_bulk(key, bucketing_key, treatments_labels_change_numbers, time)
20
+ def add_bulk(key, bucketing_key, treatments, time)
22
21
  @adapter.redis.pipelined do
23
- treatments_labels_change_numbers.each_slice(IMPRESSIONS_SLICE) do |treatments_labels_change_numbers_slice|
24
- treatments_labels_change_numbers_slice.each do |split_name, treatment_label_change_number|
25
- add(split_name,
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)
32
- end
22
+ treatments.each do |split_name, treatment|
23
+ add(split_name,
24
+ 'keyName' => key,
25
+ 'bucketingKey' => bucketing_key,
26
+ 'treatment' => treatment[:treatment],
27
+ 'label' => @config.labels_enabled ? treatment[:label] : nil,
28
+ 'changeNumber' => treatment[:change_number],
29
+ 'time' => time)
33
30
  end
34
31
  end
35
32
  end
36
33
 
37
- # Get random impressions from redis in batches of size @config.impressions_queue_size,
34
+ # Get random impressions from redis in batches of size @config.impressions_bulk_size,
38
35
  # delete fetched impressions afterwards
39
- def clear
36
+ def get_batch
40
37
  impressions = impression_keys.each_with_object([]) do |key, memo|
41
38
  ip = key.split('/')[-2] # 'prefix/sdk_lang/ip/impressions.name' -> ip
42
39
  if ip.nil?
@@ -44,7 +41,7 @@ module SplitIoClient
44
41
  next
45
42
  end
46
43
  split_name = key.split('.').last
47
- members = @adapter.random_set_elements(key, @config.impressions_queue_size)
44
+ members = @adapter.random_set_elements(key, @config.impressions_bulk_size)
48
45
  members.each do |impression|
49
46
  parsed_impression = JSON.parse(impression)
50
47
 
@@ -61,6 +58,8 @@ module SplitIoClient
61
58
  impressions
62
59
  rescue StandardError => e
63
60
  @config.logger.error("Exception while clearing impressions cache: #{e}")
61
+
62
+ []
64
63
  end
65
64
 
66
65
  private
@@ -70,6 +69,8 @@ module SplitIoClient
70
69
  @adapter.find_sets_by_prefix("#{@config.redis_namespace}/*/impressions.*")
71
70
  rescue StandardError => e
72
71
  @config.logger.error("Exception while fetching impression_keys: #{e}")
72
+
73
+ []
73
74
  end
74
75
  end
75
76
  end
@@ -4,7 +4,7 @@ module SplitIoClient
4
4
  # Repository which forwards impressions interface to the selected adapter
5
5
  class ImpressionsRepository < Repository
6
6
  extend Forwardable
7
- def_delegators :@adapter, :add, :add_bulk, :clear, :empty?
7
+ def_delegators :@adapter, :add, :add_bulk, :get_batch, :empty?
8
8
 
9
9
  def initialize(adapter, config)
10
10
  @config = config
@@ -7,7 +7,7 @@ module SplitIoClient
7
7
  end
8
8
 
9
9
  def call(raw_impressions)
10
- impressions = raw_impressions ? raw_impressions : @impressions_repository.clear
10
+ impressions = raw_impressions ? raw_impressions : @impressions_repository.get_batch
11
11
  formatted_impressions = []
12
12
  filtered_impressions = filter_impressions(impressions)
13
13
 
@@ -9,8 +9,7 @@ module SplitIoClient
9
9
  end
10
10
 
11
11
  def call
12
- # Disable impressions if @config.impressions_queue_size == -1
13
- if @config.impressions_queue_size < 0
12
+ if @config.disable_impressions
14
13
  @config.logger.info('Disabling impressions service by config')
15
14
  return
16
15
  end
@@ -27,7 +27,7 @@ module SplitIoClient
27
27
  memo.merge!(name => get_treatment(key, name, attributes, data, false, true, evaluator))
28
28
  end
29
29
 
30
- if @config.impressions_queue_size > 0
30
+ unless @config.disable_impressions
31
31
  time = (Time.now.to_f * 1000.0).to_i
32
32
  @impressions_repository.add_bulk(
33
33
  matching_key, bucketing_key, treatments_labels_change_numbers, time
@@ -103,7 +103,6 @@ module SplitIoClient
103
103
 
104
104
  begin
105
105
  latency = (Time.now - start) * 1000.0
106
- # Disable impressions if @config.impressions_queue_size == -1
107
106
  split && store_impression(split_name, matching_key, bucketing_key, treatment_data, store_impressions, attributes)
108
107
 
109
108
  # Measure
@@ -145,7 +144,7 @@ module SplitIoClient
145
144
  def store_impression(split_name, matching_key, bucketing_key, treatment, store_impressions, attributes)
146
145
  time = (Time.now.to_f * 1000.0).to_i
147
146
 
148
- return unless @config.impressions_queue_size > 0 && store_impressions
147
+ return if @config.disable_impressions || !store_impressions
149
148
 
150
149
  @impressions_repository.add(split_name,
151
150
  'keyName' => matching_key,
@@ -21,9 +21,9 @@ module SplitIoClient
21
21
  # @option opts [Int] :impressions_refresh_rate
22
22
  # @option opts [Object] :logger a logger to user for messages from the client. Defaults to stdout
23
23
  # @option opts [Boolean] :debug_enabled (false) The value for the debug flag
24
- # @option opts [Int] :impressions_queue_size how big the impressions queue is before dropping impressions. -1 to disable it.
24
+ # @option opts [Int] :impressions_queue_size Size of the impressions queue in the memory repository. Once reached, newer impressions will be dropped
25
+ # @option opts [Int] :impressions_bulk_size Max number of impressions to be sent to the backend on each post
25
26
  # @option opts [#log] :impression_listener this object will capture all impressions and process them through `#log`
26
- #
27
27
  # @return [type] SplitConfig with configuration options
28
28
  def initialize(opts = {})
29
29
  @base_uri = (opts[:base_uri] || SplitConfig.default_base_uri).chomp('/')
@@ -45,6 +45,10 @@ module SplitIoClient
45
45
  @impressions_adapter = SplitConfig.init_cache_adapter(
46
46
  opts[:cache_adapter] || SplitConfig.default_cache_adapter, :queue_adapter, @redis_url, @impressions_queue_size
47
47
  )
48
+ #Safeguard for users of older SDK versions.
49
+ @disable_impressions = @impressions_queue_size == -1
50
+ #Safeguard for users of older SDK versions.
51
+ @impressions_bulk_size = opts[:impressions_bulk_size] || @impressions_queue_size > 0 ? @impressions_queue_size : 0
48
52
 
49
53
  @metrics_adapter = SplitConfig.init_cache_adapter(
50
54
  opts[:cache_adapter] || SplitConfig.default_cache_adapter, :map_adapter, @redis_url, false
@@ -179,6 +183,8 @@ module SplitIoClient
179
183
  #
180
184
  # @return [Integer]
181
185
  attr_reader :impressions_queue_size
186
+ attr_reader :impressions_bulk_size
187
+ attr_reader :disable_impressions
182
188
 
183
189
  attr_reader :redis_url
184
190
  attr_reader :redis_namespace
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '5.0.2.pre.rc1'
2
+ VERSION = '5.0.3'
3
3
  end
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: 5.0.2.pre.rc1
4
+ version: 5.0.3
5
5
  platform: java
6
6
  authors:
7
7
  - Split Software
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-31 00:00:00.000000000 Z
11
+ date: 2018-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -309,9 +309,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
309
309
  version: '0'
310
310
  required_rubygems_version: !ruby/object:Gem::Requirement
311
311
  requirements:
312
- - - ">"
312
+ - - ">="
313
313
  - !ruby/object:Gem::Version
314
- version: 1.3.1
314
+ version: '0'
315
315
  requirements: []
316
316
  rubyforge_project:
317
317
  rubygems_version: 2.6.14