// Copyright Epic Games, Inc. All Rights Reserved. #include "admin.h" #include #include #include #include namespace zen { HttpAdminService::HttpAdminService(GcScheduler& Scheduler) : m_GcScheduler(Scheduler) { using namespace std::literals; m_Router.RegisterRoute( "health", [](HttpRouterRequest& Req) { CbObjectWriter Obj; Obj.AddBool("ok", true); 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(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( "", [](HttpRouterRequest& Req) { CbObject Payload = Req.ServerRequest().ReadPayloadObject(); CbObjectWriter Obj; Obj.AddBool("ok", true); Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save()); }, HttpVerb::kPost); } HttpAdminService::~HttpAdminService() { } const char* HttpAdminService::BaseUri() const { return "/admin/"; } void HttpAdminService::HandleRequest(zen::HttpServerRequest& Request) { m_Router.HandleRequest(Request); } } // namespace zen