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.rb30
1 files changed, 24 insertions, 6 deletions
diff --git a/lib/gitlab/internal_events.rb b/lib/gitlab/internal_events.rb
index 92bf2a826ff..2790bc8ee24 100644
--- a/lib/gitlab/internal_events.rb
+++ b/lib/gitlab/internal_events.rb
@@ -9,10 +9,31 @@ module Gitlab
class << self
include Gitlab::Tracking::Helpers
- def track_event(event_name, **kwargs)
+ def track_event(event_name, send_snowplow_event: true, **kwargs)
raise UnknownEventError, "Unknown event: #{event_name}" unless EventDefinitions.known_event?(event_name)
+ increase_total_counter(event_name)
+ update_unique_counter(event_name, kwargs)
+ trigger_snowplow_event(event_name, kwargs) if send_snowplow_event
+ rescue StandardError => e
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e, event_name: event_name, kwargs: kwargs)
+ nil
+ end
+
+ private
+
+ def increase_total_counter(event_name)
+ return unless ::ServicePing::ServicePingSettings.enabled?
+
+ redis_counter_key =
+ Gitlab::Usage::Metrics::Instrumentations::TotalCountMetric.redis_key(event_name)
+ Gitlab::Redis::SharedState.with { |redis| redis.incr(redis_counter_key) }
+ end
+
+ def update_unique_counter(event_name, kwargs)
unique_property = EventDefinitions.unique_property(event_name)
+ return unless unique_property
+
unique_method = :id
unless kwargs.has_key?(unique_property)
@@ -26,7 +47,9 @@ module Gitlab
unique_value = kwargs[unique_property].public_send(unique_method) # rubocop:disable GitlabSecurity/PublicSend
UsageDataCounters::HLLRedisCounter.track_event(event_name, values: unique_value)
+ end
+ def trigger_snowplow_event(event_name, kwargs)
user = kwargs[:user]
project = kwargs[:project]
namespace = kwargs[:namespace]
@@ -44,13 +67,8 @@ 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
-
def track_struct_event(event_name, contexts:)
category = 'InternalEventTracking'
tracker = Gitlab::Tracking.tracker