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

quick_action_activity_unique_counter.rb « usage_data_counters « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 15c68fb394505ba3672c287f61168d3169beb860 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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 Feature.enabled?(:usage_data_track_quickactions, default_enabled: :yaml)
          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'
            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