Files
gitlab-foss/lib/gitlab/internal_events/event_definitions.rb
2024-10-21 15:22:51 +00:00

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