Files
2023-07-31 12:07:02 +00:00

39 lines
1.2 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]
# @param integration [AlertManagement::HttpIntegration]
def parse(project, payload, monitoring_tool: nil, integration: nil)
payload_class = payload_class_for(monitoring_tool: monitoring_tool || payload&.dig('monitoring_tool'))
payload_class.new(project: project, payload: payload, integration: integration)
end
private
def payload_class_for(monitoring_tool:)
if monitoring_tool == MONITORING_TOOLS[:prometheus]
::Gitlab::AlertManagement::Payload::Prometheus
else
::Gitlab::AlertManagement::Payload::Generic
end
end
end
end
end
end