summaryrefslogtreecommitdiff
path: root/app/workers/incident_management
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/incident_management')
-rw-r--r--app/workers/incident_management/process_alert_worker.rb6
-rw-r--r--app/workers/incident_management/process_alert_worker_v2.rb47
2 files changed, 53 insertions, 0 deletions
diff --git a/app/workers/incident_management/process_alert_worker.rb b/app/workers/incident_management/process_alert_worker.rb
index 59464b81d1b..c848c67241e 100644
--- a/app/workers/incident_management/process_alert_worker.rb
+++ b/app/workers/incident_management/process_alert_worker.rb
@@ -10,6 +10,12 @@ module IncidentManagement
# `project_id` and `alert_payload` are deprecated and can be removed
# starting from 14.0 release
# https://gitlab.com/gitlab-org/gitlab/-/issues/224500
+ #
+ # This worker is not scheduled anymore since
+ # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60285
+ # and will be removed completely via
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/224500
+ # in 14.0.
def perform(_project_id = nil, _alert_payload = nil, alert_id = nil)
return unless alert_id
diff --git a/app/workers/incident_management/process_alert_worker_v2.rb b/app/workers/incident_management/process_alert_worker_v2.rb
new file mode 100644
index 00000000000..04bf6970578
--- /dev/null
+++ b/app/workers/incident_management/process_alert_worker_v2.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module IncidentManagement
+ class ProcessAlertWorkerV2 # rubocop:disable Scalability/IdempotentWorker
+ include ApplicationWorker
+
+ queue_namespace :incident_management
+ feature_category :incident_management
+
+ idempotent!
+
+ def perform(alert_id)
+ return unless alert_id
+
+ alert = find_alert(alert_id)
+ return unless alert
+
+ result = create_issue_for(alert)
+ return if result.success?
+
+ log_warning(alert, result)
+ end
+
+ private
+
+ def find_alert(alert_id)
+ AlertManagement::Alert.find_by_id(alert_id)
+ end
+
+ def create_issue_for(alert)
+ AlertManagement::CreateAlertIssueService
+ .new(alert, User.alert_bot)
+ .execute
+ end
+
+ def log_warning(alert, result)
+ issue_id = result.payload[:issue]&.id
+
+ Gitlab::AppLogger.warn(
+ message: 'Cannot process an Incident',
+ issue_id: issue_id,
+ alert_id: alert.id,
+ errors: result.message
+ )
+ end
+ end
+end