splitclient-rb 7.2.2-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 +15 -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 +16 -7
- data/lib/splitclient-rb/cache/fetchers/split_fetcher.rb +9 -9
- 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/constants.rb +6 -1
- 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 +12 -3
- data/lib/splitclient-rb/engine/sync_manager.rb +85 -46
- data/lib/splitclient-rb/engine/synchronizer.rb +14 -22
- 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 +53 -28
- data/lib/splitclient-rb/sse/event_source/event_parser.rb +10 -1
- data/lib/splitclient-rb/sse/notification_manager_keeper.rb +45 -26
- data/lib/splitclient-rb/sse/sse_handler.rb +16 -21
- data/lib/splitclient-rb/sse/workers/segments_worker.rb +5 -4
- data/lib/splitclient-rb/sse/workers/splits_worker.rb +6 -3
- 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 +26 -11
- 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
@@ -5,19 +5,22 @@ module SplitIoClient
|
|
5
5
|
class SSEHandler
|
6
6
|
attr_reader :sse_client
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
|
8
|
+
def initialize(metadata,
|
9
|
+
synchronizer,
|
10
|
+
repositories,
|
11
|
+
notification_manager_keeper,
|
12
|
+
telemetry_runtime_producer)
|
13
|
+
@config = metadata[:config]
|
10
14
|
@notification_manager_keeper = notification_manager_keeper
|
11
|
-
@splits_worker = SplitIoClient::SSE::Workers::SplitsWorker.new(synchronizer, config,
|
12
|
-
@segments_worker = SplitIoClient::SSE::Workers::SegmentsWorker.new(synchronizer, config,
|
13
|
-
@notification_processor = SplitIoClient::SSE::NotificationProcessor.new(config, @splits_worker, @segments_worker)
|
14
|
-
@sse_client = SSE::EventSource::Client.new(@config) do |client|
|
15
|
+
@splits_worker = SplitIoClient::SSE::Workers::SplitsWorker.new(synchronizer, @config, repositories[:splits])
|
16
|
+
@segments_worker = SplitIoClient::SSE::Workers::SegmentsWorker.new(synchronizer, @config, repositories[:segments])
|
17
|
+
@notification_processor = SplitIoClient::SSE::NotificationProcessor.new(@config, @splits_worker, @segments_worker)
|
18
|
+
@sse_client = SSE::EventSource::Client.new(@config, metadata[:api_key], telemetry_runtime_producer) do |client|
|
15
19
|
client.on_event { |event| handle_incoming_message(event) }
|
16
|
-
client.
|
17
|
-
client.on_disconnect { |reconnect| process_disconnect(reconnect) }
|
20
|
+
client.on_action { |action| process_action(action) }
|
18
21
|
end
|
19
22
|
|
20
|
-
@on = {
|
23
|
+
@on = { action: ->(_) {} }
|
21
24
|
|
22
25
|
yield self if block_given?
|
23
26
|
end
|
@@ -48,22 +51,14 @@ module SplitIoClient
|
|
48
51
|
@segments_worker.stop
|
49
52
|
end
|
50
53
|
|
51
|
-
def
|
52
|
-
@on[:
|
53
|
-
end
|
54
|
-
|
55
|
-
def on_disconnect(&action)
|
56
|
-
@on[:disconnect] = action
|
57
|
-
end
|
58
|
-
|
59
|
-
def process_disconnect(reconnect)
|
60
|
-
@on[:disconnect].call(reconnect)
|
54
|
+
def on_action(&action)
|
55
|
+
@on[:action] = action
|
61
56
|
end
|
62
57
|
|
63
58
|
private
|
64
59
|
|
65
|
-
def
|
66
|
-
@on[:
|
60
|
+
def process_action(action)
|
61
|
+
@on[:action].call(action)
|
67
62
|
end
|
68
63
|
|
69
64
|
def handle_incoming_message(notification)
|
@@ -48,12 +48,13 @@ module SplitIoClient
|
|
48
48
|
def perform
|
49
49
|
while (item = @queue.pop)
|
50
50
|
segment_name = item[:segment_name]
|
51
|
-
|
52
|
-
|
51
|
+
cn = item[:change_number]
|
52
|
+
@config.logger.debug("SegmentsWorker change_number dequeue #{segment_name}, #{cn}")
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
attempt = 0
|
55
|
+
while cn > @segments_repository.get_change_number(segment_name).to_i && attempt <= Workers::MAX_RETRIES_ALLOWED
|
56
56
|
@synchronizer.fetch_segment(segment_name)
|
57
|
+
attempt += 1
|
57
58
|
end
|
58
59
|
end
|
59
60
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
module SplitIoClient
|
4
4
|
module SSE
|
5
5
|
module Workers
|
6
|
+
MAX_RETRIES_ALLOWED = 10
|
7
|
+
|
6
8
|
class SplitsWorker
|
7
9
|
def initialize(synchronizer, config, splits_repository)
|
8
10
|
@synchronizer = synchronizer
|
@@ -59,11 +61,12 @@ module SplitIoClient
|
|
59
61
|
|
60
62
|
def perform
|
61
63
|
while (change_number = @queue.pop)
|
62
|
-
|
64
|
+
@config.logger.debug("SplitsWorker change_number dequeue #{change_number}")
|
63
65
|
|
64
|
-
|
65
|
-
|
66
|
+
attempt = 0
|
67
|
+
while change_number > @splits_repository.get_change_number.to_i && attempt <= Workers::MAX_RETRIES_ALLOWED
|
66
68
|
@synchronizer.fetch_splits
|
69
|
+
attempt += 1
|
67
70
|
end
|
68
71
|
end
|
69
72
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
module Domain
|
6
|
+
class Constants
|
7
|
+
BUR_TIMEOUT = 'bur_timeout'
|
8
|
+
NON_READY_USAGES = 'non_ready_usages'
|
9
|
+
|
10
|
+
IMPRESSIONS_DROPPED = 'impressions_dropped'
|
11
|
+
IMPRESSIONS_DEDUPE = 'impressions_deduped'
|
12
|
+
IMPRESSIONS_QUEUED = 'impressions_queued'
|
13
|
+
|
14
|
+
EVENTS_DROPPED = 'events_dropped'
|
15
|
+
EVENTS_QUEUED = 'events_queued'
|
16
|
+
|
17
|
+
SPLIT_SYNC = 'split_sync'
|
18
|
+
SEGMENT_SYNC = 'segment_sync'
|
19
|
+
IMPRESSIONS_SYNC = 'impressions_sync'
|
20
|
+
IMPRESSION_COUNT_SYNC = 'impression_count_sync'
|
21
|
+
EVENT_SYNC = 'event_sync'
|
22
|
+
TELEMETRY_SYNC = 'telemetry_sync'
|
23
|
+
TOKEN_SYNC = 'token_sync'
|
24
|
+
|
25
|
+
SSE_CONNECTION_ESTABLISHED = 0
|
26
|
+
OCCUPANCY_PRI = 10
|
27
|
+
OCCUPANCY_SEC = 20
|
28
|
+
STREAMING_STATUS = 30
|
29
|
+
CONNECTION_ERROR = 40
|
30
|
+
TOKEN_REFRESH = 50
|
31
|
+
ABLY_ERROR = 60
|
32
|
+
SYNC_MODE = 70
|
33
|
+
|
34
|
+
TREATMENT = 'treatment'
|
35
|
+
TREATMENTS = 'treatments'
|
36
|
+
TREATMENT_WITH_CONFIG = 'treatment_with_config'
|
37
|
+
TREATMENTS_WITH_CONFIG = 'treatments_with_config'
|
38
|
+
TRACK = 'track'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
# sp: splits, se: segments, im: impressions, ic:impression count, ev: events, te: telemetry, to: token.
|
6
|
+
LastSynchronization = Struct.new(:sp, :se, :im, :ic, :ev, :te, :to)
|
7
|
+
HttpErrors = Struct.new(:sp, :se, :im, :ic, :ev, :te, :to)
|
8
|
+
HttpLatencies = Struct.new(:sp, :se, :im, :ic, :ev, :te, :to)
|
9
|
+
|
10
|
+
# sp: splits, se: segmentos, im: impressions, ev: events, t: telemetry
|
11
|
+
Rates = Struct.new(:sp, :se, :im, :ev, :te)
|
12
|
+
|
13
|
+
# s: sdkUrl, e: eventsUrl, a: authUrl, st: streamUrl, t: telemetryUrl
|
14
|
+
UrlOverrides = Struct.new(:s, :e, :a, :st, :t)
|
15
|
+
|
16
|
+
# om: operationMode, se: streamingEnabled, st: storage, rr: refreshRate, uo: urlOverrides, iq: impressionsQueueSize,
|
17
|
+
# eq: eventsQueueSize, im: impressionsMode, il: impressionListenerEnabled, hp: httpProxyDetected, af: activeFactories,
|
18
|
+
# rf: redundantActiveFactories, tr: timeUntilSdkReady, bt: burTimeouts, nr: sdkNotReadyUsage, t: tags, i: integrations
|
19
|
+
ConfigInit = Struct.new(:om, :st, :af, :rf, :t, :se, :rr, :uo, :iq, :eq, :im, :il, :hp, :tr, :bt, :nr, :i)
|
20
|
+
|
21
|
+
# ls: lastSynchronization, ml: clientMethodLatencies, me: clientMethodExceptions, he: httpErros, hl: httpLatencies,
|
22
|
+
# tr: tokenRefreshes, ar: authRejections, iq: impressionsQueued, ide: impressionsDeduped, idr: impressionsDropped,
|
23
|
+
# spc: splitsCount, sec: segmentCount, skc: segmentKeyCount, sl: sessionLengthMs, eq: eventsQueued, ed: eventsDropped,
|
24
|
+
# se: streamingEvents, t: tags
|
25
|
+
Usage = Struct.new(:ls, :ml, :me, :he, :hl, :tr, :ar, :iq, :ide, :idr, :spc, :sec, :skc, :sl, :eq, :ed, :se, :t)
|
26
|
+
|
27
|
+
# t: treatment, ts: treatments, tc: treatmentWithConfig, tcs: treatmentsWithConfig, tr: track
|
28
|
+
ClientMethodLatencies = Struct.new(:t, :ts, :tc, :tcs, :tr)
|
29
|
+
ClientMethodExceptions = Struct.new(:t, :ts, :tc, :tcs, :tr)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class EvaluationConsumer
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@evaluation, :pop_latencies, :pop_exceptions
|
8
|
+
|
9
|
+
def initialize(config)
|
10
|
+
@evaluation = SplitIoClient::Telemetry::MemoryEvaluationConsumer.new(config)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class EvaluationProducer
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@evaluation,
|
8
|
+
:record_latency,
|
9
|
+
:record_exception
|
10
|
+
|
11
|
+
def initialize(config)
|
12
|
+
@evaluation = case config.telemetry_adapter.class.to_s
|
13
|
+
when 'SplitIoClient::Cache::Adapters::RedisAdapter'
|
14
|
+
SplitIoClient::Telemetry::RedisEvaluationProducer.new(config)
|
15
|
+
else
|
16
|
+
SplitIoClient::Telemetry::MemoryEvaluationProducer.new(config)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class InitConsumer
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@init, :non_ready_usages, :bur_timeouts
|
8
|
+
|
9
|
+
def initialize(config)
|
10
|
+
@init = SplitIoClient::Telemetry::MemoryInitConsumer.new(config)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class InitProducer
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@init, :record_config, :record_non_ready_usages, :record_bur_timeout
|
8
|
+
|
9
|
+
def initialize(config)
|
10
|
+
@init = case config.telemetry_adapter.class.to_s
|
11
|
+
when 'SplitIoClient::Cache::Adapters::RedisAdapter'
|
12
|
+
SplitIoClient::Telemetry::RedisInitProducer.new(config)
|
13
|
+
else
|
14
|
+
SplitIoClient::Telemetry::MemoryInitProducer.new(config)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class MemoryEvaluationConsumer < EvaluationConsumer
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
@adapter = config.telemetry_adapter
|
9
|
+
end
|
10
|
+
|
11
|
+
def pop_latencies
|
12
|
+
to_return = @adapter.latencies.each_with_object({}) do |latency, memo|
|
13
|
+
memo[latency[:method]] = latency[:latencies]
|
14
|
+
end
|
15
|
+
|
16
|
+
@adapter.init_latencies
|
17
|
+
|
18
|
+
to_return
|
19
|
+
end
|
20
|
+
|
21
|
+
def pop_exceptions
|
22
|
+
to_return = @adapter.exceptions.each_with_object({}) do |exception, memo|
|
23
|
+
memo[exception[:method]] = exception[:exceptions].value
|
24
|
+
end
|
25
|
+
|
26
|
+
@adapter.init_exceptions
|
27
|
+
|
28
|
+
to_return
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class MemoryEvaluationProducer < EvaluationProducer
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
@adapter = config.telemetry_adapter
|
9
|
+
end
|
10
|
+
|
11
|
+
def record_latency(method, bucket)
|
12
|
+
@adapter.latencies.find { |l| l[:method] == method }[:latencies][bucket] += 1
|
13
|
+
rescue StandardError => error
|
14
|
+
@config.log_found_exception(__method__.to_s, error)
|
15
|
+
end
|
16
|
+
|
17
|
+
def record_exception(method)
|
18
|
+
@adapter.exceptions.find { |l| l[:method] == method }[:exceptions].increment
|
19
|
+
rescue StandardError => error
|
20
|
+
@config.log_found_exception(__method__.to_s, error)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class MemoryInitConsumer < InitConsumer
|
6
|
+
DEFAULT_VALUE = 0
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
@adapter = config.telemetry_adapter
|
11
|
+
end
|
12
|
+
|
13
|
+
def non_ready_usages
|
14
|
+
find_counts(Domain::Constants::NON_READY_USAGES)
|
15
|
+
end
|
16
|
+
|
17
|
+
def bur_timeouts
|
18
|
+
find_counts(Domain::Constants::BUR_TIMEOUT)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def find_counts(action)
|
24
|
+
@adapter.factory_counters.find { |l| l[:action] == action }[:counts].value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class MemoryInitProducer < InitProducer
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
@adapter = config.telemetry_adapter
|
9
|
+
end
|
10
|
+
|
11
|
+
def record_config
|
12
|
+
# no op
|
13
|
+
end
|
14
|
+
|
15
|
+
def record_bur_timeout
|
16
|
+
find_factory_counters(Domain::Constants::BUR_TIMEOUT)[:counts].increment
|
17
|
+
rescue StandardError => error
|
18
|
+
@config.log_found_exception(__method__.to_s, error)
|
19
|
+
end
|
20
|
+
|
21
|
+
def record_non_ready_usages
|
22
|
+
find_factory_counters(Domain::Constants::NON_READY_USAGES)[:counts].increment
|
23
|
+
rescue StandardError => error
|
24
|
+
@config.log_found_exception(__method__.to_s, error)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def find_factory_counters(action)
|
30
|
+
@adapter.factory_counters.find { |l| l[:action] == action }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SplitIoClient
|
4
|
+
module Telemetry
|
5
|
+
class MemoryRuntimeConsumer < RuntimeConsumer
|
6
|
+
DEFAULT_VALUE = 0
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
@adapter = config.telemetry_adapter
|
11
|
+
end
|
12
|
+
|
13
|
+
def pop_tags
|
14
|
+
to_return = @adapter.tags
|
15
|
+
|
16
|
+
@adapter.init_tags
|
17
|
+
|
18
|
+
to_return
|
19
|
+
end
|
20
|
+
|
21
|
+
def impressions_stats(type)
|
22
|
+
@adapter.impressions_data_records.find { |l| l[:type] == type }[:value].value
|
23
|
+
end
|
24
|
+
|
25
|
+
def events_stats(type)
|
26
|
+
@adapter.events_data_records.find { |l| l[:type] == type }[:value].value
|
27
|
+
end
|
28
|
+
|
29
|
+
def last_synchronizations
|
30
|
+
splits = find_last_synchronization(Domain::Constants::SPLIT_SYNC)
|
31
|
+
segments = find_last_synchronization(Domain::Constants::SEGMENT_SYNC)
|
32
|
+
impressions = find_last_synchronization(Domain::Constants::IMPRESSIONS_SYNC)
|
33
|
+
imp_count = find_last_synchronization(Domain::Constants::IMPRESSION_COUNT_SYNC)
|
34
|
+
events = find_last_synchronization(Domain::Constants::EVENT_SYNC)
|
35
|
+
telemetry = find_last_synchronization(Domain::Constants::TELEMETRY_SYNC)
|
36
|
+
token = find_last_synchronization(Domain::Constants::TOKEN_SYNC)
|
37
|
+
|
38
|
+
LastSynchronization.new(splits, segments, impressions, imp_count, events, telemetry, token)
|
39
|
+
end
|
40
|
+
|
41
|
+
def pop_http_errors
|
42
|
+
splits = find_http_errors(Domain::Constants::SPLIT_SYNC)
|
43
|
+
segments = find_http_errors(Domain::Constants::SEGMENT_SYNC)
|
44
|
+
impressions = find_http_errors(Domain::Constants::IMPRESSIONS_SYNC)
|
45
|
+
imp_count = find_http_errors(Domain::Constants::IMPRESSION_COUNT_SYNC)
|
46
|
+
events = find_http_errors(Domain::Constants::EVENT_SYNC)
|
47
|
+
telemetry = find_http_errors(Domain::Constants::TELEMETRY_SYNC)
|
48
|
+
token = find_http_errors(Domain::Constants::TOKEN_SYNC)
|
49
|
+
|
50
|
+
@adapter.init_http_errors
|
51
|
+
|
52
|
+
HttpErrors.new(splits, segments, impressions, imp_count, events, telemetry, token)
|
53
|
+
end
|
54
|
+
|
55
|
+
def pop_http_latencies
|
56
|
+
splits = find_http_latencies(Domain::Constants::SPLIT_SYNC)
|
57
|
+
segments = find_http_latencies(Domain::Constants::SEGMENT_SYNC)
|
58
|
+
impressions = find_http_latencies(Domain::Constants::IMPRESSIONS_SYNC)
|
59
|
+
imp_count = find_http_latencies(Domain::Constants::IMPRESSION_COUNT_SYNC)
|
60
|
+
events = find_http_latencies(Domain::Constants::EVENT_SYNC)
|
61
|
+
telemetry = find_http_latencies(Domain::Constants::TELEMETRY_SYNC)
|
62
|
+
token = find_http_latencies(Domain::Constants::TOKEN_SYNC)
|
63
|
+
|
64
|
+
@adapter.init_http_latencies
|
65
|
+
|
66
|
+
HttpLatencies.new(splits, segments, impressions, imp_count, events, telemetry, token)
|
67
|
+
end
|
68
|
+
|
69
|
+
def pop_auth_rejections
|
70
|
+
to_return = @adapter.auth_rejections
|
71
|
+
|
72
|
+
@adapter.init_auth_rejections
|
73
|
+
|
74
|
+
to_return.value
|
75
|
+
end
|
76
|
+
|
77
|
+
def pop_token_refreshes
|
78
|
+
to_return = @adapter.token_refreshes
|
79
|
+
|
80
|
+
@adapter.init_token_refreshes
|
81
|
+
|
82
|
+
to_return.value
|
83
|
+
end
|
84
|
+
|
85
|
+
def pop_streaming_events
|
86
|
+
events = @adapter.streaming_events
|
87
|
+
|
88
|
+
@adapter.init_streaming_events.map
|
89
|
+
|
90
|
+
events
|
91
|
+
end
|
92
|
+
|
93
|
+
def session_length
|
94
|
+
@adapter.session_length.value
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def find_last_synchronization(type)
|
100
|
+
@adapter.last_synchronization.find { |l| l[:type] == type }[:value].value
|
101
|
+
end
|
102
|
+
|
103
|
+
def find_http_errors(type)
|
104
|
+
@adapter.http_errors.find { |l| l[:type] == type }[:value]
|
105
|
+
end
|
106
|
+
|
107
|
+
def find_http_latencies(type)
|
108
|
+
@adapter.http_latencies.find { |l| l[:type] == type }[:value]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|