splitclient-rb 4.3.2 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.txt +6 -0
- data/NEWS +4 -0
- data/README.md +1 -0
- data/lib/splitclient-rb.rb +5 -0
- data/lib/splitclient-rb/cache/adapters/redis_adapter.rb +15 -0
- data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +30 -0
- data/lib/splitclient-rb/cache/repositories/events/redis_repository.rb +29 -0
- data/lib/splitclient-rb/cache/repositories/events_repository.rb +41 -0
- data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +1 -1
- data/lib/splitclient-rb/cache/senders/events_sender.rb +47 -0
- data/lib/splitclient-rb/cache/senders/impressions_formatter.rb +1 -1
- data/lib/splitclient-rb/clients/localhost_split_client.rb +3 -0
- data/lib/splitclient-rb/clients/split_client.rb +7 -1
- data/lib/splitclient-rb/engine/api/client.rb +1 -1
- data/lib/splitclient-rb/engine/api/events.rb +48 -0
- data/lib/splitclient-rb/engine/parser/split_adapter.rb +9 -1
- data/lib/splitclient-rb/split_config.rb +42 -13
- data/lib/splitclient-rb/split_factory.rb +3 -2
- data/lib/splitclient-rb/version.rb +1 -1
- data/splitclient-rb.gemspec +1 -1
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e90a30df4c1f1e86befc5572851f37cee1e22eec
|
4
|
+
data.tar.gz: 8b7eeb1065058af7efe9ec9b104d4b0bd589d199
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da5a3fc027744717443eb00c87615444890b5cccc6c018baf89f93bd111fba8951ca1f64bdab839eead72e907befee279727402961dfb56dd1e02d8d410bc046
|
7
|
+
data.tar.gz: a86cd66443680a28c0b207f08cf8ff0c8e0e3130ecd9c77f542a419209c0786b3cbfe4fea4d3dc6d4afb07acb7344ac335d9478834f0a063ca3fc2e01141f910
|
data/CHANGES.txt
CHANGED
data/NEWS
CHANGED
data/README.md
CHANGED
@@ -28,6 +28,7 @@ Split has built and maintains a SDKs for:
|
|
28
28
|
* PHP [Github](https://github.com/splitio/php-client) [Docs](http://docs.split.io/docs/php-sdk-overview)
|
29
29
|
* Python [Github](https://github.com/splitio/python-client) [Docs](http://docs.split.io/docs/python-sdk-overview)
|
30
30
|
* GO [Github](https://github.com/splitio/go-client) [Docs](http://docs.split.io/docs/go-sdk-overview)
|
31
|
+
* Android [Github](https://github.com/splitio/android-client) [Docs](https://docs.split.io/v1/docs/android-sdk-overview)
|
31
32
|
|
32
33
|
For a comprehensive list of opensource projects visit our [Github page](https://github.com/splitio?utf8=%E2%9C%93&query=%20only%3Apublic%20).
|
33
34
|
|
data/lib/splitclient-rb.rb
CHANGED
@@ -10,7 +10,10 @@ require 'splitclient-rb/cache/adapters/redis_adapter'
|
|
10
10
|
require 'splitclient-rb/cache/repositories/repository'
|
11
11
|
require 'splitclient-rb/cache/repositories/segments_repository'
|
12
12
|
require 'splitclient-rb/cache/repositories/splits_repository'
|
13
|
+
require 'splitclient-rb/cache/repositories/events_repository'
|
13
14
|
require 'splitclient-rb/cache/repositories/impressions_repository'
|
15
|
+
require 'splitclient-rb/cache/repositories/events/memory_repository'
|
16
|
+
require 'splitclient-rb/cache/repositories/events/redis_repository'
|
14
17
|
require 'splitclient-rb/cache/repositories/impressions/memory_repository'
|
15
18
|
require 'splitclient-rb/cache/repositories/impressions/redis_repository'
|
16
19
|
require 'splitclient-rb/cache/repositories/metrics_repository'
|
@@ -19,6 +22,7 @@ require 'splitclient-rb/cache/repositories/metrics/redis_repository'
|
|
19
22
|
require 'splitclient-rb/cache/senders/impressions_formatter'
|
20
23
|
require 'splitclient-rb/cache/senders/impressions_sender'
|
21
24
|
require 'splitclient-rb/cache/senders/metrics_sender'
|
25
|
+
require 'splitclient-rb/cache/senders/events_sender'
|
22
26
|
require 'splitclient-rb/cache/stores/sdk_blocker'
|
23
27
|
require 'splitclient-rb/cache/stores/segment_store'
|
24
28
|
require 'splitclient-rb/cache/stores/split_store'
|
@@ -39,6 +43,7 @@ require 'splitclient-rb/engine/api/impressions'
|
|
39
43
|
require 'splitclient-rb/engine/api/metrics'
|
40
44
|
require 'splitclient-rb/engine/api/segments'
|
41
45
|
require 'splitclient-rb/engine/api/splits'
|
46
|
+
require 'splitclient-rb/engine/api/events'
|
42
47
|
require 'splitclient-rb/engine/parser/condition'
|
43
48
|
require 'splitclient-rb/engine/parser/partition'
|
44
49
|
require 'splitclient-rb/engine/parser/split_adapter'
|
@@ -118,6 +118,21 @@ module SplitIoClient
|
|
118
118
|
@redis.srandmember(key, count)
|
119
119
|
end
|
120
120
|
|
121
|
+
# Queue
|
122
|
+
def add_to_queue(key, val)
|
123
|
+
@redis.rpush(key, val)
|
124
|
+
end
|
125
|
+
|
126
|
+
def get_from_queue(key, count)
|
127
|
+
items = @redis.lrange(key, 0, count - 1)
|
128
|
+
fetched_count = items.size
|
129
|
+
items_to_remove = (fetched_count == count) ? count : fetched_count
|
130
|
+
|
131
|
+
@redis.ltrim(key, items_to_remove, -1)
|
132
|
+
|
133
|
+
items
|
134
|
+
end
|
135
|
+
|
121
136
|
# General
|
122
137
|
def exists?(key)
|
123
138
|
@redis.exists(key)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Cache
|
3
|
+
module Repositories
|
4
|
+
module Events
|
5
|
+
class MemoryRepository < EventsRepository
|
6
|
+
EVENTS_SLICE = 100
|
7
|
+
|
8
|
+
def initialize(adapter, config)
|
9
|
+
@adapter = adapter
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(key, traffic_type, event_type, time, value)
|
14
|
+
@adapter.add_to_queue(m: metadata, e: event(key, traffic_type, event_type, time, value))
|
15
|
+
rescue ThreadError # queue is full
|
16
|
+
if @config.debug_enabled
|
17
|
+
@config.logger.warn("Dropping events. Current size is #{@config.events_queue_size}. " \
|
18
|
+
"Consider increasing events_queue_size")
|
19
|
+
end
|
20
|
+
@adapter.clear
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear
|
24
|
+
@adapter.clear
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Cache
|
3
|
+
module Repositories
|
4
|
+
module Events
|
5
|
+
class RedisRepository < EventsRepository
|
6
|
+
EVENTS_SLICE = 100
|
7
|
+
|
8
|
+
def initialize(adapter, config)
|
9
|
+
@adapter = adapter
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(key, traffic_type, event_type, time, value)
|
14
|
+
@adapter.add_to_queue(
|
15
|
+
namespace_key('.events'),
|
16
|
+
{ m: metadata, e: event(key, traffic_type, event_type, time, value) }.to_json,
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear
|
21
|
+
@adapter.get_from_queue(namespace_key('.events'), EVENTS_SLICE).map do |e|
|
22
|
+
JSON.parse(e, symbolize_names: true)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Cache
|
3
|
+
module Repositories
|
4
|
+
# Repository which forwards events interface to the selected adapter
|
5
|
+
class EventsRepository < Repository
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@adapter, :add, :clear
|
8
|
+
|
9
|
+
def initialize(adapter, config)
|
10
|
+
@config = config
|
11
|
+
@adapter = case adapter.class.to_s
|
12
|
+
when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
|
13
|
+
Repositories::Events::MemoryRepository.new(adapter, config)
|
14
|
+
when 'SplitIoClient::Cache::Adapters::RedisAdapter'
|
15
|
+
Repositories::Events::RedisRepository.new(adapter, config)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def metadata
|
22
|
+
{
|
23
|
+
s: "#{@config.language}-#{@config.version}",
|
24
|
+
i: @config.machine_ip,
|
25
|
+
n: @config.machine_name
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def event(key, traffic_type, event_type, time, value)
|
30
|
+
{
|
31
|
+
key: key,
|
32
|
+
trafficTypeName: traffic_type,
|
33
|
+
eventTypeId: event_type,
|
34
|
+
value: value,
|
35
|
+
timestamp: time
|
36
|
+
}.reject { |_, v| v.nil? }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Cache
|
3
|
+
module Senders
|
4
|
+
class EventsSender
|
5
|
+
def initialize(events_repository, config, api_key)
|
6
|
+
@events_repository = events_repository
|
7
|
+
@config = config
|
8
|
+
@api_key = api_key
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
if ENV['SPLITCLIENT_ENV'] == 'test'
|
13
|
+
post_events
|
14
|
+
else
|
15
|
+
events_thread
|
16
|
+
|
17
|
+
if defined?(PhusionPassenger)
|
18
|
+
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
19
|
+
events_thread if forked
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def events_thread
|
28
|
+
@config.threads[:events_sender] = Thread.new do
|
29
|
+
@config.logger.info('Starting events service')
|
30
|
+
|
31
|
+
loop do
|
32
|
+
post_events
|
33
|
+
|
34
|
+
sleep(SplitIoClient::Utilities.randomize_interval(@config.events_push_rate))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def post_events
|
40
|
+
SplitIoClient::Api::Events.new(@api_key, @config, @events_repository.clear).post
|
41
|
+
rescue StandardError => error
|
42
|
+
@config.log_found_exception(__method__.to_s, error)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -6,13 +6,14 @@ module SplitIoClient
|
|
6
6
|
# @param api_key [String] the API key for your split account
|
7
7
|
#
|
8
8
|
# @return [SplitIoClient] split.io client instance
|
9
|
-
def initialize(api_key, config = {}, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository)
|
9
|
+
def initialize(api_key, config = {}, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository)
|
10
10
|
@config = config
|
11
11
|
|
12
12
|
@splits_repository = splits_repository
|
13
13
|
@segments_repository = segments_repository
|
14
14
|
@impressions_repository = impressions_repository
|
15
15
|
@metrics_repository = metrics_repository
|
16
|
+
@events_repository = events_repository
|
16
17
|
|
17
18
|
@adapter = adapter
|
18
19
|
end
|
@@ -136,6 +137,7 @@ module SplitIoClient
|
|
136
137
|
@metrics_repository.clear
|
137
138
|
@splits_repository.clear
|
138
139
|
@segments_repository.clear
|
140
|
+
@events_repository.clear
|
139
141
|
|
140
142
|
@config.logger.info('Split client shutdown complete') if @config.debug_enabled
|
141
143
|
end
|
@@ -184,6 +186,10 @@ module SplitIoClient
|
|
184
186
|
@impression_router ||= SplitIoClient::ImpressionRouter.new(@config)
|
185
187
|
end
|
186
188
|
|
189
|
+
def track(key, traffic_type, event_type, value = nil)
|
190
|
+
@events_repository.add(key, traffic_type, event_type, (Time.now.to_f * 1000).to_i, value)
|
191
|
+
end
|
192
|
+
|
187
193
|
def keys_from_key(key)
|
188
194
|
case key.class.to_s
|
189
195
|
when 'Hash'
|
@@ -65,7 +65,7 @@ module SplitIoClient
|
|
65
65
|
def referer(config)
|
66
66
|
result = "#{config.language}-#{config.version}"
|
67
67
|
|
68
|
-
result = "#{result}::#{SplitIoClient::SplitConfig.
|
68
|
+
result = "#{result}::#{SplitIoClient::SplitConfig.machine_hostname}" unless SplitIoClient::SplitConfig.machine_hostname == 'localhost'
|
69
69
|
|
70
70
|
result
|
71
71
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module SplitIoClient
|
2
|
+
module Api
|
3
|
+
class Events < Client
|
4
|
+
def initialize(api_key, config, events)
|
5
|
+
@config = config
|
6
|
+
@api_key = api_key
|
7
|
+
@events = events
|
8
|
+
end
|
9
|
+
|
10
|
+
def post
|
11
|
+
if @events.empty?
|
12
|
+
@config.logger.debug('No events to report') if @config.debug_enabled
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
@events.each_slice(@config.events_queue_size) do |event_slice|
|
17
|
+
result = post_api(
|
18
|
+
"#{@config.events_uri}/events/bulk",
|
19
|
+
@config,
|
20
|
+
@api_key,
|
21
|
+
event_slice.map { |event| formatted_event(event[:e]) },
|
22
|
+
'SplitSDKMachineIP' => event_slice[0][:m][:i],
|
23
|
+
'SplitSDKMachineName' => event_slice[0][:m][:n],
|
24
|
+
'SplitSDKVersion' => event_slice[0][:m][:s]
|
25
|
+
)
|
26
|
+
|
27
|
+
if (200..299).include? result.status
|
28
|
+
@config.logger.debug("Events reported: #{event_slice.size}") if @config.debug_enabled
|
29
|
+
else
|
30
|
+
@config.logger.error("Unexpected status code while posting events: #{result.status}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def formatted_event(event)
|
38
|
+
{
|
39
|
+
key: event[:key],
|
40
|
+
trafficTypeName: event[:trafficTypeName],
|
41
|
+
eventTypeId: event[:eventTypeId],
|
42
|
+
value: event[:value].to_f,
|
43
|
+
timestamp: event[:timestamp].to_i
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -25,13 +25,14 @@ module SplitIoClient
|
|
25
25
|
# @param sdk_blocker [SDKBlocker] SDKBlocker instance which blocks splits_repository/segments_repository
|
26
26
|
#
|
27
27
|
# @return [SplitIoClient] split.io client instance
|
28
|
-
def initialize(api_key, config, splits_repository, segments_repository, impressions_repository, metrics_repository, sdk_blocker)
|
28
|
+
def initialize(api_key, config, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository, sdk_blocker)
|
29
29
|
@api_key = api_key
|
30
30
|
@config = config
|
31
31
|
@splits_repository = splits_repository
|
32
32
|
@segments_repository = segments_repository
|
33
33
|
@impressions_repository = impressions_repository
|
34
34
|
@metrics_repository = metrics_repository
|
35
|
+
@events_repository = events_repository
|
35
36
|
@metrics = Metrics.new(100, @config, @metrics_repository)
|
36
37
|
@sdk_blocker = sdk_blocker
|
37
38
|
|
@@ -45,6 +46,7 @@ module SplitIoClient
|
|
45
46
|
segment_store
|
46
47
|
metrics_sender
|
47
48
|
impressions_sender
|
49
|
+
events_sender
|
48
50
|
when :consumer
|
49
51
|
# Do nothing in background
|
50
52
|
when :producer
|
@@ -52,6 +54,7 @@ module SplitIoClient
|
|
52
54
|
segment_store
|
53
55
|
impressions_sender
|
54
56
|
metrics_sender
|
57
|
+
events_sender
|
55
58
|
|
56
59
|
sleep unless ENV['SPLITCLIENT_ENV'] == 'test'
|
57
60
|
end
|
@@ -76,5 +79,10 @@ module SplitIoClient
|
|
76
79
|
def metrics_sender
|
77
80
|
MetricsSender.new(@metrics_repository, @config, @api_key).call
|
78
81
|
end
|
82
|
+
|
83
|
+
# Starts thread which loops constantly and sends events to the Split API
|
84
|
+
def events_sender
|
85
|
+
EventsSender.new(@events_repository, @config, @api_key).call
|
86
|
+
end
|
79
87
|
end
|
80
88
|
end
|
@@ -53,8 +53,8 @@ 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 = opts[:machine_name] || SplitConfig.
|
57
|
-
@machine_ip = opts[:machine_ip] || SplitConfig.
|
56
|
+
@machine_name = opts[:machine_name] || SplitConfig.machine_hostname
|
57
|
+
@machine_ip = opts[:machine_ip] || SplitConfig.machine_ip
|
58
58
|
|
59
59
|
@language = opts[:language] || 'ruby'
|
60
60
|
@version = opts[:version] || SplitIoClient::VERSION
|
@@ -66,6 +66,12 @@ module SplitIoClient
|
|
66
66
|
|
67
67
|
@threads = {}
|
68
68
|
|
69
|
+
@events_push_rate = opts[:events_push_rate] || SplitConfig.default_events_push_rate
|
70
|
+
@events_queue_size = opts[:events_queue_size] || SplitConfig.default_events_queue_size
|
71
|
+
@events_adapter = SplitConfig.init_cache_adapter(
|
72
|
+
opts[:cache_adapter] || SplitConfig.default_cache_adapter, :queue_adapter, @redis_url, @events_queue_size
|
73
|
+
)
|
74
|
+
|
69
75
|
startup_log
|
70
76
|
end
|
71
77
|
|
@@ -110,6 +116,12 @@ module SplitIoClient
|
|
110
116
|
# @return [Symbol] Metrics adapter
|
111
117
|
attr_reader :metrics_adapter
|
112
118
|
|
119
|
+
#
|
120
|
+
# The cache adapter to store events in
|
121
|
+
#
|
122
|
+
# @return [Object] Metrics adapter
|
123
|
+
attr_reader :events_adapter
|
124
|
+
|
113
125
|
#
|
114
126
|
# The connection timeout for network connections in seconds.
|
115
127
|
#
|
@@ -162,7 +174,7 @@ module SplitIoClient
|
|
162
174
|
attr_reader :impression_listener_refresh_rate
|
163
175
|
|
164
176
|
#
|
165
|
-
#
|
177
|
+
# How big the impressions queue is before dropping impressions. -1 to disable it.
|
166
178
|
#
|
167
179
|
# @return [Integer]
|
168
180
|
attr_reader :impressions_queue_size
|
@@ -172,6 +184,18 @@ module SplitIoClient
|
|
172
184
|
|
173
185
|
attr_accessor :threads
|
174
186
|
|
187
|
+
#
|
188
|
+
# The schedule time for events flush after the first one
|
189
|
+
#
|
190
|
+
# @return [Integer]
|
191
|
+
attr_reader :events_push_rate
|
192
|
+
|
193
|
+
#
|
194
|
+
# The max size of the events queue
|
195
|
+
#
|
196
|
+
# @return [Integer]
|
197
|
+
attr_reader :events_queue_size
|
198
|
+
|
175
199
|
#
|
176
200
|
# The default split client configuration
|
177
201
|
#
|
@@ -192,10 +216,10 @@ module SplitIoClient
|
|
192
216
|
'https://events.split.io/api/'
|
193
217
|
end
|
194
218
|
|
195
|
-
def self.init_cache_adapter(adapter, data_structure, redis_url = nil,
|
219
|
+
def self.init_cache_adapter(adapter, data_structure, redis_url = nil, queue_size = nil)
|
196
220
|
case adapter
|
197
221
|
when :memory
|
198
|
-
SplitIoClient::Cache::Adapters::MemoryAdapter.new(map_memory_adapter(data_structure,
|
222
|
+
SplitIoClient::Cache::Adapters::MemoryAdapter.new(map_memory_adapter(data_structure, queue_size))
|
199
223
|
when :redis
|
200
224
|
begin
|
201
225
|
require 'redis'
|
@@ -269,6 +293,14 @@ module SplitIoClient
|
|
269
293
|
5000
|
270
294
|
end
|
271
295
|
|
296
|
+
def self.default_events_push_rate
|
297
|
+
60
|
298
|
+
end
|
299
|
+
|
300
|
+
def self.default_events_queue_size
|
301
|
+
500
|
302
|
+
end
|
303
|
+
|
272
304
|
#
|
273
305
|
# The default logger object
|
274
306
|
#
|
@@ -337,20 +369,17 @@ module SplitIoClient
|
|
337
369
|
# gets the hostname where the sdk gem is running
|
338
370
|
#
|
339
371
|
# @return [string]
|
340
|
-
def self.
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
#unable to get hostname
|
345
|
-
'localhost'
|
346
|
-
end
|
372
|
+
def self.machine_hostname
|
373
|
+
Socket.gethostname
|
374
|
+
rescue
|
375
|
+
'localhost'.freeze
|
347
376
|
end
|
348
377
|
|
349
378
|
#
|
350
379
|
# gets the ip where the sdk gem is running
|
351
380
|
#
|
352
381
|
# @return [string]
|
353
|
-
def self.
|
382
|
+
def self.machine_ip
|
354
383
|
loopback_ip = Socket.ip_address_list.find { |ip| ip.ipv4_loopback? }
|
355
384
|
private_ip = Socket.ip_address_list.find { |ip| ip.ipv4_private? }
|
356
385
|
|
@@ -15,18 +15,19 @@ module SplitIoClient
|
|
15
15
|
@segments_repository = SegmentsRepository.new(@cache_adapter, @config)
|
16
16
|
@impressions_repository = ImpressionsRepository.new(@config.impressions_adapter, @config)
|
17
17
|
@metrics_repository = MetricsRepository.new(@config.metrics_adapter, @config)
|
18
|
+
@events_repository = EventsRepository.new(@config.events_adapter, @config)
|
18
19
|
|
19
20
|
@sdk_blocker = SDKBlocker.new(@config, @splits_repository, @segments_repository)
|
20
21
|
@adapter = start!
|
21
22
|
|
22
|
-
@client = SplitClient.new(@api_key, @config, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository)
|
23
|
+
@client = SplitClient.new(@api_key, @config, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository)
|
23
24
|
@manager = SplitManager.new(@api_key, @config, @adapter, @splits_repository)
|
24
25
|
|
25
26
|
@sdk_blocker.block if @config.block_until_ready > 0
|
26
27
|
end
|
27
28
|
|
28
29
|
def start!
|
29
|
-
SplitAdapter.new(@api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @sdk_blocker)
|
30
|
+
SplitAdapter.new(@api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker)
|
30
31
|
end
|
31
32
|
|
32
33
|
alias resume! start!
|
data/splitclient-rb.gemspec
CHANGED
@@ -34,6 +34,6 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
35
35
|
spec.add_runtime_dependency "faraday", ">= 0.8"
|
36
36
|
spec.add_runtime_dependency "net-http-persistent", "~> 2.9"
|
37
|
-
spec.add_runtime_dependency "redis", "
|
37
|
+
spec.add_runtime_dependency "redis", ">= 3.2"
|
38
38
|
spec.add_runtime_dependency "digest-murmurhash", ">= 1.1"
|
39
39
|
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: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Split Software
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -210,14 +210,14 @@ dependencies:
|
|
210
210
|
name: redis
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- - "
|
213
|
+
- - ">="
|
214
214
|
- !ruby/object:Gem::Version
|
215
215
|
version: '3.2'
|
216
216
|
type: :runtime
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- - "
|
220
|
+
- - ">="
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '3.2'
|
223
223
|
- !ruby/object:Gem::Dependency
|
@@ -257,6 +257,9 @@ files:
|
|
257
257
|
- lib/splitclient-rb/cache/adapters/memory_adapters/map_adapter.rb
|
258
258
|
- lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb
|
259
259
|
- lib/splitclient-rb/cache/adapters/redis_adapter.rb
|
260
|
+
- lib/splitclient-rb/cache/repositories/events/memory_repository.rb
|
261
|
+
- lib/splitclient-rb/cache/repositories/events/redis_repository.rb
|
262
|
+
- lib/splitclient-rb/cache/repositories/events_repository.rb
|
260
263
|
- lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb
|
261
264
|
- lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb
|
262
265
|
- lib/splitclient-rb/cache/repositories/impressions_repository.rb
|
@@ -267,6 +270,7 @@ files:
|
|
267
270
|
- lib/splitclient-rb/cache/repositories/segments_repository.rb
|
268
271
|
- lib/splitclient-rb/cache/repositories/splits_repository.rb
|
269
272
|
- lib/splitclient-rb/cache/routers/impression_router.rb
|
273
|
+
- lib/splitclient-rb/cache/senders/events_sender.rb
|
270
274
|
- lib/splitclient-rb/cache/senders/impressions_formatter.rb
|
271
275
|
- lib/splitclient-rb/cache/senders/impressions_sender.rb
|
272
276
|
- lib/splitclient-rb/cache/senders/metrics_sender.rb
|
@@ -276,6 +280,7 @@ files:
|
|
276
280
|
- lib/splitclient-rb/clients/localhost_split_client.rb
|
277
281
|
- lib/splitclient-rb/clients/split_client.rb
|
278
282
|
- lib/splitclient-rb/engine/api/client.rb
|
283
|
+
- lib/splitclient-rb/engine/api/events.rb
|
279
284
|
- lib/splitclient-rb/engine/api/faraday_middleware/gzip.rb
|
280
285
|
- lib/splitclient-rb/engine/api/impressions.rb
|
281
286
|
- lib/splitclient-rb/engine/api/metrics.rb
|
@@ -350,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
350
355
|
version: '0'
|
351
356
|
requirements: []
|
352
357
|
rubyforge_project:
|
353
|
-
rubygems_version: 2.5.
|
358
|
+
rubygems_version: 2.5.1
|
354
359
|
signing_key:
|
355
360
|
specification_version: 4
|
356
361
|
summary: Ruby client for split SDK.
|