38 lines
888 B
Ruby
38 lines
888 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class Projects::Environments::PrometheusApiController < Projects::ApplicationController
|
||
|
before_action :authorize_read_prometheus!
|
||
|
before_action :environment
|
||
|
|
||
|
def proxy
|
||
|
result = Prometheus::ProxyService.new(
|
||
|
environment,
|
||
|
request.method,
|
||
|
params[:proxy_path],
|
||
|
params.permit!
|
||
|
).execute
|
||
|
|
||
|
if result.nil?
|
||
|
return render status: :accepted, json: {
|
||
|
status: _('processing'),
|
||
|
message: _('Not ready yet. Try again later.')
|
||
|
}
|
||
|
end
|
||
|
|
||
|
if result[:status] == :success
|
||
|
render status: result[:http_status], json: result[:body]
|
||
|
else
|
||
|
render(
|
||
|
status: result[:http_status] || :bad_request,
|
||
|
json: { status: result[:status], message: result[:message] }
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def environment
|
||
|
@environment ||= project.environments.find(params[:id])
|
||
|
end
|
||
|
end
|