diff options
| author | Stefan Boberg <[email protected]> | 2021-10-04 19:07:55 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-10-04 19:07:55 +0200 |
| commit | 871cb623a2b5c1b440fff3a6ece7632e69dbc359 (patch) | |
| tree | 4e33fbb4d646bb5c0882641698bef7c26485ce77 | |
| parent | stats: Implemented new stats endpoint (diff) | |
| download | zen-871cb623a2b5c1b440fff3a6ece7632e69dbc359.tar.xz zen-871cb623a2b5c1b440fff3a6ece7632e69dbc359.zip | |
status: Exposed global status at /status/status
| -rw-r--r-- | zenserver/zenserver.cpp | 63 |
1 files changed, 50 insertions, 13 deletions
diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index f283a2644..18c59636d 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -1,5 +1,6 @@ // Copyright Epic Games, Inc. All Rights Reserved. +#include <zencore/compactbinarybuilder.h> #include <zencore/filesystem.h> #include <zencore/fmtutils.h> #include <zencore/iobuffer.h> @@ -32,7 +33,7 @@ #include <unordered_map> #if !defined(BUILD_VERSION) -# define BUILD_VERSION ("DEV-BUILD") +# define BUILD_VERSION ("dev-build") #endif ////////////////////////////////////////////////////////////////////////// @@ -102,10 +103,10 @@ namespace zen { -class ZenServer -{ - ZenServerState::ZenServerEntry* m_ServerEntry = nullptr; +using namespace std::literals; +class ZenServer : public IHttpStatusProvider +{ public: void Initialize(ZenServiceConfig& ServiceConfig, int BasePort, int ParentPid, ZenServerState::ZenServerEntry* ServerEntry) { @@ -150,6 +151,7 @@ public: m_Http->RegisterService(m_HealthService); m_Http->RegisterService(m_StatsService); m_Http->RegisterService(m_StatusService); + m_StatusService.RegisterHandler("status", *this); // Initialize storage and services @@ -274,8 +276,12 @@ public: const bool IsInteractiveMode = zen::IsInteractiveSession() && !m_TestMode; + m_CurrentState = kRunning; + m_Http->Run(IsInteractiveMode); + m_CurrentState = kShuttingDown; + ZEN_INFO(ZEN_APP_NAME " exiting"); m_IoContext.stop(); @@ -381,16 +387,47 @@ public: m_ProjectStore->Flush(); } + virtual void HandleStatusRequest(HttpServerRequest& Request) override + { + CbObjectWriter Cbo; + Cbo << "ok" << true; + Cbo << "state" << ToString(m_CurrentState); + Request.WriteResponse(HttpResponseCode::OK, Cbo.Save()); + } + private: - bool m_IsDedicatedMode = false; - bool m_TestMode = false; - std::filesystem::path m_DataRoot; - std::filesystem::path m_ContentRoot; - std::jthread m_IoRunner; - asio::io_context m_IoContext; - asio::steady_timer m_PidCheckTimer{m_IoContext}; - zen::ProcessMonitor m_ProcessMonitor; - zen::NamedMutex m_ServerMutex; + ZenServerState::ZenServerEntry* m_ServerEntry = nullptr; + bool m_IsDedicatedMode = false; + bool m_TestMode = false; + std::filesystem::path m_DataRoot; + std::filesystem::path m_ContentRoot; + std::jthread m_IoRunner; + asio::io_context m_IoContext; + asio::steady_timer m_PidCheckTimer{m_IoContext}; + zen::ProcessMonitor m_ProcessMonitor; + zen::NamedMutex m_ServerMutex; + + enum ServerState + { + kInitializing, + kRunning, + kShuttingDown + } m_CurrentState = kInitializing; + + std::string_view ToString(ServerState Value) + { + switch (Value) + { + case kInitializing: + return "initializing"sv; + case kRunning: + return "running"sv; + case kShuttingDown: + return "shutdown"sv; + default: + return "unknown"sv; + } + } zen::Ref<zen::HttpServer> m_Http; zen::HttpStatusService m_StatusService; |