From 912cd60c4cdfd6e0253ee1b9ed1abade09ac8b7c Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Fri, 30 Jun 2023 10:55:49 +0200 Subject: various zenhttp fixes from sb/proto * Made HttpHealthService use locks to serialize access to state * Added ToString(HttpResponseCode HttpCode) * Added support for JS source maps * Moved IHttpStatsProvider/IHttpStatsService * Enabled enumeration of stats providers * Disabled build of HttpTestingService unless ZEN_WITH_TESTS is defined --- src/zenhttp/monitoring/httpstats.cpp | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/zenhttp/monitoring/httpstats.cpp') diff --git a/src/zenhttp/monitoring/httpstats.cpp b/src/zenhttp/monitoring/httpstats.cpp index a873b4977..1dad48d68 100644 --- a/src/zenhttp/monitoring/httpstats.cpp +++ b/src/zenhttp/monitoring/httpstats.cpp @@ -2,6 +2,8 @@ #include "zenhttp/httpstats.h" +#include + namespace zen { HttpStatsService::HttpStatsService() : m_Log(logging::Get("stats")) @@ -15,7 +17,7 @@ HttpStatsService::~HttpStatsService() const char* HttpStatsService::BaseUri() const { - return "/stats/"; + return "/stats"; } void @@ -46,10 +48,34 @@ HttpStatsService::HandleRequest(HttpServerRequest& Request) case HttpVerb::kHead: case HttpVerb::kGet: { - RwLock::SharedLockScope _(m_Lock); - if (auto It = m_Providers.find(std::string{Key}); It != end(m_Providers)) + if (Key.empty()) { - return It->second->HandleStatsRequest(Request); + CbObjectWriter Cbo; + + Cbo.BeginArray("providers"); + + { + RwLock::SharedLockScope _(m_Lock); + for (auto& Kv : m_Providers) + { + Cbo << Kv.first; + } + } + + Cbo.EndArray(); + + Request.WriteResponse(HttpResponseCode::OK, Cbo.Save()); + } + + if (Key[0] == '/') + { + Key.remove_prefix(1); + + RwLock::SharedLockScope _(m_Lock); + if (auto It = m_Providers.find(std::string{Key}); It != end(m_Providers)) + { + return It->second->HandleStatsRequest(Request); + } } } -- cgit v1.2.3