2019-08-08 13:18:57 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab::UsageDataCounters
|
|
|
|
class BaseCounter
|
|
|
|
extend RedisCounter
|
|
|
|
|
|
|
|
UnknownEvent = Class.new(StandardError)
|
|
|
|
|
|
|
|
class << self
|
|
|
|
def redis_key(event)
|
2020-05-25 06:08:38 +00:00
|
|
|
require_known_event(event)
|
2019-08-08 13:18:57 +00:00
|
|
|
|
|
|
|
"USAGE_#{prefix}_#{event}".upcase
|
|
|
|
end
|
|
|
|
|
|
|
|
def count(event)
|
2020-03-27 12:07:43 +00:00
|
|
|
increment(redis_key(event))
|
2019-08-08 13:18:57 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def read(event)
|
2020-03-27 12:07:43 +00:00
|
|
|
total_count(redis_key(event))
|
2019-08-08 13:18:57 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def totals
|
2021-04-05 18:09:15 +00:00
|
|
|
known_events.to_h { |event| [counter_key(event), read(event)] }
|
2020-05-06 03:09:33 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def fallback_totals
|
2021-04-05 18:09:15 +00:00
|
|
|
known_events.to_h { |event| [counter_key(event), -1] }
|
2019-08-08 13:18:57 +00:00
|
|
|
end
|
|
|
|
|
2020-11-19 15:09:13 +00:00
|
|
|
def fetch_supported_event(event_name)
|
|
|
|
return if prefix.present? && !event_name.start_with?(prefix)
|
|
|
|
|
|
|
|
known_events.find { |event| counter_key(event) == event_name.to_sym }
|
|
|
|
end
|
|
|
|
|
2019-08-08 13:18:57 +00:00
|
|
|
private
|
|
|
|
|
2020-05-25 06:08:38 +00:00
|
|
|
def require_known_event(event)
|
|
|
|
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(UnknownEvent.new, event: event) unless known_events.include?(event.to_s)
|
|
|
|
end
|
|
|
|
|
2020-05-06 03:09:33 +00:00
|
|
|
def counter_key(event)
|
|
|
|
"#{prefix}_#{event}".to_sym
|
|
|
|
end
|
|
|
|
|
2019-08-08 13:18:57 +00:00
|
|
|
def known_events
|
|
|
|
self::KNOWN_EVENTS
|
|
|
|
end
|
|
|
|
|
|
|
|
def prefix
|
|
|
|
self::PREFIX
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|