diff options
Diffstat (limited to 'app/workers/incident_management')
-rw-r--r-- | app/workers/incident_management/process_alert_worker.rb | 6 | ||||
-rw-r--r-- | app/workers/incident_management/process_alert_worker_v2.rb | 47 |
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 |