summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Chojnacki <pawel@chojnacki.ws>2018-03-01 18:14:54 +0100
committerPawel Chojnacki <pawel@chojnacki.ws>2018-03-01 18:33:49 +0100
commit8ad9cd5581dafeb7a24da7ed119a30761a0a72fe (patch)
tree8a9796c20ca958738ba74ec008383dc5fc787a18
parent2c090539f2dbdbc11c18598c7952a5de497047ea (diff)
downloadgitlab-ce-8ad9cd5581dafeb7a24da7ed119a30761a0a72fe.tar.gz
Implement PrometheusDeploymentLocator + fix metrics controller
-rw-r--r--app/controllers/projects/prometheus/metrics_controller.rb6
-rw-r--r--app/models/concerns/prometheus_adapter_locator.rb26
-rw-r--r--app/models/environment.rb23
-rw-r--r--spec/controllers/projects/prometheus/metrics_controller_spec.rb3
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)