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 +4 -4
- data/CHANGES.txt +3 -0
- data/Detailed-README.md +3 -1
- data/NEWS +6 -0
- data/lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb +8 -6
- data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +11 -8
- data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +16 -15
- data/lib/splitclient-rb/cache/repositories/impressions_repository.rb +1 -1
- data/lib/splitclient-rb/cache/senders/impressions_formatter.rb +1 -1
- data/lib/splitclient-rb/cache/senders/impressions_sender.rb +1 -2
- data/lib/splitclient-rb/clients/split_client.rb +2 -3
- data/lib/splitclient-rb/split_config.rb +8 -2
- data/lib/splitclient-rb/version.rb +1 -1
- 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: 3d25dfd36c9ddd3f35ae8be7bfd1d0dc4e6de872
|
4
|
+
data.tar.gz: d78ae6bd4d7161f707ea3559f1c05236de2362f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bff71d7dc6a4efe9527aada4f34974d8138e0d84a54f308dfb06772c3737b6f1550b8c19094caf35da1b0c34e012de7a8a5220f3ad69ab0a28d3227a48d6f4c3
|
7
|
+
data.tar.gz: 8204a8a2d9a986f726798506ad99172f505660cf39732999a0dea59c637122f3553983d2a0204f1ff33a237e4f0b1bf7c355938a8ac0fe903d6eb8208d612e5d
|
data/CHANGES.txt
CHANGED
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
|
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
|
-
|
28
|
+
get_batch(@current_size.value)
|
29
|
+
end
|
30
30
|
|
31
|
-
|
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
|
-
|
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,
|
22
|
-
|
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' =>
|
28
|
-
'label' => @config.labels_enabled ?
|
29
|
-
'changeNumber' =>
|
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
|
-
|
36
|
-
|
37
|
-
@adapter.
|
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,
|
20
|
+
def add_bulk(key, bucketing_key, treatments, time)
|
22
21
|
@adapter.redis.pipelined do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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.
|
34
|
+
# Get random impressions from redis in batches of size @config.impressions_bulk_size,
|
38
35
|
# delete fetched impressions afterwards
|
39
|
-
def
|
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.
|
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, :
|
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.
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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.
|
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-
|
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:
|
314
|
+
version: '0'
|
315
315
|
requirements: []
|
316
316
|
rubyforge_project:
|
317
317
|
rubygems_version: 2.6.14
|