summaryrefslogtreecommitdiff
path: root/app/workers
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/all_queues.yml9
-rw-r--r--app/workers/incident_management/process_alert_worker.rb6
-rw-r--r--app/workers/incident_management/process_alert_worker_v2.rb47
3 files changed, 62 insertions, 0 deletions
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml
index dc34b879308..f663bab950c 100644
--- a/app/workers/all_queues.yml
+++ b/app/workers/all_queues.yml
@@ -1056,6 +1056,15 @@
:weight: 2
:idempotent:
:tags: []
+- :name: incident_management:incident_management_process_alert_worker_v2
+ :worker_name: IncidentManagement::ProcessAlertWorkerV2
+ :feature_category: :incident_management
+ :has_external_dependencies:
+ :urgency: :low
+ :resource_boundary: :unknown
+ :weight: 2
+ :idempotent: true
+ :tags: []
- :name: incident_management:incident_management_process_prometheus_alert
:worker_name: IncidentManagement::ProcessPrometheusAlertWorker
:feature_category: :incident_management
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