aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-02 13:23:42 +0200
committerGitHub <[email protected]>2023-05-02 13:23:42 +0200
commitfc53dd4bd6737f4e1c406f24cd66b4255f383e60 (patch)
tree56bf06028ddae6ed2ff445a78db6a781538949f4 /src/zenserver
parentmove auth code from zenserver into zenhttp (#265) (diff)
downloadzen-fc53dd4bd6737f4e1c406f24cd66b4255f383e60.tar.xz
zen-fc53dd4bd6737f4e1c406f24cd66b4255f383e60.zip
move testing and observability code to zenhttp (#266)
Diffstat (limited to 'src/zenserver')
-rw-r--r--src/zenserver/cache/structuredcache.cpp2
-rw-r--r--src/zenserver/cache/structuredcache.h5
-rw-r--r--src/zenserver/config.cpp12
-rw-r--r--src/zenserver/diag/diagsvcs.cpp127
-rw-r--r--src/zenserver/diag/diagsvcs.h111
-rw-r--r--src/zenserver/diag/formatters.h71
-rw-r--r--src/zenserver/httpcidstore.cpp (renamed from src/zenserver/cidstore.cpp)2
-rw-r--r--src/zenserver/httpcidstore.h (renamed from src/zenserver/cidstore.h)0
-rw-r--r--src/zenserver/monitoring/httpstats.cpp62
-rw-r--r--src/zenserver/monitoring/httpstats.h38
-rw-r--r--src/zenserver/monitoring/httpstatus.cpp62
-rw-r--r--src/zenserver/monitoring/httpstatus.h38
-rw-r--r--src/zenserver/projectstore/projectstore.h3
-rw-r--r--src/zenserver/testing/httptest.cpp207
-rw-r--r--src/zenserver/testing/httptest.h55
-rw-r--r--src/zenserver/upstream/jupiter.cpp2
-rw-r--r--src/zenserver/upstream/zen.cpp2
-rw-r--r--src/zenserver/zenserver.cpp16
18 files changed, 21 insertions, 794 deletions
diff --git a/src/zenserver/cache/structuredcache.cpp b/src/zenserver/cache/structuredcache.cpp
index 90e905bf6..3c829f0e8 100644
--- a/src/zenserver/cache/structuredcache.cpp
+++ b/src/zenserver/cache/structuredcache.cpp
@@ -17,10 +17,10 @@
#include <zencore/workthreadpool.h>
#include <zenhttp/httpserver.h>
#include <zenhttp/httpshared.h>
+#include <zenhttp/httpstats.h>
#include <zenutil/cache/cache.h>
#include <zenutil/cache/rpcrecording.h>
-#include "monitoring/httpstats.h"
#include "structuredcachestore.h"
#include "upstream/jupiter.h"
#include "upstream/upstreamcache.h"
diff --git a/src/zenserver/cache/structuredcache.h b/src/zenserver/cache/structuredcache.h
index 4e7b98ac9..8309361f4 100644
--- a/src/zenserver/cache/structuredcache.h
+++ b/src/zenserver/cache/structuredcache.h
@@ -4,9 +4,8 @@
#include <zencore/stats.h>
#include <zenhttp/httpserver.h>
-
-#include "monitoring/httpstats.h"
-#include "monitoring/httpstatus.h"
+#include <zenhttp/httpstats.h>
+#include <zenhttp/httpstatus.h>
#include <memory>
#include <vector>
diff --git a/src/zenserver/config.cpp b/src/zenserver/config.cpp
index cff93d67b..d28262607 100644
--- a/src/zenserver/config.cpp
+++ b/src/zenserver/config.cpp
@@ -33,16 +33,16 @@ std::filesystem::path
PickDefaultStateDirectory()
{
// Pick sensible default
- PWSTR programDataDir = nullptr;
- HRESULT hRes = SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &programDataDir);
+ PWSTR ProgramDataDir = nullptr;
+ HRESULT hRes = SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &ProgramDataDir);
if (SUCCEEDED(hRes))
{
- std::filesystem::path finalPath(programDataDir);
- finalPath /= L"Epic\\Zen\\Data";
- ::CoTaskMemFree(programDataDir);
+ std::filesystem::path FinalPath(ProgramDataDir);
+ FinalPath /= L"Epic\\Zen\\Data";
+ ::CoTaskMemFree(ProgramDataDir);
- return finalPath;
+ return FinalPath;
}
return L"";
diff --git a/src/zenserver/diag/diagsvcs.cpp b/src/zenserver/diag/diagsvcs.cpp
deleted file mode 100644
index 29ad5c3dd..000000000
--- a/src/zenserver/diag/diagsvcs.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "diagsvcs.h"
-
-#include <zencore/compactbinary.h>
-#include <zencore/compactbinarybuilder.h>
-#include <zencore/config.h>
-#include <zencore/filesystem.h>
-#include <zencore/logging.h>
-#include <zencore/string.h>
-#include <fstream>
-#include <sstream>
-
-#include <json11.hpp>
-
-namespace zen {
-
-using namespace std::literals;
-
-bool
-ReadFile(const std::string& Path, StringBuilderBase& Out)
-{
- try
- {
- constexpr auto ReadSize = std::size_t{4096};
- auto FileStream = std::ifstream{Path};
-
- std::string Buf(ReadSize, '\0');
- while (FileStream.read(&Buf[0], ReadSize))
- {
- Out.Append(std::string_view(&Buf[0], FileStream.gcount()));
- }
- Out.Append(std::string_view(&Buf[0], FileStream.gcount()));
-
- return true;
- }
- catch (std::exception&)
- {
- Out.Reset();
- return false;
- }
-}
-
-HttpHealthService::HttpHealthService()
-{
- m_Router.RegisterRoute(
- "",
- [](HttpRouterRequest& RoutedReq) {
- HttpServerRequest& HttpReq = RoutedReq.ServerRequest();
- HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, u8"OK!"sv);
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "info",
- [this](HttpRouterRequest& RoutedReq) {
- HttpServerRequest& HttpReq = RoutedReq.ServerRequest();
-
- CbObjectWriter Writer;
- Writer << "DataRoot"sv << m_HealthInfo.DataRoot.string();
- Writer << "AbsLogPath"sv << m_HealthInfo.AbsLogPath.string();
- Writer << "BuildVersion"sv << m_HealthInfo.BuildVersion;
- Writer << "HttpServerClass"sv << m_HealthInfo.HttpServerClass;
-
- HttpReq.WriteResponse(HttpResponseCode::OK, Writer.Save());
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "log",
- [this](HttpRouterRequest& RoutedReq) {
- HttpServerRequest& HttpReq = RoutedReq.ServerRequest();
-
- zen::Log().flush();
-
- std::filesystem::path Path =
- m_HealthInfo.AbsLogPath.empty() ? m_HealthInfo.DataRoot / "logs/zenserver.log" : m_HealthInfo.AbsLogPath;
-
- ExtendableStringBuilder<4096> Sb;
- if (ReadFile(Path.string(), Sb) && Sb.Size() > 0)
- {
- HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, Sb.ToView());
- }
- else
- {
- HttpReq.WriteResponse(HttpResponseCode::NotFound);
- }
- },
- HttpVerb::kGet);
- m_Router.RegisterRoute(
- "version",
- [this](HttpRouterRequest& RoutedReq) {
- HttpServerRequest& HttpReq = RoutedReq.ServerRequest();
- if (HttpReq.GetQueryParams().GetValue("detailed") == "true")
- {
- HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, ZEN_CFG_VERSION_BUILD_STRING_FULL);
- }
- else
- {
- HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, ZEN_CFG_VERSION);
- }
- },
- HttpVerb::kGet);
-}
-
-void
-HttpHealthService::SetHealthInfo(HealthServiceInfo&& Info)
-{
- m_HealthInfo = std::move(Info);
-}
-
-const char*
-HttpHealthService::BaseUri() const
-{
- return "/health/";
-}
-
-void
-HttpHealthService::HandleRequest(HttpServerRequest& Request)
-{
- if (!m_Router.HandleRequest(Request))
- {
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, u8"OK!"sv);
- }
-}
-
-} // namespace zen
diff --git a/src/zenserver/diag/diagsvcs.h b/src/zenserver/diag/diagsvcs.h
deleted file mode 100644
index bd03f8023..000000000
--- a/src/zenserver/diag/diagsvcs.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#pragma once
-
-#include <zencore/iobuffer.h>
-#include <zenhttp/httpserver.h>
-
-#include <filesystem>
-
-//////////////////////////////////////////////////////////////////////////
-
-namespace zen {
-
-class HttpTestService : public HttpService
-{
- uint32_t LogPoint = 0;
-
-public:
- HttpTestService() {}
- ~HttpTestService() = default;
-
- virtual const char* BaseUri() const override { return "/test/"; }
-
- virtual void HandleRequest(HttpServerRequest& Request) override
- {
- using namespace std::literals;
-
- auto Uri = Request.RelativeUri();
-
- if (Uri == "hello"sv)
- {
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, u8"hello world!"sv);
-
- // OutputLogMessageInternal(&LogPoint, 0, 0);
- }
- else if (Uri == "1K"sv)
- {
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, m_1k);
- }
- else if (Uri == "1M"sv)
- {
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, m_1m);
- }
- else if (Uri == "1M_1k"sv)
- {
- std::vector<IoBuffer> Buffers;
- Buffers.reserve(1024);
-
- for (int i = 0; i < 1024; ++i)
- {
- Buffers.push_back(m_1k);
- }
-
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Buffers);
- }
- else if (Uri == "1G"sv)
- {
- std::vector<IoBuffer> Buffers;
- Buffers.reserve(1024);
-
- for (int i = 0; i < 1024; ++i)
- {
- Buffers.push_back(m_1m);
- }
-
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Buffers);
- }
- else if (Uri == "1G_1k"sv)
- {
- std::vector<IoBuffer> Buffers;
- Buffers.reserve(1024 * 1024);
-
- for (int i = 0; i < 1024 * 1024; ++i)
- {
- Buffers.push_back(m_1k);
- }
-
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Buffers);
- }
- }
-
-private:
- IoBuffer m_1m{1024 * 1024};
- IoBuffer m_1k{m_1m, 0u, 1024};
-};
-
-struct HealthServiceInfo
-{
- std::filesystem::path DataRoot;
- std::filesystem::path AbsLogPath;
- std::string HttpServerClass;
- std::string BuildVersion;
-};
-
-class HttpHealthService : public HttpService
-{
-public:
- HttpHealthService();
- ~HttpHealthService() = default;
-
- void SetHealthInfo(HealthServiceInfo&& Info);
-
- virtual const char* BaseUri() const override;
- virtual void HandleRequest(HttpServerRequest& Request) override final;
-
-private:
- HttpRequestRouter m_Router;
- HealthServiceInfo m_HealthInfo;
-};
-
-} // namespace zen
diff --git a/src/zenserver/diag/formatters.h b/src/zenserver/diag/formatters.h
deleted file mode 100644
index 759df58d3..000000000
--- a/src/zenserver/diag/formatters.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#pragma once
-
-#include <zencore/compactbinary.h>
-#include <zencore/compactbinaryvalidation.h>
-#include <zencore/iobuffer.h>
-#include <zencore/string.h>
-
-ZEN_THIRD_PARTY_INCLUDES_START
-#include <cpr/cpr.h>
-#include <fmt/format.h>
-ZEN_THIRD_PARTY_INCLUDES_END
-
-template<>
-struct fmt::formatter<cpr::Response>
-{
- constexpr auto parse(format_parse_context& Ctx) -> decltype(Ctx.begin()) { return Ctx.end(); }
-
- template<typename FormatContext>
- auto format(const cpr::Response& Response, FormatContext& Ctx) -> decltype(Ctx.out())
- {
- using namespace std::literals;
-
- if (Response.status_code == 200 || Response.status_code == 201)
- {
- return fmt::format_to(Ctx.out(),
- "Url: {}, Status: {}, Bytes: {}/{} (Up/Down), Elapsed: {}s",
- Response.url.str(),
- Response.status_code,
- Response.uploaded_bytes,
- Response.downloaded_bytes,
- Response.elapsed);
- }
- else
- {
- const auto It = Response.header.find("Content-Type");
- const std::string_view ContentType = It != Response.header.end() ? It->second : "<None>"sv;
-
- if (ContentType == "application/x-ue-cb"sv)
- {
- zen::IoBuffer Body(zen::IoBuffer::Wrap, Response.text.data(), Response.text.size());
- zen::CbObjectView Obj(Body.Data());
- zen::ExtendableStringBuilder<256> Sb;
- std::string_view Json = Obj.ToJson(Sb).ToView();
-
- return fmt::format_to(Ctx.out(),
- "Url: {}, Status: {}, Bytes: {}/{} (Up/Down), Elapsed: {}s, Response: '{}', Reason: '{}'",
- Response.url.str(),
- Response.status_code,
- Response.uploaded_bytes,
- Response.downloaded_bytes,
- Response.elapsed,
- Json,
- Response.reason);
- }
- else
- {
- return fmt::format_to(Ctx.out(),
- "Url: {}, Status: {}, Bytes: {}/{} (Up/Down), Elapsed: {}s, Reponse: '{}', Reason: '{}'",
- Response.url.str(),
- Response.status_code,
- Response.uploaded_bytes,
- Response.downloaded_bytes,
- Response.elapsed,
- Response.text,
- Response.reason);
- }
- }
- }
-};
diff --git a/src/zenserver/cidstore.cpp b/src/zenserver/httpcidstore.cpp
index bce4f1dfb..233a45edb 100644
--- a/src/zenserver/cidstore.cpp
+++ b/src/zenserver/httpcidstore.cpp
@@ -1,6 +1,6 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include "cidstore.h"
+#include "httpcidstore.h"
#include <zencore/compress.h>
#include <zencore/fmtutils.h>
diff --git a/src/zenserver/cidstore.h b/src/zenserver/httpcidstore.h
index 8e7832b35..8e7832b35 100644
--- a/src/zenserver/cidstore.h
+++ b/src/zenserver/httpcidstore.h
diff --git a/src/zenserver/monitoring/httpstats.cpp b/src/zenserver/monitoring/httpstats.cpp
deleted file mode 100644
index 4d985f8c2..000000000
--- a/src/zenserver/monitoring/httpstats.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "httpstats.h"
-
-namespace zen {
-
-HttpStatsService::HttpStatsService() : m_Log(logging::Get("stats"))
-{
-}
-
-HttpStatsService::~HttpStatsService()
-{
-}
-
-const char*
-HttpStatsService::BaseUri() const
-{
- return "/stats/";
-}
-
-void
-HttpStatsService::RegisterHandler(std::string_view Id, IHttpStatsProvider& Provider)
-{
- RwLock::ExclusiveLockScope _(m_Lock);
- m_Providers.insert_or_assign(std::string(Id), &Provider);
-}
-
-void
-HttpStatsService::UnregisterHandler(std::string_view Id, IHttpStatsProvider& Provider)
-{
- ZEN_UNUSED(Provider);
-
- RwLock::ExclusiveLockScope _(m_Lock);
- m_Providers.erase(std::string(Id));
-}
-
-void
-HttpStatsService::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->HandleStatsRequest(Request);
- }
- }
-
- [[fallthrough]];
- default:
- return;
- }
-}
-
-} // namespace zen
diff --git a/src/zenserver/monitoring/httpstats.h b/src/zenserver/monitoring/httpstats.h
deleted file mode 100644
index 732815a9a..000000000
--- a/src/zenserver/monitoring/httpstats.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#pragma once
-
-#include <zencore/logging.h>
-#include <zenhttp/httpserver.h>
-
-#include <map>
-
-namespace zen {
-
-struct IHttpStatsProvider
-{
- virtual void HandleStatsRequest(HttpServerRequest& Request) = 0;
-};
-
-class HttpStatsService : public HttpService
-{
-public:
- HttpStatsService();
- ~HttpStatsService();
-
- virtual const char* BaseUri() const override;
- virtual void HandleRequest(HttpServerRequest& Request) override;
- void RegisterHandler(std::string_view Id, IHttpStatsProvider& Provider);
- void UnregisterHandler(std::string_view Id, IHttpStatsProvider& Provider);
-
-private:
- spdlog::logger& m_Log;
- HttpRequestRouter m_Router;
-
- inline spdlog::logger& Log() { return m_Log; }
-
- RwLock m_Lock;
- std::map<std::string, IHttpStatsProvider*> m_Providers;
-};
-
-} // namespace zen \ No newline at end of file
diff --git a/src/zenserver/monitoring/httpstatus.cpp b/src/zenserver/monitoring/httpstatus.cpp
deleted file mode 100644
index 8b10601dd..000000000
--- a/src/zenserver/monitoring/httpstatus.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "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
diff --git a/src/zenserver/monitoring/httpstatus.h b/src/zenserver/monitoring/httpstatus.h
deleted file mode 100644
index b04e45324..000000000
--- a/src/zenserver/monitoring/httpstatus.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#pragma once
-
-#include <zencore/logging.h>
-#include <zenhttp/httpserver.h>
-
-#include <map>
-
-namespace zen {
-
-struct IHttpStatusProvider
-{
- virtual void HandleStatusRequest(HttpServerRequest& Request) = 0;
-};
-
-class HttpStatusService : public HttpService
-{
-public:
- HttpStatusService();
- ~HttpStatusService();
-
- virtual const char* BaseUri() const override;
- virtual void HandleRequest(HttpServerRequest& Request) override;
- void RegisterHandler(std::string_view Id, IHttpStatusProvider& Provider);
- void UnregisterHandler(std::string_view Id, IHttpStatusProvider& Provider);
-
-private:
- spdlog::logger& m_Log;
- HttpRequestRouter m_Router;
-
- RwLock m_Lock;
- std::map<std::string, IHttpStatusProvider*> m_Providers;
-
- inline spdlog::logger& Log() { return m_Log; }
-};
-
-} // namespace zen \ No newline at end of file
diff --git a/src/zenserver/projectstore/projectstore.h b/src/zenserver/projectstore/projectstore.h
index e4f664b85..be3ee7075 100644
--- a/src/zenserver/projectstore/projectstore.h
+++ b/src/zenserver/projectstore/projectstore.h
@@ -5,10 +5,9 @@
#include <zencore/uid.h>
#include <zencore/xxhash.h>
#include <zenhttp/httpserver.h>
+#include <zenhttp/httpstats.h>
#include <zenstore/gc.h>
-#include "monitoring/httpstats.h"
-
ZEN_THIRD_PARTY_INCLUDES_START
#include <tsl/robin_map.h>
ZEN_THIRD_PARTY_INCLUDES_END
diff --git a/src/zenserver/testing/httptest.cpp b/src/zenserver/testing/httptest.cpp
deleted file mode 100644
index 349a95ab3..000000000
--- a/src/zenserver/testing/httptest.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "httptest.h"
-
-#include <zencore/compactbinarybuilder.h>
-#include <zencore/compactbinarypackage.h>
-#include <zencore/timer.h>
-
-namespace zen {
-
-using namespace std::literals;
-
-HttpTestingService::HttpTestingService()
-{
- m_Router.RegisterRoute(
- "hello",
- [](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponseCode::OK); },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "hello_slow",
- [](HttpRouterRequest& Req) {
- Req.ServerRequest().WriteResponseAsync([](HttpServerRequest& Request) {
- Stopwatch Timer;
- Sleep(1000);
- Request.WriteResponse(HttpResponseCode::OK,
- HttpContentType::kText,
- fmt::format("hello, took me {}", NiceTimeSpanMs(Timer.GetElapsedTimeMs())));
- });
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "hello_veryslow",
- [](HttpRouterRequest& Req) {
- Req.ServerRequest().WriteResponseAsync([](HttpServerRequest& Request) {
- Stopwatch Timer;
- Sleep(60000);
- Request.WriteResponse(HttpResponseCode::OK,
- HttpContentType::kText,
- fmt::format("hello, took me {}", NiceTimeSpanMs(Timer.GetElapsedTimeMs())));
- });
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "hello_throw",
- [](HttpRouterRequest& Req) {
- Req.ServerRequest().WriteResponseAsync([](HttpServerRequest&) { throw std::runtime_error("intentional error"); });
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "hello_noresponse",
- [](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponseAsync([](HttpServerRequest&) {}); },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "metrics",
- [this](HttpRouterRequest& Req) {
- metrics::OperationTiming::Scope _(m_TimingStats);
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK);
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "get_metrics",
- [this](HttpRouterRequest& Req) {
- CbObjectWriter Cbo;
- EmitSnapshot("requests", m_TimingStats, Cbo);
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Cbo.Save());
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "json",
- [this](HttpRouterRequest& Req) {
- CbObjectWriter Obj;
- Obj.AddBool("ok", true);
- Obj.AddInteger("counter", ++m_Counter);
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save());
- },
- HttpVerb::kGet);
-
- m_Router.RegisterRoute(
- "echo",
- [](HttpRouterRequest& Req) {
- IoBuffer Body = Req.ServerRequest().ReadPayload();
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Body);
- },
- HttpVerb::kPost);
-
- m_Router.RegisterRoute(
- "package",
- [](HttpRouterRequest& Req) {
- CbPackage Pkg = Req.ServerRequest().ReadPayloadPackage();
- Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Pkg);
- },
- HttpVerb::kPost);
-}
-
-HttpTestingService::~HttpTestingService()
-{
-}
-
-const char*
-HttpTestingService::BaseUri() const
-{
- return "/testing/";
-}
-
-void
-HttpTestingService::HandleRequest(HttpServerRequest& Request)
-{
- m_Router.HandleRequest(Request);
-}
-
-Ref<IHttpPackageHandler>
-HttpTestingService::HandlePackageRequest(HttpServerRequest& HttpServiceRequest)
-{
- RwLock::ExclusiveLockScope _(m_RwLock);
-
- const uint32_t RequestId = HttpServiceRequest.RequestId();
-
- if (auto It = m_HandlerMap.find(RequestId); It != m_HandlerMap.end())
- {
- Ref<HttpTestingService::PackageHandler> Handler = std::move(It->second);
-
- m_HandlerMap.erase(It);
-
- return Handler;
- }
-
- auto InsertResult = m_HandlerMap.insert({RequestId, Ref<PackageHandler>()});
-
- _.ReleaseNow();
-
- return (InsertResult.first->second = Ref<PackageHandler>(new PackageHandler(*this, RequestId)));
-}
-
-void
-HttpTestingService::RegisterHandlers(WebSocketServer& Server)
-{
- Server.RegisterRequestHandler("SayHello"sv, *this);
-}
-
-bool
-HttpTestingService::HandleRequest(const WebSocketMessage& RequestMsg)
-{
- CbObjectView Request = RequestMsg.Body().GetObject();
-
- std::string_view Method = Request["Method"].AsString();
-
- if (Method != "SayHello"sv)
- {
- return false;
- }
-
- CbObjectWriter Response;
- Response.AddString("Result"sv, "Hello Friend!!");
-
- WebSocketMessage ResponseMsg;
- ResponseMsg.SetMessageType(WebSocketMessageType::kResponse);
- ResponseMsg.SetCorrelationId(RequestMsg.CorrelationId());
- ResponseMsg.SetSocketId(RequestMsg.SocketId());
- ResponseMsg.SetBody(Response.Save());
-
- SocketServer().SendResponse(std::move(ResponseMsg));
-
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-HttpTestingService::PackageHandler::PackageHandler(HttpTestingService& Svc, uint32_t RequestId) : m_Svc(Svc), m_RequestId(RequestId)
-{
-}
-
-HttpTestingService::PackageHandler::~PackageHandler()
-{
-}
-
-void
-HttpTestingService::PackageHandler::FilterOffer(std::vector<IoHash>& OfferCids)
-{
- ZEN_UNUSED(OfferCids);
- // No-op
- return;
-}
-void
-HttpTestingService::PackageHandler::OnRequestBegin()
-{
-}
-
-void
-HttpTestingService::PackageHandler::OnRequestComplete()
-{
-}
-
-IoBuffer
-HttpTestingService::PackageHandler::CreateTarget(const IoHash& Cid, uint64_t StorageSize)
-{
- ZEN_UNUSED(Cid);
- return IoBuffer{StorageSize};
-}
-
-} // namespace zen
diff --git a/src/zenserver/testing/httptest.h b/src/zenserver/testing/httptest.h
deleted file mode 100644
index 57d2d63f3..000000000
--- a/src/zenserver/testing/httptest.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#pragma once
-
-#include <zencore/logging.h>
-#include <zencore/stats.h>
-#include <zenhttp/httpserver.h>
-#include <zenhttp/websocket.h>
-
-#include <atomic>
-
-namespace zen {
-
-/**
- * Test service to facilitate testing the HTTP framework and client interactions
- */
-class HttpTestingService : public HttpService, public WebSocketService
-{
-public:
- HttpTestingService();
- ~HttpTestingService();
-
- virtual const char* BaseUri() const override;
- virtual void HandleRequest(HttpServerRequest& Request) override;
- virtual Ref<IHttpPackageHandler> HandlePackageRequest(HttpServerRequest& HttpServiceRequest) override;
-
- class PackageHandler : public IHttpPackageHandler
- {
- public:
- PackageHandler(HttpTestingService& Svc, uint32_t RequestId);
- ~PackageHandler();
-
- virtual void FilterOffer(std::vector<IoHash>& OfferCids) override;
- virtual void OnRequestBegin() override;
- virtual IoBuffer CreateTarget(const IoHash& Cid, uint64_t StorageSize) override;
- virtual void OnRequestComplete() override;
-
- private:
- HttpTestingService& m_Svc;
- uint32_t m_RequestId;
- };
-
-private:
- virtual void RegisterHandlers(WebSocketServer& Server) override;
- virtual bool HandleRequest(const WebSocketMessage& Request) override;
-
- HttpRequestRouter m_Router;
- std::atomic<uint32_t> m_Counter{0};
- metrics::OperationTiming m_TimingStats;
-
- RwLock m_RwLock;
- std::unordered_map<uint32_t, Ref<PackageHandler>> m_HandlerMap;
-};
-
-} // namespace zen
diff --git a/src/zenserver/upstream/jupiter.cpp b/src/zenserver/upstream/jupiter.cpp
index dbb185bec..bd075a436 100644
--- a/src/zenserver/upstream/jupiter.cpp
+++ b/src/zenserver/upstream/jupiter.cpp
@@ -2,7 +2,6 @@
#include "jupiter.h"
-#include "diag/formatters.h"
#include "diag/logging.h"
#include <zencore/compactbinary.h>
@@ -12,6 +11,7 @@
#include <zencore/string.h>
#include <zencore/thread.h>
#include <zencore/trace.h>
+#include <zenhttp/formatters.h>
ZEN_THIRD_PARTY_INCLUDES_START
#include <cpr/cpr.h>
diff --git a/src/zenserver/upstream/zen.cpp b/src/zenserver/upstream/zen.cpp
index 9e1212834..8ae33597a 100644
--- a/src/zenserver/upstream/zen.cpp
+++ b/src/zenserver/upstream/zen.cpp
@@ -8,11 +8,11 @@
#include <zencore/fmtutils.h>
#include <zencore/session.h>
#include <zencore/stream.h>
+#include <zenhttp/formatters.h>
#include <zenhttp/httpcommon.h>
#include <zenhttp/httpshared.h>
#include "cache/structuredcachestore.h"
-#include "diag/formatters.h"
#include "diag/logging.h"
ZEN_THIRD_PARTY_INCLUDES_START
diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp
index 3b81a3ada..9c79f9997 100644
--- a/src/zenserver/zenserver.cpp
+++ b/src/zenserver/zenserver.cpp
@@ -98,22 +98,22 @@ ZEN_THIRD_PARTY_INCLUDES_END
// Services
//
+#include <zenhttp/auth/authmgr.h>
+#include <zenhttp/auth/authservice.h>
+#include <zenhttp/diagsvcs.h>
+#include <zenhttp/httpstats.h>
+#include <zenhttp/httpstatus.h>
+#include <zenhttp/httptest.h>
+#include <zenstore/gc.h>
#include "admin/admin.h"
#include "cache/structuredcache.h"
#include "cache/structuredcachestore.h"
-#include "cidstore.h"
#include "compute/function.h"
-#include "diag/diagsvcs.h"
#include "frontend/frontend.h"
-#include "monitoring/httpstats.h"
-#include "monitoring/httpstatus.h"
+#include "httpcidstore.h"
#include "objectstore/objectstore.h"
#include "projectstore/projectstore.h"
-#include "testing/httptest.h"
#include "upstream/upstream.h"
-#include "zenhttp/auth/authmgr.h"
-#include "zenhttp/auth/authservice.h"
-#include "zenstore/gc.h"
#define ZEN_APP_NAME "Zen store"