debian-mirror-gitlab/app/models/deployment_metrics.rb
2019-09-30 21:07:59 +05:30

62 lines
1.6 KiB
Ruby

# 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
# 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
#
# Removal issue: https://gitlab.com/gitlab-org/gitlab-ce/issues/64105
def cluster_prometheus
cluster_with_fallback = cluster || deployment_platform_cluster
cluster_with_fallback.application_prometheus if cluster_with_fallback&.application_prometheus_available?
end
def deployment_platform_cluster
deployment.environment.deployment_platform&.cluster
end
end