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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -0
  3. data/CHANGES.txt +6 -0
  4. data/lib/splitclient-rb.rb +24 -9
  5. data/lib/splitclient-rb/cache/adapters/redis_adapter.rb +4 -0
  6. data/lib/splitclient-rb/cache/fetchers/segment_fetcher.rb +8 -7
  7. data/lib/splitclient-rb/cache/fetchers/split_fetcher.rb +7 -7
  8. data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +6 -3
  9. data/lib/splitclient-rb/cache/repositories/events_repository.rb +4 -3
  10. data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +8 -0
  11. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +2 -0
  12. data/lib/splitclient-rb/cache/repositories/repository.rb +0 -4
  13. data/lib/splitclient-rb/cache/repositories/segments_repository.rb +20 -0
  14. data/lib/splitclient-rb/cache/repositories/splits_repository.rb +4 -0
  15. data/lib/splitclient-rb/cache/senders/localhost_repo_cleaner.rb +1 -3
  16. data/lib/splitclient-rb/cache/stores/sdk_blocker.rb +9 -0
  17. data/lib/splitclient-rb/clients/split_client.rb +59 -25
  18. data/lib/splitclient-rb/engine/api/client.rb +3 -2
  19. data/lib/splitclient-rb/engine/api/events.rb +10 -1
  20. data/lib/splitclient-rb/engine/api/impressions.rb +19 -2
  21. data/lib/splitclient-rb/engine/api/segments.rb +20 -18
  22. data/lib/splitclient-rb/engine/api/splits.rb +10 -10
  23. data/lib/splitclient-rb/engine/api/telemetry_api.rb +39 -0
  24. data/lib/splitclient-rb/engine/auth_api_client.rb +21 -8
  25. data/lib/splitclient-rb/engine/common/impressions_manager.rb +27 -3
  26. data/lib/splitclient-rb/engine/metrics/binary_search_latency_tracker.rb +3 -65
  27. data/lib/splitclient-rb/engine/push_manager.rb +10 -2
  28. data/lib/splitclient-rb/engine/sync_manager.rb +42 -20
  29. data/lib/splitclient-rb/engine/synchronizer.rb +13 -12
  30. data/lib/splitclient-rb/split_config.rb +46 -21
  31. data/lib/splitclient-rb/split_factory.rb +31 -13
  32. data/lib/splitclient-rb/split_factory_registry.rb +12 -0
  33. data/lib/splitclient-rb/sse/event_source/client.rb +10 -1
  34. data/lib/splitclient-rb/sse/notification_manager_keeper.rb +17 -3
  35. data/lib/splitclient-rb/sse/sse_handler.rb +10 -6
  36. data/lib/splitclient-rb/telemetry/domain/constants.rb +42 -0
  37. data/lib/splitclient-rb/telemetry/domain/structs.rb +31 -0
  38. data/lib/splitclient-rb/telemetry/evaluation_consumer.rb +14 -0
  39. data/lib/splitclient-rb/telemetry/evaluation_producer.rb +21 -0
  40. data/lib/splitclient-rb/telemetry/init_consumer.rb +14 -0
  41. data/lib/splitclient-rb/telemetry/init_producer.rb +19 -0
  42. data/lib/splitclient-rb/telemetry/memory/memory_evaluation_consumer.rb +32 -0
  43. data/lib/splitclient-rb/telemetry/memory/memory_evaluation_producer.rb +24 -0
  44. data/lib/splitclient-rb/telemetry/memory/memory_init_consumer.rb +28 -0
  45. data/lib/splitclient-rb/telemetry/memory/memory_init_producer.rb +34 -0
  46. data/lib/splitclient-rb/telemetry/memory/memory_runtime_consumer.rb +112 -0
  47. data/lib/splitclient-rb/telemetry/memory/memory_runtime_producer.rb +81 -0
  48. data/lib/splitclient-rb/telemetry/memory/memory_synchronizer.rb +192 -0
  49. data/lib/splitclient-rb/telemetry/redis/redis_evaluation_producer.rb +38 -0
  50. data/lib/splitclient-rb/telemetry/redis/redis_init_producer.rb +37 -0
  51. data/lib/splitclient-rb/telemetry/redis/redis_synchronizer.rb +28 -0
  52. data/lib/splitclient-rb/telemetry/runtime_consumer.rb +24 -0
  53. data/lib/splitclient-rb/telemetry/runtime_producer.rb +24 -0
  54. data/lib/splitclient-rb/telemetry/storages/memory.rb +139 -0
  55. data/lib/splitclient-rb/telemetry/sync_task.rb +38 -0
  56. data/lib/splitclient-rb/telemetry/synchronizer.rb +29 -0
  57. data/lib/splitclient-rb/version.rb +1 -1
  58. metadata +24 -9
  59. data/lib/splitclient-rb/cache/repositories/metrics/memory_repository.rb +0 -163
  60. data/lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb +0 -131
  61. data/lib/splitclient-rb/cache/repositories/metrics_repository.rb +0 -23
  62. data/lib/splitclient-rb/cache/senders/metrics_sender.rb +0 -55
  63. data/lib/splitclient-rb/engine/api/metrics.rb +0 -61
  64. data/lib/splitclient-rb/engine/metrics/metrics.rb +0 -80
  65. 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