debian-mirror-gitlab/lib/gitlab/alert_management/payload.rb

53 lines
1.6 KiB
Ruby
Raw Normal View History

2020-11-24 15:15:51 +05:30
# frozen_string_literal: true
module Gitlab
module AlertManagement
module Payload
MONITORING_TOOLS = {
2021-02-22 17:27:13 +05:30
prometheus: 'Prometheus',
cilium: 'Cilium'
2020-11-24 15:15:51 +05:30
}.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]
2021-03-11 19:13:27 +05:30
# @param integration [AlertManagement::HttpIntegration]
def parse(project, payload, monitoring_tool: nil, integration: nil)
2020-11-24 15:15:51 +05:30
payload_class = payload_class_for(
monitoring_tool: monitoring_tool || payload&.dig('monitoring_tool'),
payload: payload
)
2021-03-11 19:13:27 +05:30
payload_class.new(project: project, payload: payload, integration: integration)
2020-11-24 15:15:51 +05:30
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
2021-03-11 19:13:27 +05:30
2021-06-08 01:23:25 +05:30
Gitlab::AlertManagement::Payload.prepend_mod_with('Gitlab::AlertManagement::Payload')