Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/grafana/proxy_service.rb')
-rw-r--r--app/services/grafana/proxy_service.rb94
1 files changed, 0 insertions, 94 deletions
diff --git a/app/services/grafana/proxy_service.rb b/app/services/grafana/proxy_service.rb
deleted file mode 100644
index 37272c85638..00000000000
--- a/app/services/grafana/proxy_service.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-# frozen_string_literal: true
-
-# Proxies calls to a Grafana-integrated Prometheus instance
-# through the Grafana proxy API
-
-# This allows us to fetch and render metrics in GitLab from a Prometheus
-# instance for which dashboards are configured in Grafana
-module Grafana
- class ProxyService < BaseService
- include ReactiveCaching
-
- self.reactive_cache_key = ->(service) { service.cache_key }
- self.reactive_cache_lease_timeout = 30.seconds
- self.reactive_cache_refresh_interval = 30.seconds
- self.reactive_cache_work_type = :external_dependency
- self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
-
- SUPPORTED_DATASOURCE_PATTERN = %r{\A\d+\z}.freeze
-
- SUPPORTED_PROXY_PATH = Gitlab::Metrics::Dashboard::Stages::GrafanaFormatter::PROXY_PATH
-
- attr_accessor :project, :datasource_id, :proxy_path, :query_params
-
- # @param project_id [Integer] Project id for which grafana is configured.
- #
- # See #initialize for other parameters.
- def self.from_cache(project_id, datasource_id, proxy_path, query_params)
- project = Project.find(project_id)
-
- new(project, datasource_id, proxy_path, query_params)
- end
-
- # @param project [Project] Project for which grafana is configured.
- # @param datasource_id [String] Grafana datasource id for Prometheus instance
- # @param proxy_path [String] Path to Prometheus endpoint; EX) 'api/v1/query_range'
- # @param query_params [Hash<String, String>] Supported params: [query, start, end, step]
- def initialize(project, datasource_id, proxy_path, query_params)
- @project = project
- @datasource_id = datasource_id
- @proxy_path = proxy_path
- @query_params = query_params
- end
-
- def execute
- return cannot_proxy_response unless can_proxy?
- return cannot_proxy_response unless client
-
- with_reactive_cache(*cache_key) { |result| result }
- end
-
- def calculate_reactive_cache(*)
- return cannot_proxy_response unless client
-
- response = client.proxy_datasource(
- datasource_id: datasource_id,
- proxy_path: proxy_path,
- query: query_params
- )
-
- success(http_status: response.code, body: response.body)
- rescue ::Grafana::Client::Error => error
- service_unavailable_response(error)
- end
-
- # Required for ReactiveCaching; Usage overridden by
- # self.reactive_cache_worker_finder
- def id
- nil
- end
-
- def cache_key
- [project.id, datasource_id, proxy_path, query_params]
- end
-
- private
-
- def can_proxy?
- SUPPORTED_PROXY_PATH == proxy_path &&
- SUPPORTED_DATASOURCE_PATTERN.match?(datasource_id)
- end
-
- def client
- project.grafana_integration&.client
- end
-
- def service_unavailable_response(exception)
- error(exception.message, :service_unavailable)
- end
-
- def cannot_proxy_response
- error('Proxy support for this API is not available currently')
- end
- end
-end