splitclient-rb 7.2.3.pre.rc2-java → 7.3.0.pre.rc1-java

Sign up to get free protection for your applications and to get access to all the features.
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