aboutsummaryrefslogtreecommitdiff
path: root/zenserver/admin/admin.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2021-12-12 12:04:31 +0100
committerPer Larsson <[email protected]>2021-12-12 12:04:31 +0100
commita40133fe893100631f9bb8cd68fb7c2edbab0759 (patch)
tree80cdcb8af8fad50d1004116671a655ec4495d729 /zenserver/admin/admin.cpp
parentAdded size to GcStorage. (diff)
downloadzen-a40133fe893100631f9bb8cd68fb7c2edbab0759.tar.xz
zen-a40133fe893100631f9bb8cd68fb7c2edbab0759.zip
Added support for triggering GC with different params and refactored GC scheduler.
Diffstat (limited to 'zenserver/admin/admin.cpp')
-rw-r--r--zenserver/admin/admin.cpp51
1 files changed, 27 insertions, 24 deletions
diff --git a/zenserver/admin/admin.cpp b/zenserver/admin/admin.cpp
index 0d7a57e36..8a3ab460c 100644
--- a/zenserver/admin/admin.cpp
+++ b/zenserver/admin/admin.cpp
@@ -6,10 +6,13 @@
#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)
{
using namespace std::literals;
@@ -25,42 +28,42 @@ HttpAdminService::HttpAdminService()
m_Router.RegisterRoute(
"gc",
[this](HttpRouterRequest& Req) {
- CbObject Response;
- if (m_GcHandler.Status)
- {
- Response = m_GcHandler.Status();
- }
- else
- {
- CbObjectWriter Writer;
- Writer << "Status"sv
- << "Ok"sv;
- Response = Writer.Save();
- }
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response);
+ 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) {
- CbObject Response;
- if (m_GcHandler.Trigger)
+ HttpServerRequest& HttpReq = Req.ServerRequest();
+ const HttpServerRequest::QueryParams Params = HttpReq.GetQueryParams();
+ GcScheduler::TriggerParams GcParams;
+
+ if (auto Param = Params.GetValue("smallobjects"); Param == "true"sv)
{
- Response = m_GcHandler.Trigger();
+ GcParams.CollectSmallObjects = true;
}
- else
+
+ if (auto Param = Params.GetValue("maxcacheduration"); Param.empty() == false)
{
- CbObjectWriter Writer;
- Writer << "Status"sv
- << "Ok"sv;
- Response = Writer.Save();
+ if (auto Value = ParseInt<uint64_t>(Param))
+ {
+ GcParams.MaxCacheDuration = std::chrono::seconds(Value.value());
+ }
}
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response);
+
+ 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);
- // RPC endpoint
m_Router.RegisterRoute(
"",
[this](HttpRouterRequest& Req) {