blob: c62441240229435f92c4a7338fb415f16ce5f0bb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# 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
|