55 lines
1.2 KiB
Ruby
55 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module AlertManagement
|
|
class ProcessPrometheusAlertService
|
|
extend ::Gitlab::Utils::Override
|
|
include ::AlertManagement::AlertProcessing
|
|
|
|
def initialize(project, payload)
|
|
@project = project
|
|
@payload = payload
|
|
end
|
|
|
|
def execute
|
|
return bad_request unless incoming_payload.has_required_attributes?
|
|
|
|
process_alert
|
|
return bad_request unless alert.persisted?
|
|
|
|
complete_post_processing_tasks
|
|
|
|
ServiceResponse.success
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :project, :payload
|
|
|
|
override :process_new_alert
|
|
def process_new_alert
|
|
return if resolving_alert?
|
|
|
|
super
|
|
end
|
|
|
|
override :incoming_payload
|
|
def incoming_payload
|
|
strong_memoize(:incoming_payload) do
|
|
Gitlab::AlertManagement::Payload.parse(
|
|
project,
|
|
payload,
|
|
monitoring_tool: Gitlab::AlertManagement::Payload::MONITORING_TOOLS[:prometheus]
|
|
)
|
|
end
|
|
end
|
|
|
|
override :resolving_alert?
|
|
def resolving_alert?
|
|
incoming_payload.resolved?
|
|
end
|
|
|
|
def bad_request
|
|
ServiceResponse.error(message: 'Bad Request', http_status: :bad_request)
|
|
end
|
|
end
|
|
end
|