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



28
29
30
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 28

def add_gauge(gauge, value)
  # TODO
end

#add_latency(operation, time_in_ms, binary_search) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# 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}")

  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

#clearObject



87
88
89
90
91
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 87

def clear
  clear_counts
  clear_latencies
  clear_gauges
end

#clear_countsObject



73
74
75
76
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 73

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

#clear_gaugesObject



83
84
85
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 83

def clear_gauges
  # TODO
end

#clear_latenciesObject



78
79
80
81
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 78

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

#countsObject



32
33
34
35
36
37
38
39
40
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 32

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



69
70
71
# File 'lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb', line 69

def gauges
  # TODO
end

#latenciesObject



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

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