splitclient-rb 7.2.3.pre.rc2-java → 7.3.0.pre.rc1-java
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/.rubocop.yml +12 -0
- data/CHANGES.txt +6 -0
- data/lib/splitclient-rb.rb +24 -9
- data/lib/splitclient-rb/cache/adapters/redis_adapter.rb +4 -0
- data/lib/splitclient-rb/cache/fetchers/segment_fetcher.rb +8 -7
- data/lib/splitclient-rb/cache/fetchers/split_fetcher.rb +7 -7
- data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +6 -3
- data/lib/splitclient-rb/cache/repositories/events_repository.rb +4 -3
- data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +8 -0
- data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +2 -0
- data/lib/splitclient-rb/cache/repositories/repository.rb +0 -4
- data/lib/splitclient-rb/cache/repositories/segments_repository.rb +20 -0
- data/lib/splitclient-rb/cache/repositories/splits_repository.rb +4 -0
- data/lib/splitclient-rb/cache/senders/localhost_repo_cleaner.rb +1 -3
- data/lib/splitclient-rb/cache/stores/sdk_blocker.rb +9 -0
- data/lib/splitclient-rb/clients/split_client.rb +59 -25
- data/lib/splitclient-rb/engine/api/client.rb +3 -2
- data/lib/splitclient-rb/engine/api/events.rb +10 -1
- data/lib/splitclient-rb/engine/api/impressions.rb +19 -2
- data/lib/splitclient-rb/engine/api/segments.rb +20 -18
- data/lib/splitclient-rb/engine/api/splits.rb +10 -10
- data/lib/splitclient-rb/engine/api/telemetry_api.rb +39 -0
- data/lib/splitclient-rb/engine/auth_api_client.rb +21 -8
- data/lib/splitclient-rb/engine/common/impressions_manager.rb +27 -3
- data/lib/splitclient-rb/engine/metrics/binary_search_latency_tracker.rb +3 -65
- data/lib/splitclient-rb/engine/push_manager.rb +10 -2
- data/lib/splitclient-rb/engine/sync_manager.rb +42 -20
- data/lib/splitclient-rb/engine/synchronizer.rb +13 -12
- data/lib/splitclient-rb/split_config.rb +46 -21
- data/lib/splitclient-rb/split_factory.rb +31 -13
- data/lib/splitclient-rb/split_factory_registry.rb +12 -0
- data/lib/splitclient-rb/sse/event_source/client.rb +10 -1
- data/lib/splitclient-rb/sse/notification_manager_keeper.rb +17 -3
- data/lib/splitclient-rb/sse/sse_handler.rb +10 -6
- data/lib/splitclient-rb/telemetry/domain/constants.rb +42 -0
- data/lib/splitclient-rb/telemetry/domain/structs.rb +31 -0
- data/lib/splitclient-rb/telemetry/evaluation_consumer.rb +14 -0
- data/lib/splitclient-rb/telemetry/evaluation_producer.rb +21 -0
- data/lib/splitclient-rb/telemetry/init_consumer.rb +14 -0
- data/lib/splitclient-rb/telemetry/init_producer.rb +19 -0
- data/lib/splitclient-rb/telemetry/memory/memory_evaluation_consumer.rb +32 -0
- data/lib/splitclient-rb/telemetry/memory/memory_evaluation_producer.rb +24 -0
- data/lib/splitclient-rb/telemetry/memory/memory_init_consumer.rb +28 -0
- data/lib/splitclient-rb/telemetry/memory/memory_init_producer.rb +34 -0
- data/lib/splitclient-rb/telemetry/memory/memory_runtime_consumer.rb +112 -0
- data/lib/splitclient-rb/telemetry/memory/memory_runtime_producer.rb +81 -0
- data/lib/splitclient-rb/telemetry/memory/memory_synchronizer.rb +192 -0
- data/lib/splitclient-rb/telemetry/redis/redis_evaluation_producer.rb +38 -0
- data/lib/splitclient-rb/telemetry/redis/redis_init_producer.rb +37 -0
- data/lib/splitclient-rb/telemetry/redis/redis_synchronizer.rb +28 -0
- data/lib/splitclient-rb/telemetry/runtime_consumer.rb +24 -0
- data/lib/splitclient-rb/telemetry/runtime_producer.rb +24 -0
- data/lib/splitclient-rb/telemetry/storages/memory.rb +139 -0
- data/lib/splitclient-rb/telemetry/sync_task.rb +38 -0
- data/lib/splitclient-rb/telemetry/synchronizer.rb +29 -0
- data/lib/splitclient-rb/version.rb +1 -1
- metadata +24 -9
- data/lib/splitclient-rb/cache/repositories/metrics/memory_repository.rb +0 -163
- data/lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb +0 -131
- data/lib/splitclient-rb/cache/repositories/metrics_repository.rb +0 -23
- data/lib/splitclient-rb/cache/senders/metrics_sender.rb +0 -55
- data/lib/splitclient-rb/engine/api/metrics.rb +0 -61
- data/lib/splitclient-rb/engine/metrics/metrics.rb +0 -80
- data/lib/splitclient-rb/redis_metrics_fixer.rb +0 -36
@@ -1,23 +0,0 @@
|
|
1
|
-
module SplitIoClient
|
2
|
-
module Cache
|
3
|
-
module Repositories
|
4
|
-
# Repository which forwards impressions interface to the selected adapter
|
5
|
-
class MetricsRepository < Repository
|
6
|
-
extend Forwardable
|
7
|
-
def_delegators :@repository, :add_count, :add_latency, :add_gauge, :counts, :latencies, :gauges,
|
8
|
-
:clear_counts, :clear_latencies, :clear_gauges, :clear, :fix_latencies
|
9
|
-
|
10
|
-
def initialize(config)
|
11
|
-
super(config)
|
12
|
-
@repository = case @config.metrics_adapter.class.to_s
|
13
|
-
when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
|
14
|
-
Repositories::Metrics::MemoryRepository.new(@config)
|
15
|
-
when 'SplitIoClient::Cache::Adapters::RedisAdapter'
|
16
|
-
Repositories::Metrics::RedisRepository.new(@config)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SplitIoClient
|
4
|
-
module Cache
|
5
|
-
module Senders
|
6
|
-
class MetricsSender
|
7
|
-
def initialize(metrics_repository, api_key, config)
|
8
|
-
@metrics_repository = metrics_repository
|
9
|
-
@api_key = api_key
|
10
|
-
@config = config
|
11
|
-
end
|
12
|
-
|
13
|
-
def call
|
14
|
-
metrics_thread
|
15
|
-
|
16
|
-
if defined?(PhusionPassenger)
|
17
|
-
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
18
|
-
metrics_thread if forked
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def metrics_thread
|
26
|
-
@config.threads[:metrics_sender] = Thread.new do
|
27
|
-
begin
|
28
|
-
@config.logger.info('Starting metrics service')
|
29
|
-
|
30
|
-
loop do
|
31
|
-
post_metrics
|
32
|
-
|
33
|
-
sleep(SplitIoClient::Utilities.randomize_interval(@config.metrics_refresh_rate))
|
34
|
-
end
|
35
|
-
rescue SplitIoClient::SDKShutdownException
|
36
|
-
post_metrics
|
37
|
-
|
38
|
-
@config.logger.info('Posting metrics due to shutdown')
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def post_metrics
|
44
|
-
metrics_api.post
|
45
|
-
rescue StandardError => error
|
46
|
-
@config.log_found_exception(__method__.to_s, error)
|
47
|
-
end
|
48
|
-
|
49
|
-
def metrics_api
|
50
|
-
@metrics_api ||= SplitIoClient::Api::Metrics.new(@api_key, @metrics_repository, @config)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SplitIoClient
|
4
|
-
module Api
|
5
|
-
class Metrics < Client
|
6
|
-
def initialize(api_key, metrics_repository, config)
|
7
|
-
super(config)
|
8
|
-
@api_key = api_key
|
9
|
-
@metrics_repository = metrics_repository
|
10
|
-
end
|
11
|
-
|
12
|
-
def post
|
13
|
-
post_latencies
|
14
|
-
post_counts
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def post_latencies
|
20
|
-
if @metrics_repository.latencies.empty?
|
21
|
-
@config.split_logger.log_if_debug('No latencies to report.')
|
22
|
-
else
|
23
|
-
@metrics_repository.latencies.each do |name, latencies|
|
24
|
-
metrics_time = { name: name, latencies: latencies }
|
25
|
-
|
26
|
-
response = post_api("#{@config.events_uri}/metrics/time", @api_key, metrics_time)
|
27
|
-
|
28
|
-
log_status(response, metrics_time.size)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
@metrics_repository.clear_latencies
|
33
|
-
end
|
34
|
-
|
35
|
-
def post_counts
|
36
|
-
if @metrics_repository.counts.empty?
|
37
|
-
@config.split_logger.log_if_debug('No counts to report.')
|
38
|
-
else
|
39
|
-
@metrics_repository.counts.each do |name, count|
|
40
|
-
metrics_count = { name: name, delta: count }
|
41
|
-
|
42
|
-
response = post_api("#{@config.events_uri}/metrics/counter", @api_key, metrics_count)
|
43
|
-
|
44
|
-
log_status(response, metrics_count.size)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
@metrics_repository.clear_counts
|
48
|
-
end
|
49
|
-
|
50
|
-
def log_status(response, info_to_log)
|
51
|
-
if response.success?
|
52
|
-
@config.split_logger.log_if_debug("Metric time reported: #{info_to_log}")
|
53
|
-
else
|
54
|
-
@config.logger.error("Unexpected status code while posting time metrics: #{response.status}" \
|
55
|
-
' - Check your API key and base URI')
|
56
|
-
raise 'Split SDK failed to connect to backend to post metrics'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
module SplitIoClient
|
2
|
-
|
3
|
-
#
|
4
|
-
# class to handle cached metrics
|
5
|
-
#
|
6
|
-
class Metrics < NoMethodError
|
7
|
-
|
8
|
-
@counter
|
9
|
-
@delta
|
10
|
-
|
11
|
-
#
|
12
|
-
# cached latencies
|
13
|
-
#
|
14
|
-
# @return [object] array of latencies
|
15
|
-
attr_accessor :latencies
|
16
|
-
|
17
|
-
#
|
18
|
-
# cached counts
|
19
|
-
#
|
20
|
-
# @return [object] array of counts
|
21
|
-
attr_accessor :counts
|
22
|
-
|
23
|
-
#
|
24
|
-
# cached gauges
|
25
|
-
#
|
26
|
-
# @return [object] array of gauges
|
27
|
-
attr_accessor :gauges
|
28
|
-
|
29
|
-
#
|
30
|
-
# quese size for cached arrays
|
31
|
-
#
|
32
|
-
# @return [int] queue size
|
33
|
-
attr_accessor :queue_size
|
34
|
-
|
35
|
-
def initialize(queue_size, repository)
|
36
|
-
@queue_size = queue_size
|
37
|
-
@binary_search = SplitIoClient::BinarySearchLatencyTracker.new
|
38
|
-
@repository = repository
|
39
|
-
end
|
40
|
-
|
41
|
-
#
|
42
|
-
# creates a new entry in the array for cached counts
|
43
|
-
#
|
44
|
-
# @param counter [string] name of the counter
|
45
|
-
# @delta [int] value of the counter
|
46
|
-
#
|
47
|
-
# @return void
|
48
|
-
def count(counter, delta)
|
49
|
-
return if (delta <= 0) || counter.nil? || counter.strip.empty?
|
50
|
-
|
51
|
-
@repository.add_count(counter, delta)
|
52
|
-
end
|
53
|
-
|
54
|
-
#
|
55
|
-
# creates a new entry in the array for cached time metrics
|
56
|
-
#
|
57
|
-
# @param operation [string] name of the operation
|
58
|
-
# @time_in_ms [number] time in miliseconds
|
59
|
-
#
|
60
|
-
# @return void
|
61
|
-
def time(operation, time_in_ms)
|
62
|
-
return if operation.nil? || operation.empty? || time_in_ms < 0
|
63
|
-
|
64
|
-
@repository.add_latency(operation, time_in_ms, @binary_search)
|
65
|
-
end
|
66
|
-
|
67
|
-
#
|
68
|
-
# creates a new entry in the array for cached gauges
|
69
|
-
#
|
70
|
-
# @param gauge [string] name of the gauge
|
71
|
-
# @value [number] value of the gauge
|
72
|
-
#
|
73
|
-
# @return void
|
74
|
-
def gauge(gauge, value)
|
75
|
-
return if gauge.nil? || gauge.empty?
|
76
|
-
|
77
|
-
@repository.add_gauge(gauge, value)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SplitIoClient
|
4
|
-
class RedisMetricsFixer
|
5
|
-
def initialize(metrics_repository, config)
|
6
|
-
@metrics_repository = metrics_repository
|
7
|
-
@config = config
|
8
|
-
end
|
9
|
-
|
10
|
-
def call
|
11
|
-
return if ENV['SPLITCLIENT_ENV'] == 'test' || @config.mode == :standalone
|
12
|
-
|
13
|
-
fixer_thread
|
14
|
-
|
15
|
-
if defined?(PhusionPassenger)
|
16
|
-
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
17
|
-
fixer_thread if forked
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def fixer_thread
|
25
|
-
Thread.new do
|
26
|
-
begin
|
27
|
-
@config.logger.info('Starting redis metrics fixer')
|
28
|
-
|
29
|
-
@metrics_repository.fix_latencies
|
30
|
-
rescue StandardError => error
|
31
|
-
@config.log_found_exception(__method__.to_s, error)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|