# frozen_string_literal: true # Central point for managing errors from within the metrics # dashboard module. Handles errors from dashboard retrieval # and processing steps, as well as defines shared error classes. module Gitlab module Metrics module Dashboard module Errors DashboardProcessingError = Class.new(StandardError) PanelNotFoundError = Class.new(StandardError) MissingIntegrationError = Class.new(StandardError) LayoutError = Class.new(DashboardProcessingError) MissingQueryError = Class.new(DashboardProcessingError) NOT_FOUND_ERROR = Gitlab::Template::Finders::RepoTemplateFinder::FileNotFoundError def handle_errors(error) case error when DashboardProcessingError error(error.message, :unprocessable_entity) when NOT_FOUND_ERROR error(_("%{dashboard_path} could not be found.") % { dashboard_path: dashboard_path }, :not_found) when PanelNotFoundError error(error.message, :not_found) when ::Grafana::Client::Error error(error.message, :service_unavailable) when MissingIntegrationError error(_('Proxy support for this API is not available currently'), :bad_request) else raise error end end def panels_not_found!(opts) raise PanelNotFoundError.new(_("No panels matching properties %{opts}") % { opts: opts }) end end end end end