diff options
Diffstat (limited to 'lib/gitlab/alert_management/payload/prometheus.rb')
-rw-r--r-- | lib/gitlab/alert_management/payload/prometheus.rb | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/lib/gitlab/alert_management/payload/prometheus.rb b/lib/gitlab/alert_management/payload/prometheus.rb index 336e9b319e8..f278da7937b 100644 --- a/lib/gitlab/alert_management/payload/prometheus.rb +++ b/lib/gitlab/alert_management/payload/prometheus.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -# Attribute mapping for alerts via prometheus alerting integration. module Gitlab module AlertManagement module Payload + # Attribute mapping for alerts via prometheus alerting integration. class Prometheus < Base attribute :alert_markdown, paths: %w(annotations gitlab_incident_markdown) attribute :annotations, paths: 'annotations' @@ -26,13 +26,49 @@ module Gitlab paths: [%w(annotations title), %w(annotations summary), %w(labels alertname)] - attribute :starts_at_raw, paths: [%w(startsAt)] private :starts_at_raw + attribute :severity_raw, paths: %w(labels severity) + private :severity_raw + METRIC_TIME_WINDOW = 30.minutes + SEVERITY_MAP = { + 'critical' => :critical, + 'high' => :high, + 'medium' => :medium, + 'low' => :low, + 'info' => :info, + 's1' => :critical, + 's2' => :high, + 's3' => :medium, + 's4' => :low, + 's5' => :info, + 'p1' => :critical, + 'p2' => :high, + 'p3' => :medium, + 'p4' => :low, + 'p5' => :info, + 'debug' => :info, + 'information' => :info, + 'notice' => :info, + 'warn' => :low, + 'warning' => :low, + 'minor' => :low, + 'error' => :medium, + 'major' => :high, + 'emergency' => :critical, + 'fatal' => :critical, + 'alert' => :medium, + 'page' => :high + }.freeze + + # Handle an unmapped severity value the same way we treat missing values + # so we can fallback to alert's default severity `critical`. + UNMAPPED_SEVERITY = nil + def monitoring_tool Gitlab::AlertManagement::Payload::MONITORING_TOOLS[:prometheus] end @@ -65,6 +101,12 @@ module Gitlab project && title && starts_at_raw end + def severity + return unless severity_raw + + SEVERITY_MAP.fetch(severity_raw.to_s.downcase, UNMAPPED_SEVERITY) + end + private def plain_gitlab_fingerprint |