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
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class MemoryRuntimeProducer < RuntimeProducer
6
+ def initialize(config)
7
+ @config = config
8
+ @adapter = config.telemetry_adapter
9
+ end
10
+
11
+ def add_tag(tag)
12
+ return if tag.length >= 9
13
+
14
+ @adapter.tags << tag
15
+ end
16
+
17
+ def record_impressions_stats(type, count)
18
+ @adapter.impressions_data_records.find { |l| l[:type] == type }[:value].value += count unless count.zero?
19
+ rescue StandardError => error
20
+ @config.log_found_exception(__method__.to_s, error)
21
+ end
22
+
23
+ def record_events_stats(type, count)
24
+ @adapter.events_data_records.find { |l| l[:type] == type }[:value].value += count unless count.zero?
25
+ rescue StandardError => error
26
+ @config.log_found_exception(__method__.to_s, error)
27
+ end
28
+
29
+ def record_successful_sync(type, value = nil)
30
+ value = (Time.now.to_f * 1000.0).to_i if value.nil?
31
+
32
+ @adapter.last_synchronization.find { |l| l[:type] == type }[:value] = Concurrent::AtomicFixnum.new(value)
33
+ rescue StandardError => error
34
+ @config.log_found_exception(__method__.to_s, error)
35
+ end
36
+
37
+ def record_sync_error(type, status)
38
+ http_errors = @adapter.http_errors.find { |l| l[:type] == type }[:value]
39
+
40
+ begin
41
+ http_errors[status] += 1
42
+ rescue StandardError => _
43
+ http_errors[status] = 1
44
+ end
45
+ rescue StandardError => error
46
+ @config.log_found_exception(__method__.to_s, error)
47
+ end
48
+
49
+ def record_sync_latency(type, bucket)
50
+ @adapter.http_latencies.find { |l| l[:type] == type }[:value][bucket] += 1
51
+ rescue StandardError => error
52
+ @config.log_found_exception(__method__.to_s, error)
53
+ end
54
+
55
+ def record_auth_rejections
56
+ @adapter.auth_rejections.increment
57
+ rescue StandardError => error
58
+ @config.log_found_exception(__method__.to_s, error)
59
+ end
60
+
61
+ def record_token_refreshes
62
+ @adapter.token_refreshes.increment
63
+ rescue StandardError => error
64
+ @config.log_found_exception(__method__.to_s, error)
65
+ end
66
+
67
+ def record_streaming_event(type, data = nil, timestamp = nil)
68
+ timestamp ||= (Time.now.to_f * 1000.0).to_i
69
+ @adapter.streaming_events << { e: type, d: data, t: timestamp } unless @adapter.streaming_events.length >= 19
70
+ rescue StandardError => error
71
+ @config.log_found_exception(__method__.to_s, error)
72
+ end
73
+
74
+ def record_session_length(session)
75
+ @adapter.session_length.value = session
76
+ rescue StandardError => error
77
+ @config.log_found_exception(__method__.to_s, error)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,192 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class MemorySynchronizer < Synchronizer
6
+ def initialize(config,
7
+ telemtry_consumers,
8
+ repositories,
9
+ telemetry_api)
10
+ @config = config
11
+ @telemetry_init_consumer = telemtry_consumers[:init]
12
+ @telemetry_runtime_consumer = telemtry_consumers[:runtime]
13
+ @telemtry_evaluation_consumer = telemtry_consumers[:evaluation]
14
+ @splits_repository = repositories[:splits]
15
+ @segments_repository = repositories[:segments]
16
+ @telemetry_api = telemetry_api
17
+ end
18
+
19
+ def synchronize_stats
20
+ usage = Usage.new(@telemetry_runtime_consumer.last_synchronizations,
21
+ @telemtry_evaluation_consumer.pop_latencies,
22
+ @telemtry_evaluation_consumer.pop_exceptions,
23
+ @telemetry_runtime_consumer.pop_http_errors,
24
+ @telemetry_runtime_consumer.pop_http_latencies,
25
+ @telemetry_runtime_consumer.pop_token_refreshes,
26
+ @telemetry_runtime_consumer.pop_auth_rejections,
27
+ @telemetry_runtime_consumer.impressions_stats(Domain::Constants::IMPRESSIONS_QUEUED),
28
+ @telemetry_runtime_consumer.impressions_stats(Domain::Constants::IMPRESSIONS_DEDUPE),
29
+ @telemetry_runtime_consumer.impressions_stats(Domain::Constants::IMPRESSIONS_DROPPED),
30
+ @splits_repository.splits_count,
31
+ @segments_repository.segments_count,
32
+ @segments_repository.segment_keys_count,
33
+ @telemetry_runtime_consumer.session_length,
34
+ @telemetry_runtime_consumer.events_stats(Domain::Constants::EVENTS_QUEUED),
35
+ @telemetry_runtime_consumer.events_stats(Domain::Constants::EVENTS_DROPPED),
36
+ @telemetry_runtime_consumer.pop_streaming_events,
37
+ @telemetry_runtime_consumer.pop_tags)
38
+
39
+ @telemetry_api.record_stats(format_stats(usage))
40
+ rescue StandardError => error
41
+ @config.log_found_exception(__method__.to_s, error)
42
+ end
43
+
44
+ def synchronize_config(active_factories = nil, redundant_active_factories = nil, time_until_ready = nil)
45
+ rates = Rates.new(@config.features_refresh_rate,
46
+ @config.segments_refresh_rate,
47
+ @config.impressions_refresh_rate,
48
+ @config.events_push_rate,
49
+ @config.telemetry_refresh_rate)
50
+
51
+ url_overrides = UrlOverrides.new(@config.base_uri != SplitConfig.default_base_uri.chomp('/'),
52
+ @config.events_uri != SplitConfig.default_events_uri.chomp('/'),
53
+ @config.auth_service_url != SplitConfig.default_auth_service_url,
54
+ @config.streaming_service_url != SplitConfig.default_streaming_service_url,
55
+ @config.telemetry_service_url != SplitConfig.default_telemetry_service_url)
56
+
57
+ active_factories ||= SplitIoClient.split_factory_registry.active_factories
58
+ redundant_active_factories ||= SplitIoClient.split_factory_registry.redundant_active_factories
59
+
60
+ init_config = ConfigInit.new(mode,
61
+ 'memory',
62
+ active_factories,
63
+ redundant_active_factories,
64
+ @telemetry_runtime_consumer.pop_tags,
65
+ @config.streaming_enabled,
66
+ rates,
67
+ url_overrides,
68
+ @config.impressions_queue_size,
69
+ @config.events_queue_size,
70
+ impressions_mode,
71
+ !@config.impression_listener.nil?,
72
+ http_proxy_detected?,
73
+ time_until_ready || Time.now.to_i - @config.sdk_start_time.to_i,
74
+ @telemetry_init_consumer.bur_timeouts,
75
+ @telemetry_init_consumer.non_ready_usages)
76
+
77
+ @telemetry_api.record_init(fornat_init_config(init_config))
78
+ rescue StandardError => error
79
+ @config.log_found_exception(__method__.to_s, error)
80
+ end
81
+
82
+ private
83
+
84
+ def fornat_init_config(init)
85
+ {
86
+ oM: init.om,
87
+ sE: init.se,
88
+ st: init.st,
89
+ rR: {
90
+ sp: init.rr.sp,
91
+ se: init.rr.se,
92
+ im: init.rr.im,
93
+ ev: init.rr.ev,
94
+ te: init.rr.te
95
+ },
96
+ iQ: init.iq,
97
+ eQ: init.eq,
98
+ iM: init.im,
99
+ uO: {
100
+ s: init.uo.s,
101
+ e: init.uo.e,
102
+ a: init.uo.a,
103
+ st: init.uo.st,
104
+ t: init.uo.t
105
+ },
106
+ iL: init.il,
107
+ hP: init.hp,
108
+ aF: init.af,
109
+ rF: init.rf,
110
+ tR: init.tr,
111
+ bT: init.bt,
112
+ nR: init.nr,
113
+ t: init.t,
114
+ i: init.i
115
+ }
116
+ end
117
+
118
+ def format_stats(usage)
119
+ {
120
+ lS: usage.ls.to_h,
121
+ mL: {
122
+ t: usage.ml[Telemetry::Domain::Constants::TREATMENT],
123
+ ts: usage.ml[Telemetry::Domain::Constants::TREATMENTS],
124
+ tc: usage.ml[Telemetry::Domain::Constants::TREATMENT_WITH_CONFIG],
125
+ tcs: usage.ml[Telemetry::Domain::Constants::TREATMENTS_WITH_CONFIG],
126
+ tr: usage.ml[Telemetry::Domain::Constants::TRACK]
127
+ },
128
+ mE: {
129
+ t: usage.me[Telemetry::Domain::Constants::TREATMENT],
130
+ ts: usage.me[Telemetry::Domain::Constants::TREATMENTS],
131
+ tc: usage.me[Telemetry::Domain::Constants::TREATMENT_WITH_CONFIG],
132
+ tcs: usage.me[Telemetry::Domain::Constants::TREATMENTS_WITH_CONFIG],
133
+ tr: usage.me[Telemetry::Domain::Constants::TRACK]
134
+ },
135
+ hE: {
136
+ sp: usage.he.sp,
137
+ se: usage.he.se,
138
+ im: usage.he.im,
139
+ ic: usage.he.ic,
140
+ ev: usage.he.ev,
141
+ te: usage.he.te,
142
+ to: usage.he.to
143
+ },
144
+ hL: {
145
+ sp: usage.hl.sp,
146
+ se: usage.hl.se,
147
+ im: usage.hl.im,
148
+ ic: usage.hl.ic,
149
+ ev: usage.hl.ev,
150
+ te: usage.hl.te,
151
+ to: usage.hl.to
152
+ },
153
+ tR: usage.tr,
154
+ aR: usage.ar,
155
+ iQ: usage.iq,
156
+ iDe: usage.ide,
157
+ iDr: usage.idr,
158
+ spC: usage.spc,
159
+ seC: usage.sec,
160
+ skC: usage.skc,
161
+ sL: usage.sl,
162
+ eQ: usage.eq,
163
+ eD: usage.ed,
164
+ sE: usage.se,
165
+ t: usage.t
166
+ }
167
+ end
168
+
169
+ def http_proxy_detected?
170
+ !ENV['HTTP_PROXY'].nil? || !ENV['HTTPS_PROXY'].nil?
171
+ end
172
+
173
+ def mode
174
+ case @config.mode
175
+ when :customer
176
+ 1
177
+ else
178
+ 0
179
+ end
180
+ end
181
+
182
+ def impressions_mode
183
+ case @config.impressions_mode
184
+ when :optimized
185
+ 0
186
+ else
187
+ 1
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class RedisEvaluationProducer < EvaluationProducer
6
+ def initialize(config)
7
+ @config = config
8
+ @adapter = config.telemetry_adapter
9
+
10
+ @sdk_version = "#{@config.language}-#{@config.version}"
11
+ @name = @config.machine_name
12
+ @ip = @config.machine_ip
13
+ end
14
+
15
+ def record_latency(method, bucket)
16
+ @adapter.hincrby(latency_key, "#{@sdk_version}/#{@name}/#{@ip}/#{method}/#{bucket}", 1)
17
+ rescue StandardError => error
18
+ @config.log_found_exception(__method__.to_s, error)
19
+ end
20
+
21
+ def record_exception(method)
22
+ @adapter.hincrby(exception_key, "#{@sdk_version}/#{@name}/#{@ip}/#{method}", 1)
23
+ rescue StandardError => error
24
+ @config.log_found_exception(__method__.to_s, error)
25
+ end
26
+
27
+ private
28
+
29
+ def latency_key
30
+ "#{@config.redis_namespace}.telemetry.latencies"
31
+ end
32
+
33
+ def exception_key
34
+ "#{@config.redis_namespace}.telemetry.exceptions"
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class RedisInitProducer < InitProducer
6
+ def initialize(config)
7
+ @config = config
8
+ @adapter = config.telemetry_adapter
9
+ end
10
+
11
+ def record_config(config_data)
12
+ return if config_data.nil?
13
+
14
+ data = { m: { i: @config.machine_ip, n: @config.machine_name, s: "#{@config.language}-#{@config.version}" },
15
+ t: { oM: config_data.om, st: config_data.st, aF: config_data.af, rF: config_data.rf, t: config_data.t } }
16
+
17
+ @adapter.add_to_queue(config_key, data.to_json)
18
+ rescue StandardError => error
19
+ @config.log_found_exception(__method__.to_s, error)
20
+ end
21
+
22
+ def record_bur_timeout
23
+ # no-op
24
+ end
25
+
26
+ def record_non_ready_usages
27
+ # no-op
28
+ end
29
+
30
+ private
31
+
32
+ def config_key
33
+ "#{@config.redis_namespace}.telemetry.config"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class RedisSynchronizer < Synchronizer
6
+ def initialize(config,
7
+ telemetry_init_producer)
8
+ @config = config
9
+ @telemetry_init_producer = telemetry_init_producer
10
+ end
11
+
12
+ def synchronize_stats
13
+ # No-op
14
+ end
15
+
16
+ def synchronize_config(active_factories = nil, redundant_active_factories = nil, tags = nil)
17
+ active_factories ||= SplitIoClient.split_factory_registry.active_factories
18
+ redundant_active_factories ||= SplitIoClient.split_factory_registry.redundant_active_factories
19
+
20
+ init_config = ConfigInit.new(@config.mode, 'redis', active_factories, redundant_active_factories, tags)
21
+
22
+ @telemetry_init_producer.record_config(init_config)
23
+ rescue StandardError => error
24
+ @config.log_found_exception(__method__.to_s, error)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class RuntimeConsumer
6
+ extend Forwardable
7
+ def_delegators :@runtime,
8
+ :pop_tags,
9
+ :impressions_stats,
10
+ :events_stats,
11
+ :last_synchronizations,
12
+ :pop_http_errors,
13
+ :pop_http_latencies,
14
+ :pop_auth_rejections,
15
+ :pop_token_refreshes,
16
+ :pop_streaming_events,
17
+ :session_length
18
+
19
+ def initialize(config)
20
+ @runtime = SplitIoClient::Telemetry::MemoryRuntimeConsumer.new(config)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ class RuntimeProducer
6
+ extend Forwardable
7
+ def_delegators :@runtime,
8
+ :add_tag,
9
+ :record_impressions_stats,
10
+ :record_events_stats,
11
+ :record_successful_sync,
12
+ :record_sync_error,
13
+ :record_sync_latency,
14
+ :record_auth_rejections,
15
+ :record_token_refreshes,
16
+ :record_streaming_event,
17
+ :record_session_length
18
+
19
+ def initialize(config)
20
+ @runtime = SplitIoClient::Telemetry::MemoryRuntimeProducer.new(config)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ module Telemetry
5
+ module Storages
6
+ class Memory
7
+ attr_reader :latencies,
8
+ :exceptions,
9
+ :factory_counters,
10
+ :tags,
11
+ :impressions_data_records,
12
+ :events_data_records,
13
+ :last_synchronization,
14
+ :http_errors,
15
+ :http_latencies,
16
+ :auth_rejections,
17
+ :token_refreshes,
18
+ :streaming_events,
19
+ :session_length
20
+
21
+ def initialize
22
+ init_latencies
23
+ init_exceptions
24
+ init_factory_counters
25
+ init_impressions_data_records
26
+ init_events_data_records
27
+ init_last_synchronization
28
+ init_http_errors
29
+ init_http_latencies
30
+ init_auth_rejections
31
+ init_token_refreshes
32
+ init_streaming_events
33
+ init_session_length
34
+ init_tags
35
+ end
36
+
37
+ def init_latencies
38
+ @latencies = Concurrent::Array.new
39
+
40
+ array_size = BinarySearchLatencyTracker::BUCKETS.length
41
+ @latencies << { method: Domain::Constants::TREATMENT, latencies: Concurrent::Array.new(array_size, 0) }
42
+ @latencies << { method: Domain::Constants::TREATMENTS, latencies: Concurrent::Array.new(array_size, 0) }
43
+ @latencies << { method: Domain::Constants::TREATMENT_WITH_CONFIG, latencies: Concurrent::Array.new(array_size, 0) }
44
+ @latencies << { method: Domain::Constants::TREATMENTS_WITH_CONFIG, latencies: Concurrent::Array.new(array_size, 0) }
45
+ @latencies << { method: Domain::Constants::TRACK, latencies: Concurrent::Array.new(array_size, 0) }
46
+ end
47
+
48
+ def init_exceptions
49
+ @exceptions = Concurrent::Array.new
50
+
51
+ @exceptions << { method: Domain::Constants::TREATMENT, exceptions: Concurrent::AtomicFixnum.new(0) }
52
+ @exceptions << { method: Domain::Constants::TREATMENTS, exceptions: Concurrent::AtomicFixnum.new(0) }
53
+ @exceptions << { method: Domain::Constants::TREATMENT_WITH_CONFIG, exceptions: Concurrent::AtomicFixnum.new(0) }
54
+ @exceptions << { method: Domain::Constants::TREATMENTS_WITH_CONFIG, exceptions: Concurrent::AtomicFixnum.new(0) }
55
+ @exceptions << { method: Domain::Constants::TRACK, exceptions: Concurrent::AtomicFixnum.new(0) }
56
+ end
57
+
58
+ def init_factory_counters
59
+ @factory_counters = Concurrent::Array.new
60
+
61
+ @factory_counters << { action: Domain::Constants::BUR_TIMEOUT, counts: Concurrent::AtomicFixnum.new(0) }
62
+ @factory_counters << { action: Domain::Constants::NON_READY_USAGES, counts: Concurrent::AtomicFixnum.new(0) }
63
+ end
64
+
65
+ def init_impressions_data_records
66
+ @impressions_data_records = Concurrent::Array.new
67
+
68
+ @impressions_data_records << { type: Domain::Constants::IMPRESSIONS_DEDUPE, value: Concurrent::AtomicFixnum.new(0) }
69
+ @impressions_data_records << { type: Domain::Constants::IMPRESSIONS_DROPPED, value: Concurrent::AtomicFixnum.new(0) }
70
+ @impressions_data_records << { type: Domain::Constants::IMPRESSIONS_QUEUED, value: Concurrent::AtomicFixnum.new(0) }
71
+ end
72
+
73
+ def init_events_data_records
74
+ @events_data_records = Concurrent::Array.new
75
+
76
+ @events_data_records << { type: Domain::Constants::EVENTS_DROPPED, value: Concurrent::AtomicFixnum.new(0) }
77
+ @events_data_records << { type: Domain::Constants::EVENTS_QUEUED, value: Concurrent::AtomicFixnum.new(0) }
78
+ end
79
+
80
+ def init_last_synchronization
81
+ @last_synchronization = Concurrent::Array.new
82
+
83
+ @last_synchronization << { type: Domain::Constants::SPLIT_SYNC, value: Concurrent::AtomicFixnum.new(0) }
84
+ @last_synchronization << { type: Domain::Constants::SEGMENT_SYNC, value: Concurrent::AtomicFixnum.new(0) }
85
+ @last_synchronization << { type: Domain::Constants::EVENT_SYNC, value: Concurrent::AtomicFixnum.new(0) }
86
+ @last_synchronization << { type: Domain::Constants::IMPRESSION_COUNT_SYNC, value: Concurrent::AtomicFixnum.new(0) }
87
+ @last_synchronization << { type: Domain::Constants::IMPRESSIONS_SYNC, value: Concurrent::AtomicFixnum.new(0) }
88
+ @last_synchronization << { type: Domain::Constants::TELEMETRY_SYNC, value: Concurrent::AtomicFixnum.new(0) }
89
+ @last_synchronization << { type: Domain::Constants::TOKEN_SYNC, value: Concurrent::AtomicFixnum.new(0) }
90
+ end
91
+
92
+ def init_tags
93
+ @tags = Concurrent::Array.new
94
+ end
95
+
96
+ def init_http_errors
97
+ @http_errors = Concurrent::Array.new
98
+
99
+ @http_errors << { type: Domain::Constants::SPLIT_SYNC, value: Concurrent::Hash.new }
100
+ @http_errors << { type: Domain::Constants::SEGMENT_SYNC, value: Concurrent::Hash.new }
101
+ @http_errors << { type: Domain::Constants::EVENT_SYNC, value: Concurrent::Hash.new }
102
+ @http_errors << { type: Domain::Constants::IMPRESSION_COUNT_SYNC, value: Concurrent::Hash.new }
103
+ @http_errors << { type: Domain::Constants::IMPRESSIONS_SYNC, value: Concurrent::Hash.new }
104
+ @http_errors << { type: Domain::Constants::TELEMETRY_SYNC, value: Concurrent::Hash.new }
105
+ @http_errors << { type: Domain::Constants::TOKEN_SYNC, value: Concurrent::Hash.new }
106
+ end
107
+
108
+ def init_http_latencies
109
+ @http_latencies = Concurrent::Array.new
110
+
111
+ array_size = BinarySearchLatencyTracker::BUCKETS.length
112
+ @http_latencies << { type: Domain::Constants::SPLIT_SYNC, value: Concurrent::Array.new(array_size, 0) }
113
+ @http_latencies << { type: Domain::Constants::SEGMENT_SYNC, value: Concurrent::Array.new(array_size, 0) }
114
+ @http_latencies << { type: Domain::Constants::EVENT_SYNC, value: Concurrent::Array.new(array_size, 0) }
115
+ @http_latencies << { type: Domain::Constants::IMPRESSION_COUNT_SYNC, value: Concurrent::Array.new(array_size, 0) }
116
+ @http_latencies << { type: Domain::Constants::IMPRESSIONS_SYNC, value: Concurrent::Array.new(array_size, 0) }
117
+ @http_latencies << { type: Domain::Constants::TELEMETRY_SYNC, value: Concurrent::Array.new(array_size, 0) }
118
+ @http_latencies << { type: Domain::Constants::TOKEN_SYNC, value: Concurrent::Array.new(array_size, 0) }
119
+ end
120
+
121
+ def init_auth_rejections
122
+ @auth_rejections = Concurrent::AtomicFixnum.new(0)
123
+ end
124
+
125
+ def init_token_refreshes
126
+ @token_refreshes = Concurrent::AtomicFixnum.new(0)
127
+ end
128
+
129
+ def init_streaming_events
130
+ @streaming_events = Concurrent::Array.new
131
+ end
132
+
133
+ def init_session_length
134
+ @session_length = Concurrent::AtomicFixnum.new(0)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end