Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/internal_events.rb')
-rw-r--r--lib/gitlab/internal_events.rb34
1 files changed, 27 insertions, 7 deletions
diff --git a/lib/gitlab/internal_events.rb b/lib/gitlab/internal_events.rb
index cde83068de1..92bf2a826ff 100644
--- a/lib/gitlab/internal_events.rb
+++ b/lib/gitlab/internal_events.rb
@@ -2,21 +2,38 @@
module Gitlab
module InternalEvents
+ UnknownEventError = Class.new(StandardError)
+ InvalidPropertyError = Class.new(StandardError)
+ InvalidMethodError = Class.new(StandardError)
+
class << self
include Gitlab::Tracking::Helpers
def track_event(event_name, **kwargs)
- user_id = kwargs.delete(:user_id)
- UsageDataCounters::HLLRedisCounter.track_event(event_name, values: user_id)
+ raise UnknownEventError, "Unknown event: #{event_name}" unless EventDefinitions.known_event?(event_name)
+
+ unique_property = EventDefinitions.unique_property(event_name)
+ unique_method = :id
+
+ unless kwargs.has_key?(unique_property)
+ raise InvalidPropertyError, "#{event_name} should be triggered with a named parameter '#{unique_property}'."
+ end
+
+ unless kwargs[unique_property].respond_to?(unique_method)
+ raise InvalidMethodError, "'#{unique_property}' should have a '#{unique_method}' method."
+ end
+
+ unique_value = kwargs[unique_property].public_send(unique_method) # rubocop:disable GitlabSecurity/PublicSend
- project_id = kwargs.delete(:project_id)
- namespace_id = kwargs.delete(:namespace_id)
+ UsageDataCounters::HLLRedisCounter.track_event(event_name, values: unique_value)
- namespace = Namespace.find(namespace_id) if namespace_id
+ user = kwargs[:user]
+ project = kwargs[:project]
+ namespace = kwargs[:namespace]
standard_context = Tracking::StandardContext.new(
- project_id: project_id,
- user_id: user_id,
+ project_id: project&.id,
+ user_id: user&.id,
namespace_id: namespace&.id,
plan_name: namespace&.actual_plan_name
).to_context
@@ -27,6 +44,9 @@ module Gitlab
).to_context
track_struct_event(event_name, contexts: [standard_context, service_ping_context])
+ rescue StandardError => e
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e, event_name: event_name, kwargs: kwargs)
+ nil
end
private