gitlab-org--gitlab-foss/lib/gitlab/usage_data_counters/quick_action_activity_uniqu...

96 lines
2.4 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module UsageDataCounters
module QuickActionActivityUniqueCounter
class << self
# Tracks the quick action with name `name`.
# `args` is expected to be a single string, will be split internally when necessary.
def track_unique_action(name, args:, user:)
return unless user
args ||= ''
name = prepare_name(name, args)
Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:"i_quickactions_#{name}", values: user.id)
end
private
def prepare_name(name, args)
case name
when 'assign'
event_name_for_assign(args)
when 'copy_metadata'
event_name_for_copy_metadata(args)
when 'remove_reviewer'
'unassign_reviewer'
when 'request_review', 'reviewer'
'assign_reviewer'
when 'spend', 'spent'
event_name_for_spend(args)
when 'unassign'
event_name_for_unassign(args)
when 'unlabel', 'remove_label'
event_name_for_unlabel(args)
when 'invite_email'
'invite_email' + event_name_quantifier(args.split)
else
name
end
end
def event_name_for_assign(args)
args = args.split
if args.count == 1 && args.first == 'me'
'assign_self'
else
'assign' + event_name_quantifier(args)
end
end
def event_name_for_copy_metadata(args)
if args.start_with?('#')
'copy_metadata_issue'
else
'copy_metadata_merge_request'
end
end
def event_name_for_spend(args)
if args.start_with?('-')
'spend_subtract'
else
'spend_add'
end
end
def event_name_for_unassign(args)
if args.present?
'unassign_specific'
else
'unassign_all'
end
end
def event_name_for_unlabel(args)
if args.present?
'unlabel_specific'
else
'unlabel_all'
end
end
def event_name_quantifier(args)
if args.count == 1
'_single'
else
'_multiple'
end
end
end
end
end
end