summaryrefslogtreecommitdiff
path: root/app/models/deployment_metrics.rb
diff options
context:
space:
mode:
authorThong Kuah <tkuah@gitlab.com>2019-07-01 21:40:59 +1200
committerThong Kuah <tkuah@gitlab.com>2019-07-08 09:13:21 +1200
commitd2ba2951f737082edd568505f985ebf9a0808be7 (patch)
tree7da25a607c16810546f6ea57e5354ba145029918 /app/models/deployment_metrics.rb
parent1b5b0dea5228ae7fd520c8bca3f03c4799a4d31d (diff)
downloadgitlab-ce-d2ba2951f737082edd568505f985ebf9a0808be7.tar.gz
Extract deployment_metrics into own object
We can now share project so that we don't have to load project twice. Also, this extracts non-relevant logic out of Deployment. Update DeploymentsController accordingly
Diffstat (limited to 'app/models/deployment_metrics.rb')
-rw-r--r--app/models/deployment_metrics.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/models/deployment_metrics.rb b/app/models/deployment_metrics.rb
new file mode 100644
index 00000000000..2056c8bc59c
--- /dev/null
+++ b/app/models/deployment_metrics.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+class DeploymentMetrics
+ include Gitlab::Utils::StrongMemoize
+
+ attr_reader :project, :deployment
+
+ delegate :cluster, to: :deployment
+
+ def initialize(project, deployment)
+ @project = project
+ @deployment = deployment
+ end
+
+ def has_metrics?
+ deployment.success? && prometheus_adapter&.can_query?
+ end
+
+ def metrics
+ return {} unless has_metrics?
+
+ metrics = prometheus_adapter.query(:deployment, deployment)
+ metrics&.merge(deployment_time: deployment.finished_at.to_i) || {}
+ end
+
+ def additional_metrics
+ return {} unless has_metrics?
+
+ metrics = prometheus_adapter.query(:additional_metrics_deployment, deployment)
+ metrics&.merge(deployment_time: deployment.finished_at.to_i) || {}
+ end
+
+ private
+
+ def prometheus_adapter
+ strong_memoize(:prometheus_adapter) do
+ service = project.find_or_initialize_service('prometheus')
+
+ if service.can_query?
+ service
+ else
+ cluster_prometheus
+ end
+ end
+ end
+
+ def cluster_prometheus
+ cluster.application_prometheus if cluster&.application_prometheus_available?
+ end
+end