diff options
| author | Stefan Boberg <[email protected]> | 2023-05-02 13:23:42 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-02 13:23:42 +0200 |
| commit | fc53dd4bd6737f4e1c406f24cd66b4255f383e60 (patch) | |
| tree | 56bf06028ddae6ed2ff445a78db6a781538949f4 /src/zenhttp/monitoring/httpstatus.cpp | |
| parent | move auth code from zenserver into zenhttp (#265) (diff) | |
| download | zen-fc53dd4bd6737f4e1c406f24cd66b4255f383e60.tar.xz zen-fc53dd4bd6737f4e1c406f24cd66b4255f383e60.zip | |
move testing and observability code to zenhttp (#266)
Diffstat (limited to 'src/zenhttp/monitoring/httpstatus.cpp')
| -rw-r--r-- | src/zenhttp/monitoring/httpstatus.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/zenhttp/monitoring/httpstatus.cpp b/src/zenhttp/monitoring/httpstatus.cpp new file mode 100644 index 000000000..9fecedb06 --- /dev/null +++ b/src/zenhttp/monitoring/httpstatus.cpp @@ -0,0 +1,62 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "zenhttp/httpstatus.h" + +namespace zen { + +HttpStatusService::HttpStatusService() : m_Log(logging::Get("status")) +{ +} + +HttpStatusService::~HttpStatusService() +{ +} + +const char* +HttpStatusService::BaseUri() const +{ + return "/status/"; +} + +void +HttpStatusService::RegisterHandler(std::string_view Id, IHttpStatusProvider& Provider) +{ + RwLock::ExclusiveLockScope _(m_Lock); + m_Providers.insert_or_assign(std::string(Id), &Provider); +} + +void +HttpStatusService::UnregisterHandler(std::string_view Id, IHttpStatusProvider& Provider) +{ + ZEN_UNUSED(Provider); + + RwLock::ExclusiveLockScope _(m_Lock); + m_Providers.erase(std::string(Id)); +} + +void +HttpStatusService::HandleRequest(HttpServerRequest& Request) +{ + using namespace std::literals; + + std::string_view Key = Request.RelativeUri(); + + switch (Request.RequestVerb()) + { + case HttpVerb::kHead: + case HttpVerb::kGet: + { + RwLock::SharedLockScope _(m_Lock); + if (auto It = m_Providers.find(std::string{Key}); It != end(m_Providers)) + { + return It->second->HandleStatusRequest(Request); + } + } + + [[fallthrough]]; + default: + return; + } +} + +} // namespace zen |