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

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

Instance Method Summary collapse

Methods inherited from SplitIoClient::Cache::Repository

#set_string, #string

Constructor Details

#initialize(adapter = nil, config) ⇒ RedisRepository

Returns a new instance of RedisRepository.



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

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

Instance Method Details

#add_count(counter, delta) ⇒ Object



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

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



30
31
32
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 30

def add_gauge(gauge, value)
  # TODO
end

#add_latency(operation, time_in_ms, binary_search) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 18

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

  if operation == 'sdk.get_treatment'
    @adapter.inc("#{prefixed_name}.#{binary_search.add_latency_millis(time_in_ms, true)}")
    return
  end

  @adapter.append_to_string(prefixed_name, "#{time_in_ms},")
end

#clear_countsObject



75
76
77
78
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 75

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

#clear_gaugesObject



85
86
87
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 85

def clear_gauges
  # TODO
end

#clear_latenciesObject



80
81
82
83
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 80

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

#countsObject



34
35
36
37
38
39
40
41
42
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 34

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

#gaugesObject



71
72
73
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 71

def gauges
  # TODO
end

#latenciesObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cache/repositories/metrics/redis_repository.rb', line 44

def latencies
  collected_latencies = {}
  latencies_array = Array.new(BinarySearchLatencyTracker::BUCKETS.length, 0)
  keys = @adapter.find_strings_by_prefix(impressions_metrics_key('latency'))

  return [] if keys.empty?

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

  found_latencies.each do |key, value|
    if key.start_with?('sdk.get_treatment')
      index = key.gsub('sdk.get_treatment.', '').to_i
      latencies_array[index] = value.to_i

      next
    end

    collected_latencies[key] = value.split(',').map(&:to_f)
  end

  collected_latencies['sdk.get_treatment'] = latencies_array unless latencies_array.reduce(:+) == 0

  collected_latencies
end