diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-31 18:09:11 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-31 18:09:11 +0000 |
commit | 0434f38ef1dce4fe640fe1e4542235746ceb943c (patch) | |
tree | 3affe5902c9da74441dfbf5069f76c023b5cd03a /lib/gitlab/alerting | |
parent | c27acb1d376f7127cd33eadcc8f5683ed55262bc (diff) | |
download | gitlab-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.rb | 75 |
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 |