aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/admin/admin.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-10-17 13:33:56 +0200
committerGitHub <[email protected]>2023-10-17 13:33:56 +0200
commit57b600eec73340449774f2cd83e4bcb0c5cbb48e (patch)
treeb065b05c7017a899b826e976fc4932225799c675 /src/zenserver/admin/admin.cpp
parent0.2.28-pre1 (diff)
downloadzen-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.cpp40
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",