From eaea945e0355826c58c3dcf887496ea91064f85c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 6 Apr 2020 09:09:17 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../projects/prometheus/metrics/base_service.rb | 48 ++++++++++++++++++++++ .../projects/prometheus/metrics/destroy_service.rb | 14 +++++++ .../projects/prometheus/metrics/update_service.rb | 29 +++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 app/services/projects/prometheus/metrics/base_service.rb create mode 100644 app/services/projects/prometheus/metrics/destroy_service.rb create mode 100644 app/services/projects/prometheus/metrics/update_service.rb (limited to 'app/services') diff --git a/app/services/projects/prometheus/metrics/base_service.rb b/app/services/projects/prometheus/metrics/base_service.rb new file mode 100644 index 00000000000..be1783dde70 --- /dev/null +++ b/app/services/projects/prometheus/metrics/base_service.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Projects + module Prometheus + module Metrics + class BaseService + include Gitlab::Utils::StrongMemoize + + def initialize(metric, params = {}) + @metric = metric + @project = metric.project + @params = params.dup + end + + protected + + attr_reader :metric, :project, :params + + def application + alert.environment.cluster_prometheus_adapter + end + + def schedule_alert_update + return unless alert + return unless alert.environment + + ::Clusters::Applications::ScheduleUpdateService.new( + alert.environment.cluster_prometheus_adapter, project).execute + end + + def alert + strong_memoize(:alert) { find_alert(metric) } + end + + def find_alert(metric) + Projects::Prometheus::AlertsFinder + .new(project: project, metric: metric) + .execute + .first + end + + def has_alert? + alert.present? + end + end + end + end +end diff --git a/app/services/projects/prometheus/metrics/destroy_service.rb b/app/services/projects/prometheus/metrics/destroy_service.rb new file mode 100644 index 00000000000..6a46eb5516c --- /dev/null +++ b/app/services/projects/prometheus/metrics/destroy_service.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Projects + module Prometheus + module Metrics + class DestroyService < Metrics::BaseService + def execute + schedule_alert_update if has_alert? + metric.destroy + end + end + end + end +end diff --git a/app/services/projects/prometheus/metrics/update_service.rb b/app/services/projects/prometheus/metrics/update_service.rb new file mode 100644 index 00000000000..9b51f4ab47d --- /dev/null +++ b/app/services/projects/prometheus/metrics/update_service.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Projects + module Prometheus + module Metrics + class UpdateService < Metrics::BaseService + def execute + metric.update!(params) + schedule_alert_update if requires_alert_update? + metric + end + + private + + def requires_alert_update? + has_alert? && (changing_title? || changing_query?) + end + + def changing_title? + metric.previous_changes.include?(:title) + end + + def changing_query? + metric.previous_changes.include?(:query) + end + end + end + end +end -- cgit v1.2.3