aboutsummaryrefslogtreecommitdiff
path: root/zenserver/admin
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver/admin')
-rw-r--r--zenserver/admin/admin.cpp43
-rw-r--r--zenserver/admin/admin.h10
2 files changed, 52 insertions, 1 deletions
diff --git a/zenserver/admin/admin.cpp b/zenserver/admin/admin.cpp
index 2dd9b110f..0d7a57e36 100644
--- a/zenserver/admin/admin.cpp
+++ b/zenserver/admin/admin.cpp
@@ -5,11 +5,14 @@
#include "admin.h"
#include <zencore/compactbinarybuilder.h>
+#include <zencore/string.h>
namespace zen {
HttpAdminService::HttpAdminService()
{
+ using namespace std::literals;
+
m_Router.RegisterRoute(
"health",
[this](HttpRouterRequest& Req) {
@@ -19,12 +22,50 @@ HttpAdminService::HttpAdminService()
},
HttpVerb::kGet);
+ 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);
+ },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
+ "gc",
+ [this](HttpRouterRequest& Req) {
+ CbObject Response;
+ if (m_GcHandler.Trigger)
+ {
+ Response = m_GcHandler.Trigger();
+ }
+ else
+ {
+ CbObjectWriter Writer;
+ Writer << "Status"sv
+ << "Ok"sv;
+ Response = Writer.Save();
+ }
+ Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response);
+ },
+ HttpVerb::kPost);
+
// RPC endpoint
m_Router.RegisterRoute(
"",
[this](HttpRouterRequest& Req) {
CbObject Payload = Req.ServerRequest().ReadPayloadObject();
-
+
CbObjectWriter Obj;
Obj.AddBool("ok", true);
Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save());
diff --git a/zenserver/admin/admin.h b/zenserver/admin/admin.h
index 6257f0998..f8fcab7de 100644
--- a/zenserver/admin/admin.h
+++ b/zenserver/admin/admin.h
@@ -2,6 +2,7 @@
#pragma once
+#include <zencore/compactbinary.h>
#include <zenhttp/httpserver.h>
namespace zen {
@@ -15,8 +16,17 @@ public:
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;
};
} // namespace zen