diff options
| author | Stefan Boberg <[email protected]> | 2023-10-17 13:33:56 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-17 13:33:56 +0200 |
| commit | 57b600eec73340449774f2cd83e4bcb0c5cbb48e (patch) | |
| tree | b065b05c7017a899b826e976fc4932225799c675 /src/zenserver/admin/admin.cpp | |
| parent | 0.2.28-pre1 (diff) | |
| download | zen-57b600eec73340449774f2cd83e4bcb0c5cbb48e.tar.xz zen-57b600eec73340449774f2cd83e4bcb0c5cbb48e.zip | |
added temporary admin/mi_collect handler (#479)
allows testing impact of calling mi_collect on a running server
Diffstat (limited to 'src/zenserver/admin/admin.cpp')
| -rw-r--r-- | src/zenserver/admin/admin.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
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 <zencore/trace.h> #endif // ZEN_WITH_TRACE +#if ZEN_USE_MIMALLOC +# include <mimalloc.h> +#endif + #include <zenstore/gc.h> #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<StringBuilderBase*>(arg); + StarsSb->AppendAscii(msg); + }; + + mi_stats_print_out(MiOutputFun, static_cast<StringBuilderBase*>(&MiStats)); + mi_collect(Force); + mi_stats_print_out(MiOutputFun, static_cast<StringBuilderBase*>(&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", |