#include "util/prometheus/Http.hpp" #include "util/prometheus/Prometheus.hpp" #include #include #include #include #include #include namespace util::prometheus { namespace http = boost::beast::http; namespace { bool isPrometheusRequest(http::request const& req) { return req.method() == http::verb::get && req.target() == "/metrics"; } } // namespace std::optional> handlePrometheusRequest(http::request const& req, bool const isAdmin) { bool const prometheusRequest = isPrometheusRequest(req); if (!prometheusRequest) return std::nullopt; if (!isAdmin) { return http::response( http::status::unauthorized, req.version(), "Only admin is allowed to collect metrics" ); } if (not PrometheusService::isEnabled()) { return http::response( http::status::forbidden, req.version(), "Prometheus is disabled in clio config" ); } auto response = http::response(http::status::ok, req.version()); response.set(http::field::content_type, "text/plain; version=0.0.4"); response.body() = PrometheusService::collectMetrics(); if (PrometheusService::compressReplyEnabled()) response.set(http::field::content_encoding, "gzip"); return response; } } // namespace util::prometheus