summaryrefslogtreecommitdiff
path: root/lib/gitlab/alerting
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-31 18:09:11 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-31 18:09:11 +0000
commit0434f38ef1dce4fe640fe1e4542235746ceb943c (patch)
tree3affe5902c9da74441dfbf5069f76c023b5cd03a /lib/gitlab/alerting
parentc27acb1d376f7127cd33eadcc8f5683ed55262bc (diff)
downloadgitlab-ce-0434f38ef1dce4fe640fe1e4542235746ceb943c.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/alerting')
-rw-r--r--lib/gitlab/alerting/notification_payload_parser.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/gitlab/alerting/notification_payload_parser.rb b/lib/gitlab/alerting/notification_payload_parser.rb
new file mode 100644
index 00000000000..a54bb44d66a
--- /dev/null
+++ b/lib/gitlab/alerting/notification_payload_parser.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Alerting
+ class NotificationPayloadParser
+ BadPayloadError = Class.new(StandardError)
+
+ DEFAULT_TITLE = 'New: Incident'
+
+ def initialize(payload)
+ @payload = payload.to_h.with_indifferent_access
+ end
+
+ def self.call(payload)
+ new(payload).call
+ end
+
+ def call
+ {
+ 'annotations' => annotations,
+ 'startsAt' => starts_at
+ }.compact
+ end
+
+ private
+
+ attr_reader :payload
+
+ def title
+ payload[:title].presence || DEFAULT_TITLE
+ end
+
+ def annotations
+ primary_params
+ .reverse_merge(flatten_secondary_params)
+ .transform_values(&:presence)
+ .compact
+ end
+
+ def primary_params
+ {
+ 'title' => title,
+ 'description' => payload[:description],
+ 'monitoring_tool' => payload[:monitoring_tool],
+ 'service' => payload[:service],
+ 'hosts' => hosts.presence
+ }
+ end
+
+ def hosts
+ Array(payload[:hosts]).reject(&:blank?)
+ end
+
+ def current_time
+ Time.current.change(usec: 0).rfc3339
+ end
+
+ def starts_at
+ Time.parse(payload[:start_time].to_s).rfc3339
+ rescue ArgumentError
+ current_time
+ end
+
+ def secondary_params
+ payload.except(:start_time)
+ end
+
+ def flatten_secondary_params
+ Gitlab::Utils::SafeInlineHash.merge_keys!(secondary_params)
+ rescue ArgumentError
+ raise BadPayloadError, 'The payload is too big'
+ end
+ end
+ end
+end