Commit 7c498f2e authored by Vitali Tatarintev's avatar Vitali Tatarintev

Resolve Prometheus alerts based on setting

Check auto_close_incident operations setting before resolve
Prometheus alerts
parent dc0fde51
......@@ -3,6 +3,7 @@
module AlertManagement
class ProcessPrometheusAlertService < BaseService
include Gitlab::Utils::StrongMemoize
include ::IncidentManagement::Settings
def execute
return bad_request unless parsed_alert.valid?
......@@ -69,6 +70,7 @@ module AlertManagement
def process_resolved_alert_management_alert
return if am_alert.blank?
return unless auto_close_incident?
if am_alert.resolve(ends_at)
close_issue(am_alert.issue)
......
......@@ -16,5 +16,9 @@ module IncidentManagement
def process_issues?
incident_management_setting.create_issue?
end
def auto_close_incident?
incident_management_setting.auto_close_incident?
end
end
end
......@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe AlertManagement::ProcessPrometheusAlertService do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:project, reload: true) { create(:project, :repository) }
before do
allow(ProjectServiceWorker).to receive(:perform_async)
......@@ -128,6 +128,9 @@ RSpec.describe AlertManagement::ProcessPrometheusAlertService do
let(:status) { 'resolved' }
let!(:alert) { create(:alert_management_alert, project: project, fingerprint: parsed_alert.gitlab_fingerprint) }
context 'when auto_resolve_incident set to true' do
let_it_be(:operations_settings) { create(:project_incident_management_setting, project: project, auto_close_incident: true) }
context 'when status can be changed' do
it 'resolves an existing alert' do
expect { execute }.to change { alert.reload.resolved? }.to(true)
......@@ -179,6 +182,15 @@ RSpec.describe AlertManagement::ProcessPrometheusAlertService do
it { is_expected.to be_success }
end
context 'when auto_resolve_incident set to false' do
let_it_be(:operations_settings) { create(:project_incident_management_setting, project: project, auto_close_incident: false) }
it 'does not resolve an existing alert' do
expect { execute }.not_to change { alert.reload.resolved? }
end
end
end
context 'environment given' do
let(:environment) { create(:environment, project: project) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment