diff options
author | Thong Kuah <tkuah@gitlab.com> | 2019-07-01 21:40:59 +1200 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2019-07-08 09:13:21 +1200 |
commit | d2ba2951f737082edd568505f985ebf9a0808be7 (patch) | |
tree | 7da25a607c16810546f6ea57e5354ba145029918 /app/models/deployment_metrics.rb | |
parent | 1b5b0dea5228ae7fd520c8bca3f03c4799a4d31d (diff) | |
download | gitlab-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.rb | 50 |
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 |