aboutsummaryrefslogtreecommitdiff
path: root/zenserver/admin
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
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')
-rw-r--r--zenserver/admin/admin.cpp51
-rw-r--r--zenserver/admin/admin.h14
2 files changed, 31 insertions, 34 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) {
diff --git a/zenserver/admin/admin.h b/zenserver/admin/admin.h
index f8fcab7de..9463ffbb3 100644
--- a/zenserver/admin/admin.h
+++ b/zenserver/admin/admin.h
@@ -7,26 +7,20 @@
namespace zen {
+class GcScheduler;
+
class HttpAdminService : public zen::HttpService
{
public:
- HttpAdminService();
+ HttpAdminService(GcScheduler& Scheduler);
~HttpAdminService();
virtual const char* BaseUri() const override;
virtual void HandleRequest(zen::HttpServerRequest& Request) override;
- struct GcHandler
- {
- std::function<CbObject()> Trigger;
- std::function<CbObject()> Status;
- };
-
- void RegisterGcHandler(GcHandler&& Handler) { m_GcHandler = std::forward<GcHandler>(Handler); }
-
private:
HttpRequestRouter m_Router;
- GcHandler m_GcHandler;
+ GcScheduler& m_GcScheduler;
};
} // namespace zen