aboutsummaryrefslogtreecommitdiff
path: root/zenserver/admin/admin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver/admin/admin.cpp')
-rw-r--r--zenserver/admin/admin.cpp61
1 files changed, 56 insertions, 5 deletions
diff --git a/zenserver/admin/admin.cpp b/zenserver/admin/admin.cpp
index 44406fa70..01c35a1d8 100644
--- a/zenserver/admin/admin.cpp
+++ b/zenserver/admin/admin.cpp
@@ -3,15 +3,16 @@
#include "admin.h"
#include <zencore/compactbinarybuilder.h>
+#include <zencore/string.h>
+#include <zenstore/gc.h>
+
+#include <chrono>
namespace zen {
-HttpAdminService::HttpAdminService()
+HttpAdminService::HttpAdminService(GcScheduler& Scheduler) : m_GcScheduler(Scheduler)
{
- m_Router.RegisterRoute(
- "hello",
- [this](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponseCode::OK); },
- HttpVerb::kGet);
+ using namespace std::literals;
m_Router.RegisterRoute(
"health",
@@ -21,6 +22,56 @@ HttpAdminService::HttpAdminService()
Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save());
},
HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
+ "gc",
+ [this](HttpRouterRequest& Req) {
+ const GcSchedulerStatus Status = m_GcScheduler.Status();
+
+ CbObjectWriter Response;
+ Response << "Status"sv << (GcSchedulerStatus::kIdle == Status ? "Idle"sv : "Running"sv);
+ Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response.Save());
+ },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
+ "gc",
+ [this](HttpRouterRequest& Req) {
+ HttpServerRequest& HttpReq = Req.ServerRequest();
+ const HttpServerRequest::QueryParams Params = HttpReq.GetQueryParams();
+ GcScheduler::TriggerParams GcParams;
+
+ if (auto Param = Params.GetValue("smallobjects"); Param.empty() == false)
+ {
+ GcParams.CollectSmallObjects = Param == "true"sv;
+ }
+
+ if (auto Param = Params.GetValue("maxcacheduration"); Param.empty() == false)
+ {
+ if (auto Value = ParseInt<uint64_t>(Param))
+ {
+ GcParams.MaxCacheDuration = std::chrono::seconds(Value.value());
+ }
+ }
+
+ const bool Started = m_GcScheduler.Trigger(GcParams);
+
+ CbObjectWriter Response;
+ Response << "Status"sv << (Started ? "Started"sv : "Running"sv);
+ HttpReq.WriteResponse(HttpResponseCode::OK, Response.Save());
+ },
+ HttpVerb::kPost);
+
+ m_Router.RegisterRoute(
+ "",
+ [this](HttpRouterRequest& Req) {
+ CbObject Payload = Req.ServerRequest().ReadPayloadObject();
+
+ CbObjectWriter Obj;
+ Obj.AddBool("ok", true);
+ Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save());
+ },
+ HttpVerb::kPost);
}
HttpAdminService::~HttpAdminService()