diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /lib/gitlab/alert_management | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'lib/gitlab/alert_management')
-rw-r--r-- | lib/gitlab/alert_management/alert_params.rb | 41 | ||||
-rw-r--r-- | lib/gitlab/alert_management/alert_status_counts.rb | 53 |
2 files changed, 94 insertions, 0 deletions
diff --git a/lib/gitlab/alert_management/alert_params.rb b/lib/gitlab/alert_management/alert_params.rb new file mode 100644 index 00000000000..982479784a9 --- /dev/null +++ b/lib/gitlab/alert_management/alert_params.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module Gitlab + module AlertManagement + class AlertParams + MONITORING_TOOLS = { + prometheus: 'Prometheus' + }.freeze + + def self.from_generic_alert(project:, payload:) + parsed_payload = Gitlab::Alerting::NotificationPayloadParser.call(payload).with_indifferent_access + annotations = parsed_payload[:annotations] + + { + project_id: project.id, + title: annotations[:title], + description: annotations[:description], + monitoring_tool: annotations[:monitoring_tool], + service: annotations[:service], + hosts: Array(annotations[:hosts]), + payload: payload, + started_at: parsed_payload['startsAt'], + severity: annotations[:severity] + } + end + + def self.from_prometheus_alert(project:, parsed_alert:) + { + project_id: project.id, + title: parsed_alert.title, + description: parsed_alert.description, + monitoring_tool: MONITORING_TOOLS[:prometheus], + payload: parsed_alert.payload, + started_at: parsed_alert.starts_at, + ended_at: parsed_alert.ends_at, + fingerprint: parsed_alert.gitlab_fingerprint + } + end + end + end +end diff --git a/lib/gitlab/alert_management/alert_status_counts.rb b/lib/gitlab/alert_management/alert_status_counts.rb new file mode 100644 index 00000000000..382026236e0 --- /dev/null +++ b/lib/gitlab/alert_management/alert_status_counts.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module Gitlab + module AlertManagement + # Represents counts of each status or category of statuses + class AlertStatusCounts + include Gitlab::Utils::StrongMemoize + + STATUSES = ::AlertManagement::Alert::STATUSES + + attr_reader :project + + def self.declarative_policy_class + 'AlertManagement::AlertPolicy' + end + + def initialize(current_user, project, params) + @project = project + @current_user = current_user + @params = params + end + + # Define method for each status + STATUSES.each_key do |status| + define_method(status) { counts[status] } + end + + def open + counts[:triggered] + counts[:acknowledged] + end + + def all + counts.values.sum # rubocop:disable CodeReuse/ActiveRecord + end + + private + + attr_reader :current_user, :params + + def counts + strong_memoize(:counts) do + Hash.new(0).merge(counts_by_status) + end + end + + def counts_by_status + ::AlertManagement::AlertsFinder + .counts_by_status(current_user, project, params) + .transform_keys { |status_id| STATUSES.key(status_id) } + end + end + end +end |