48 lines
1.4 KiB
Ruby
48 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module AlertManagement
|
|
module Payload
|
|
MONITORING_TOOLS = {
|
|
prometheus: 'Prometheus'
|
|
}.freeze
|
|
|
|
class << self
|
|
# Instantiates an instance of a subclass of
|
|
# Gitlab::AlertManagement::Payload::Base. This can
|
|
# be used to create new alerts or read content from
|
|
# the payload of an existing AlertManagement::Alert
|
|
#
|
|
# @param project [Project]
|
|
# @param payload [Hash]
|
|
# @param monitoring_tool [String]
|
|
def parse(project, payload, monitoring_tool: nil)
|
|
payload_class = payload_class_for(
|
|
monitoring_tool: monitoring_tool || payload&.dig('monitoring_tool'),
|
|
payload: payload
|
|
)
|
|
|
|
payload_class.new(project: project, payload: payload)
|
|
end
|
|
|
|
private
|
|
|
|
def payload_class_for(monitoring_tool:, payload:)
|
|
if monitoring_tool == MONITORING_TOOLS[:prometheus]
|
|
if gitlab_managed_prometheus?(payload)
|
|
::Gitlab::AlertManagement::Payload::ManagedPrometheus
|
|
else
|
|
::Gitlab::AlertManagement::Payload::Prometheus
|
|
end
|
|
else
|
|
::Gitlab::AlertManagement::Payload::Generic
|
|
end
|
|
end
|
|
|
|
def gitlab_managed_prometheus?(payload)
|
|
payload&.dig('labels', 'gitlab_alert_id').present?
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|