diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2018-03-01 18:14:54 +0100 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2018-03-01 18:33:49 +0100 |
commit | 8ad9cd5581dafeb7a24da7ed119a30761a0a72fe (patch) | |
tree | 8a9796c20ca958738ba74ec008383dc5fc787a18 | |
parent | 2c090539f2dbdbc11c18598c7952a5de497047ea (diff) | |
download | gitlab-ce-8ad9cd5581dafeb7a24da7ed119a30761a0a72fe.tar.gz |
Implement PrometheusDeploymentLocator + fix metrics controller
-rw-r--r-- | app/controllers/projects/prometheus/metrics_controller.rb | 6 | ||||
-rw-r--r-- | app/models/concerns/prometheus_adapter_locator.rb | 26 | ||||
-rw-r--r-- | app/models/environment.rb | 23 | ||||
-rw-r--r-- | spec/controllers/projects/prometheus/metrics_controller_spec.rb | 3 |
4 files changed, 31 insertions, 27 deletions
diff --git a/app/controllers/projects/prometheus/metrics_controller.rb b/app/controllers/projects/prometheus/metrics_controller.rb index 255fbf254fb..ec3c49059e1 100644 --- a/app/controllers/projects/prometheus/metrics_controller.rb +++ b/app/controllers/projects/prometheus/metrics_controller.rb @@ -1,6 +1,8 @@ module Projects module Prometheus class MetricsController < Projects::ApplicationController + include PrometheusAdapterLocator + before_action :authorize_admin_project! before_action :require_prometheus_metrics! @@ -20,10 +22,6 @@ module Projects private - def prometheus_adapter - project.prometheus_service - end - def require_prometheus_metrics! render_404 unless prometheus_adapter.can_query? end diff --git a/app/models/concerns/prometheus_adapter_locator.rb b/app/models/concerns/prometheus_adapter_locator.rb new file mode 100644 index 00000000000..f301eab5c57 --- /dev/null +++ b/app/models/concerns/prometheus_adapter_locator.rb @@ -0,0 +1,26 @@ +module PrometheusAdapterLocator + def deployment_platform + project.deployment_platform + end + + def prometheus_adapter + @prometheus_adapter ||= if service_prometheus_adapter.can_query? + service_prometheus_adapter + else + cluster_prometheus_adapter + end + end + + def service_prometheus_adapter + project.find_or_initialize_service('prometheus') + end + + def cluster_prometheus_adapter + return unless deployment_platform.respond_to?(:cluster) + + cluster = deployment_platform.cluster + return unless cluster.application_prometheus&.installed? + + cluster.application_prometheus + end +end
\ No newline at end of file diff --git a/app/models/environment.rb b/app/models/environment.rb index 57960a7c3b3..baba023c92d 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -1,4 +1,6 @@ class Environment < ActiveRecord::Base + include PrometheusAdapterLocator + # Used to generate random suffixes for the slug LETTERS = 'a'..'z' NUMBERS = '0'..'9' @@ -224,27 +226,6 @@ class Environment < ActiveRecord::Base project.deployment_platform end - def prometheus_adapter - @prometheus_adapter ||= if service_prometheus_adapter.can_query? - service_prometheus_adapter - else - cluster_prometheus_adapter - end - end - - def service_prometheus_adapter - project.find_or_initialize_service('prometheus') - end - - def cluster_prometheus_adapter - return unless deployment_platform.respond_to?(:cluster) - - cluster = deployment_platform.cluster - return unless cluster.application_prometheus&.installed? - - cluster.application_prometheus - end - private # Slugifying a name may remove the uniqueness guarantee afforded by it being diff --git a/spec/controllers/projects/prometheus/metrics_controller_spec.rb b/spec/controllers/projects/prometheus/metrics_controller_spec.rb index e364e99d857..9d2ac42e99f 100644 --- a/spec/controllers/projects/prometheus/metrics_controller_spec.rb +++ b/spec/controllers/projects/prometheus/metrics_controller_spec.rb @@ -7,8 +7,7 @@ describe Projects::Prometheus::MetricsController do let(:prometheus_adapter) { double('prometheus_adapter', can_query?: true) } before do - allow(controller).to receive(:project).and_return(project) - allow(project).to receive(:prometheus_service).and_return(prometheus_adapter) + allow(controller).to receive(:prometheus_adapter).and_return(prometheus_adapter) project.add_master(user) sign_in(user) |