Class: EventCreateService

Inherits:
Object
  • Object
show all
Includes:
Gitlab::InternalEventsTracking
Defined in:
app/services/event_create_service.rb

Overview

EventCreateService class

Used for creating events feed on dashboard after certain user action

Ex.

EventCreateService.new.new_issue(issue, current_user)

Constant Summary collapse

IllegalActionError =
Class.new(StandardError)
DEGIGN_EVENT_LABEL =
'usage_activity_by_stage_monthly.create.action_monthly_active_users_design_management'
MR_EVENT_LABEL =
'usage_activity_by_stage_monthly.create.merge_requests_users'
MR_EVENT_PROPERTY =
'merge_request_action'

Instance Method Summary collapse

Methods included from Gitlab::InternalEventsTracking

#track_internal_event

Instance Method Details

#approve_mr(merge_request, current_user) ⇒ Object



189
190
191
# File 'app/services/event_create_service.rb', line 189

def approve_mr(merge_request, current_user)
  create_record_event(merge_request, current_user, :approved)
end

#bulk_push(project, current_user, push_data) ⇒ Object



127
128
129
# File 'app/services/event_create_service.rb', line 127

def bulk_push(project, current_user, push_data)
  create_push_event(BulkPushEventPayloadService, project, current_user, push_data)
end

#close_issue(issue, current_user) ⇒ Object



23
24
25
# File 'app/services/event_create_service.rb', line 23

def close_issue(issue, current_user)
  create_record_event(issue, current_user, :closed)
end

#close_milestone(milestone, current_user) ⇒ Object



78
79
80
# File 'app/services/event_create_service.rb', line 78

def close_milestone(milestone, current_user)
  create_record_event(milestone, current_user, :closed)
end

#close_mr(merge_request, current_user) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/services/event_create_service.rb', line 44

def close_mr(merge_request, current_user)
  create_record_event(merge_request, current_user, :closed).tap do
    Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:merge_request_action, values: current_user.id)
    track_snowplow_event(
      action: :closed,
      project: merge_request.project,
      user: current_user,
      label: MR_EVENT_LABEL,
      property: MR_EVENT_PROPERTY
    )
  end
end

#create_project(project, current_user) ⇒ Object



119
120
121
# File 'app/services/event_create_service.rb', line 119

def create_project(project, current_user)
  create_record_event(project, current_user, :created)
end

#destroy_designs(designs, current_user) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'app/services/event_create_service.rb', line 148

def destroy_designs(designs, current_user)
  return [] unless designs.present?

  track_snowplow_event(
    action: :destroy,
    project: designs.first.project,
    user: current_user,
    label: DEGIGN_EVENT_LABEL,
    property: :design_action
  )

  inserted_events = create_record_events(designs.zip([:destroyed].cycle), current_user)

  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:design_action, values: current_user.id)
  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)

  inserted_events
end

#destroy_milestone(milestone, current_user) ⇒ Object



86
87
88
# File 'app/services/event_create_service.rb', line 86

def destroy_milestone(milestone, current_user)
  create_record_event(milestone, current_user, :destroyed)
end

#expired_leave_project(project, current_user) ⇒ Object



115
116
117
# File 'app/services/event_create_service.rb', line 115

def expired_leave_project(project, current_user)
  create_record_event(project, current_user, :expired)
end

#join_source(source, current_user) ⇒ Object



105
106
107
108
109
# File 'app/services/event_create_service.rb', line 105

def join_source(source, current_user)
  return unless source.is_a?(Project)

  create_record_event(source, current_user, :joined)
end

#leave_note(note, current_user) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/services/event_create_service.rb', line 90

def leave_note(note, current_user)
  create_record_event(note, current_user, :commented).tap do
    if note.is_a?(DiffNote) && note.for_merge_request?
      Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:merge_request_action, values: current_user.id)
      track_snowplow_event(
        action: :commented,
        project: note.project,
        user: current_user,
        label: MR_EVENT_LABEL,
        property: MR_EVENT_PROPERTY
      )
    end
  end
end

