diff options
author | Thong Kuah <tkuah@gitlab.com> | 2019-06-24 14:08:42 +1200 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2019-06-27 17:28:52 +1200 |
commit | 04af6132b14e594aeddef2a6d0c171af667c9539 (patch) | |
tree | 774a42379216c745f8f7e36529b22e48dc17717e | |
parent | 4615dca1d90975d16b1534292c1b2886da1b2cd5 (diff) | |
download | gitlab-ce-04af6132b14e594aeddef2a6d0c171af667c9539.tar.gz |
Use #cluster for prometheus_adapteradd-clusters-to-deployment
We still fallback to environment.deployment_platform until we can
backfill
-rw-r--r-- | app/models/deployment.rb | 17 | ||||
-rw-r--r-- | spec/factories/deployments.rb | 4 | ||||
-rw-r--r-- | spec/models/deployment_spec.rb | 61 |
3 files changed, 81 insertions, 1 deletions
diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 8332656a7a6..a8f5642f726 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -197,7 +197,22 @@ class Deployment < ApplicationRecord private def prometheus_adapter - environment.prometheus_adapter + service = project.find_or_initialize_service('prometheus') + + if service.can_query? + service + else + cluster_prometheus + end + end + + # TODO remove fallback case to deployment_platform_cluster. + # Otherwise we will continue to pay the performance penalty described in + # https://gitlab.com/gitlab-org/gitlab-ce/issues/63475 + def cluster_prometheus + cluster_with_fallback = cluster || deployment_platform_cluster + + cluster_with_fallback.application_prometheus if cluster_with_fallback&.application_prometheus_available? end def ref_path diff --git a/spec/factories/deployments.rb b/spec/factories/deployments.rb index db438ad32d3..1c7787bc1a6 100644 --- a/spec/factories/deployments.rb +++ b/spec/factories/deployments.rb @@ -22,6 +22,10 @@ FactoryBot.define do ref 'pages-deploy' end + trait :on_cluster do + cluster factory: %i(cluster provided_by_gcp) + end + trait :running do status :running end diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 341ed31d19b..8d0eb0f4a06 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -295,6 +295,67 @@ describe Deployment do end end + describe '#has_metrics?' do + subject { deployment.has_metrics? } + + context 'when deployment is failed' do + let(:deployment) { create(:deployment, :failed) } + + it { is_expected.to be_falsy } + end + + context 'when deployment is success' do + let(:deployment) { create(:deployment, :success) } + + context 'without a monitoring service' do + it { is_expected.to be_falsy } + end + + context 'with a Prometheus Service' do + let(:prometheus_service) { double(:prometheus_service, can_query?: true) } + + before do + allow(deployment.project).to receive(:find_or_initialize_service).with('prometheus').and_return prometheus_service + end + + it { is_expected.to be_truthy } + end + + context 'with a Prometheus Service that cannot query' do + let(:prometheus_service) { double(:prometheus_service, can_query?: false) } + + before do + allow(deployment.project).to receive(:find_or_initialize_service).with('prometheus').and_return prometheus_service + end + + it { is_expected.to be_falsy } + end + + context 'with a cluster Prometheus' do + let(:deployment) { create(:deployment, :success, :on_cluster) } + let!(:prometheus) { create(:clusters_applications_prometheus, :installed, cluster: deployment.cluster) } + + before do + expect(deployment.cluster.application_prometheus).to receive(:can_query?).and_return(true) + end + + it { is_expected.to be_truthy } + end + + context 'fallback deployment platform' do + let(:cluster) { create(:cluster, :provided_by_user, environment_scope: '*', projects: [deployment.project]) } + let!(:prometheus) { create(:clusters_applications_prometheus, :installed, cluster: cluster) } + + before do + expect(deployment.project).to receive(:deployment_platform).and_return(cluster.platform) + expect(cluster.application_prometheus).to receive(:can_query?).and_return(true) + end + + it { is_expected.to be_truthy } + end + end + end + describe '#metrics' do let(:deployment) { create(:deployment, :success) } let(:prometheus_adapter) { double('prometheus_adapter', can_query?: true) } |