splitclient-rb 4.3.2 → 4.4.0
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 +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.
|