50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Clusters
|
|
module Concerns
|
|
module PrometheusClient
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
include PrometheusAdapter
|
|
|
|
def service_name
|
|
'prometheus-prometheus-server'
|
|
end
|
|
|
|
def service_port
|
|
80
|
|
end
|
|
|
|
def prometheus_client
|
|
return unless kube_client
|
|
|
|
proxy_url = kube_client.proxy_url('service', service_name, service_port, Gitlab::Kubernetes::Helm::NAMESPACE)
|
|
|
|
# ensures headers containing auth data are appended to original k8s client options
|
|
options = kube_client.rest_client.options
|
|
.merge(prometheus_client_default_options)
|
|
.merge(headers: kube_client.headers)
|
|
Gitlab::PrometheusClient.new(proxy_url, options)
|
|
rescue Kubeclient::HttpError, Errno::ECONNRESET, Errno::ECONNREFUSED, Errno::ENETUNREACH
|
|
# If users have mistakenly set parameters or removed the depended clusters,
|
|
# `proxy_url` could raise an exception because gitlab can not communicate with the cluster.
|
|
# Since `PrometheusAdapter#can_query?` is eargely loaded on environement pages in gitlab,
|
|
# we need to silence the exceptions
|
|
end
|
|
|
|
def configured?
|
|
kube_client.present? && available?
|
|
rescue Gitlab::UrlBlocker::BlockedUrlError
|
|
false
|
|
end
|
|
|
|
private
|
|
|
|
def kube_client
|
|
cluster&.kubeclient&.core_client
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|