From 57b600eec73340449774f2cd83e4bcb0c5cbb48e Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Tue, 17 Oct 2023 13:33:56 +0200 Subject: added temporary admin/mi_collect handler (#479) allows testing impact of calling mi_collect on a running server --- src/zenserver/admin/admin.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/zenserver/admin/admin.cpp') diff --git a/src/zenserver/admin/admin.cpp b/src/zenserver/admin/admin.cpp index 89dae25af..60599a992 100644 --- a/src/zenserver/admin/admin.cpp +++ b/src/zenserver/admin/admin.cpp @@ -9,6 +9,10 @@ # include #endif // ZEN_WITH_TRACE +#if ZEN_USE_MIMALLOC +# include +#endif + #include #include "cache/structuredcachestore.h" @@ -241,6 +245,41 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler, }, HttpVerb::kPost); +#if ZEN_USE_MIMALLOC + m_Router.RegisterRoute( + "mi_collect", + [this](HttpRouterRequest& Req) { + HttpServerRequest& HttpReq = Req.ServerRequest(); + const HttpServerRequest::QueryParams Params = HttpReq.GetQueryParams(); + + bool Force = false; + + if (auto Param = Params.GetValue("force"); Param.empty() == false) + { + Force = (Param == "true"sv); + } + + ExtendableStringBuilder<256> MiStats; + ExtendableStringBuilder<256> MiStatsAfter; + + auto MiOutputFun = [](const char* msg, void* arg) { + StringBuilderBase* StarsSb = reinterpret_cast(arg); + StarsSb->AppendAscii(msg); + }; + + mi_stats_print_out(MiOutputFun, static_cast(&MiStats)); + mi_collect(Force); + mi_stats_print_out(MiOutputFun, static_cast(&MiStatsAfter)); + + CbObjectWriter Response; + Response << "force"sv << Force; + Response << "stats_before"sv << MiStats; + Response << "stats_after"sv << MiStatsAfter; + HttpReq.WriteResponse(HttpResponseCode::OK, Response.Save()); + }, + HttpVerb::kPost); +#endif + m_Router.RegisterRoute( "scrub", [this](HttpRouterRequest& Req) { @@ -267,6 +306,7 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler, Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save()); }, HttpVerb::kPost); + #if ZEN_WITH_TRACE m_Router.RegisterRoute( "trace", -- cgit v1.2.3