2019-10-12 21:52:04 +05:30
|
|
|
# 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
|
2019-12-04 20:38:33 +05:30
|
|
|
DashboardProcessingError = Class.new(StandardError)
|
2019-10-12 21:52:04 +05:30
|
|
|
PanelNotFoundError = Class.new(StandardError)
|
2019-12-26 22:10:19 +05:30
|
|
|
MissingIntegrationError = Class.new(StandardError)
|
2019-12-04 20:38:33 +05:30
|
|
|
LayoutError = Class.new(DashboardProcessingError)
|
|
|
|
MissingQueryError = Class.new(DashboardProcessingError)
|
2019-10-12 21:52:04 +05:30
|
|
|
|
|
|
|
NOT_FOUND_ERROR = Gitlab::Template::Finders::RepoTemplateFinder::FileNotFoundError
|
|
|
|
|
|
|
|
def handle_errors(error)
|
|
|
|
case error
|
2019-12-04 20:38:33 +05:30
|
|
|
when DashboardProcessingError
|
2019-10-12 21:52:04 +05:30
|
|
|
error(error.message, :unprocessable_entity)
|
|
|
|
when NOT_FOUND_ERROR
|
|
|
|
error("#{dashboard_path} could not be found.", :not_found)
|
|
|
|
when PanelNotFoundError
|
|
|
|
error(error.message, :not_found)
|
2019-12-26 22:10:19 +05:30
|
|
|
when ::Grafana::Client::Error
|
|
|
|
error(error.message, :service_unavailable)
|
|
|
|
when MissingIntegrationError
|
|
|
|
error('Proxy support for this API is not available currently', :bad_request)
|
2019-10-12 21:52:04 +05:30
|
|
|
else
|
|
|
|
raise error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def panels_not_found!(opts)
|
|
|
|
raise PanelNotFoundError.new("No panels matching properties #{opts}")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|