mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-20 14:11:11 +00:00
67 lines
1.7 KiB
Ruby
67 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module InternalEvents
|
|
module EventDefinitions
|
|
InvalidMetricConfiguration = Class.new(StandardError)
|
|
|
|
class << self
|
|
VALID_UNIQUE_VALUES = %w[user.id project.id namespace.id].freeze
|
|
|
|
def load_configurations
|
|
@events = load_metric_definitions
|
|
nil
|
|
end
|
|
|
|
def unique_properties(event_name)
|
|
unique_values = events.fetch(event_name, [])
|
|
|
|
unique_values.filter_map do |unique_value|
|
|
next unless unique_value # legacy events include `nil` unique_value
|
|
|
|
unique_value = unique_value.to_s
|
|
|
|
unless VALID_UNIQUE_VALUES.include?(unique_value)
|
|
raise(InvalidMetricConfiguration, "Invalid unique value '#{unique_value}' for #{event_name}")
|
|
end
|
|
|
|
unique_value.split('.').first.to_sym
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def events
|
|
load_configurations if @events.nil?
|
|
|
|
@events
|
|
end
|
|
|
|
def load_metric_definitions
|
|
all_events = {}
|
|
|
|
Gitlab::Usage::MetricDefinition.all.each do |metric_definition|
|
|
next unless metric_definition.available?
|
|
|
|
process_events(all_events, metric_definition.events)
|
|
rescue StandardError => e
|
|
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
|
|
end
|
|
|
|
all_events
|
|
end
|
|
|
|
def process_events(all_events, metric_events)
|
|
metric_events.each do |event_name, event_unique_property|
|
|
all_events[event_name] ||= []
|
|
|
|
next if all_events[event_name].include?(event_unique_property)
|
|
|
|
all_events[event_name] << event_unique_property
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|