gitlab-org--gitlab-foss/lib/gitlab/usage/metrics/instrumentations/redis_metric.rb

68 lines
1.6 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Usage
module Metrics
module Instrumentations
# Usage example
#
# In metric YAML definition:
#
# instrumentation_class: RedisMetric
# options:
# event: pushes
# prefix: source_code
#
class RedisMetric < BaseMetric
include Gitlab::UsageDataCounters::RedisCounter
USAGE_PREFIX = "USAGE_"
OPTIONS_PREFIX_KEY = :prefix
def initialize(metric_definition)
super
validate_options!
end
def validate_options!
raise ArgumentError, "'event' option is required" unless metric_event.present?
raise ArgumentError, "'prefix' option is required" unless options.has_key?(OPTIONS_PREFIX_KEY)
end
def metric_event
options[:event]
end
def prefix
options[OPTIONS_PREFIX_KEY]
end
def include_usage_prefix?
options.fetch(:include_usage_prefix, true)
end
def value
redis_usage_data do
total_count(redis_key)
end
end
def suggested_name
Gitlab::Usage::Metrics::NameSuggestion.for(:redis)
end
private
def redis_key
key = metric_event.dup
key.prepend("#{prefix}_") if prefix
key.prepend(USAGE_PREFIX) if include_usage_prefix?
key.upcase
end
end
end
end
end
end