Class: SplitIoClient::Cache::Repositories::Metrics::RedisRepository

Inherits:
SplitIoClient::Cache::Repository show all
Defined in:
lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb

Instance Method Summary collapse

Methods inherited from SplitIoClient::Cache::Repository

#set_string, #string

Constructor Details

#initialize(adapter = nil) ⇒ RedisRepository

Returns a new instance of RedisRepository.



6
7
8
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 6

def initialize(adapter = nil)
  @adapter = adapter
end

Instance Method Details

#add_count(counter, delta) ⇒ Object



10
11
12
13
14
15
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 10

def add_count(counter, delta)
  prefixed_name = impressions_metrics_key("count.#{counter}")
  counts = @adapter.find_strings_by_prefix(prefixed_name)

  @adapter.inc(prefixed_name, delta)
end

#add_gauge(gauge, value) ⇒ Object



23
24
25
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 23

def add_gauge(gauge, value)
  # TODO
end

#add_latency(operation, time_in_ms, binary_search) ⇒ Object



17
18
19
20
21
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 17

def add_latency(operation, time_in_ms, binary_search)
  prefixed_name = impressions_metrics_key("latency.#{operation}")

  @adapter.inc("#{prefixed_name}.bucket.#{binary_search.add_latency_millis(time_in_ms, true)}")
end

#clear ⇒ Object



100
101
102
103
104
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 100

def clear
  clear_counts
  clear_latencies
  clear_gauges
end

#clear_counts ⇒ Object



57
58
59
60
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 57

def clear_counts
  keys = @adapter.find_strings_by_prefix(impressions_metrics_key('count'))
  @adapter.delete(keys)
end

#clear_gauges ⇒ Object



96
97
98
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 96

def clear_gauges
  # TODO
end

#clear_latencies ⇒ Object



62
63
64
65
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 62

def clear_latencies
  keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))
  @adapter.delete(keys)
end

#counts ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 27

def counts
  keys = @adapter.find_strings_by_prefix(impressions_metrics_key("count"))

  return [] if keys.empty?

  @adapter.multiple_strings(keys).map do |name, data|
    [name.gsub(impressions_metrics_key('count.'), ''), data]
  end.to_h
end

#fix_latencies ⇒ Object

introduced to fix incorrect latencies



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 68

def fix_latencies
  keys =[]

  23.times do |index|
    keys.concat @adapter.find_strings_by_pattern(latencies_to_be_deleted_key_pattern_prefix("sdk.get_treatment.#{index}"))
  end

  keys.concat @adapter.find_strings_by_pattern(latencies_to_be_deleted_key_pattern_prefix('sdk.get_treatments'))
  keys.concat @adapter.find_strings_by_pattern(latencies_to_be_deleted_key_pattern_prefix('sdk.get_treatment_with_config'))
  keys.concat @adapter.find_strings_by_pattern(latencies_to_be_deleted_key_pattern_prefix('sdk.get_treatments_with_config'))

  keys.concat @adapter.find_strings_by_pattern(latencies_to_be_deleted_key_pattern_prefix('*.time'))

  SplitIoClient.configuration.logger.info("Found incorrect latency keys, deleting. Keys: #{keys}") unless keys.size == 0

  keys.each_slice(500) do |chunk|
    @adapter.pipelined do
      chunk.each do |key|
        @adapter.delete key
      end
    end
  end
end

#gauges ⇒ Object



53
54
55
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 53

def gauges
  # TODO
end

#latencies ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 37

def latencies
  keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))
  return [] if keys.empty?

  collected_latencies = collect_latencies(keys)

  collected_latencies.keys.each_with_object({}) do |operation, latencies|
    operation_latencies = Array.new(BinarySearchLatencyTracker::BUCKETS.length, 0)
    collected_latencies[operation].each do |bucket, value|
      operation_latencies[bucket.to_i] = value.to_i
    end

    latencies[operation] = operation_latencies
  end
end

#latencies_to_be_deleted_key_pattern_prefix(key) ⇒ Object



92
93
94
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 92

def latencies_to_be_deleted_key_pattern_prefix(key)
  "#{SplitIoClient.configuration.redis_namespace}/#{SplitIoClient.configuration.language}-*/latency.#{key}"
end