#leave_project(project, current_user) ⇒ Object



111
112
113
# File 'app/services/event_create_service.rb', line 111

def leave_project(project, current_user)
  create_record_event(project, current_user, :left)
end

#merge_mr(merge_request, current_user) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/services/event_create_service.rb', line 61

def merge_mr(merge_request, current_user)
  create_record_event(merge_request, current_user, :merged).tap do
    Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:merge_request_action, values: current_user.id)
    track_snowplow_event(
      action: :merged,
      project: merge_request.project,
      user: current_user,
      label: MR_EVENT_LABEL,
      property: MR_EVENT_PROPERTY
    )
  end
end

#open_issue(issue, current_user) ⇒ Object



19
20
21
# File 'app/services/event_create_service.rb', line 19

def open_issue(issue, current_user)
  create_record_event(issue, current_user, :created)
end

#open_milestone(milestone, current_user) ⇒ Object



74
75
76
# File 'app/services/event_create_service.rb', line 74

def open_milestone(milestone, current_user)
  create_record_event(milestone, current_user, :created)
end

#open_mr(merge_request, current_user) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/services/event_create_service.rb', line 31

def open_mr(merge_request, current_user)
  create_record_event(merge_request, current_user, :created).tap do
    Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:merge_request_action, values: current_user.id)
    track_snowplow_event(
      action: :created,
      project: merge_request.project,
      user: current_user,
      label: MR_EVENT_LABEL,
      property: MR_EVENT_PROPERTY
    )
  end
end

#push(project, current_user, push_data) ⇒ Object



123
124
125
# File 'app/services/event_create_service.rb', line 123

def push(project, current_user, push_data)
  create_push_event(PushEventPayloadService, project, current_user, push_data)
end

#reopen_issue(issue, current_user) ⇒ Object



27
28
29
# File 'app/services/event_create_service.rb', line 27

def reopen_issue(issue, current_user)
  create_record_event(issue, current_user, :reopened)
end

#reopen_milestone(milestone, current_user) ⇒ Object



82
83
84
# File 'app/services/event_create_service.rb', line 82

def reopen_milestone(milestone, current_user)
  create_record_event(milestone, current_user, :reopened)
end

#reopen_mr(merge_request, current_user) ⇒ Object



57
58
59
# File 'app/services/event_create_service.rb', line 57

def reopen_mr(merge_request, current_user)
  create_record_event(merge_request, current_user, :reopened)
end

#save_designs(current_user, create: [], update: []) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'app/services/event_create_service.rb', line 131

def save_designs(current_user, create: [], update: [])
  records = create.zip([:created].cycle) + update.zip([:updated].cycle)
  return [] if records.empty?

  event_meta = { user: current_user, label: DEGIGN_EVENT_LABEL, property: :design_action }
  track_snowplow_event(action: :create, project: create.first.project, **event_meta) if create.any?

  track_snowplow_event(action: :update, project: update.first.project, **event_meta) if update.any?

  inserted_events = create_record_events(records, current_user)

  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:design_action, values: current_user.id)
  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)

  inserted_events
end

#wiki_event(wiki_page_meta, author, action, fingerprint) ⇒ Event

Create a new wiki page event

The fingerprint, if provided, should be sufficient to find duplicate events. Suitable values would be, for example, the current page SHA.

Parameters:

  • wiki_page_meta (WikiPage::Meta)

    The event target

  • author (User)

    The event author

  • action (Symbol)

    One of the Event::WIKI_ACTIONS

  • fingerprint (String)

    The de-duplication fingerprint

Returns:

Raises:



178
179
180
181
182
183
184
185
186
187
# File 'app/services/event_create_service.rb', line 178

def wiki_event(wiki_page_meta, author, action, fingerprint)
  raise IllegalActionError, action unless Event::WIKI_ACTIONS.include?(action)

  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: author.id)

  duplicate = Event.for_wiki_meta(wiki_page_meta).for_fingerprint(fingerprint).first
  return duplicate if duplicate.present?

  create_record_event(wiki_page_meta, author, action, fingerprint.presence)
end