diff options
Diffstat (limited to 'src/zenserver/storage/projectstore/httpprojectstore.h')
| -rw-r--r-- | src/zenserver/storage/projectstore/httpprojectstore.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/zenserver/storage/projectstore/httpprojectstore.h b/src/zenserver/storage/projectstore/httpprojectstore.h new file mode 100644 index 000000000..f0a0bcfa1 --- /dev/null +++ b/src/zenserver/storage/projectstore/httpprojectstore.h @@ -0,0 +1,111 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include <zencore/stats.h> +#include <zenhttp/httpserver.h> +#include <zenhttp/httpstats.h> +#include <zenhttp/httpstatus.h> +#include <zenstore/cidstore.h> + +namespace zen { + +class AuthMgr; +class JobQueue; +class OpenProcessCache; +class ProjectStore; + +////////////////////////////////////////////////////////////////////////// +// +// {project} a project identifier +// {target} a variation of the project, typically a build target +// {lsn} oplog entry sequence number +// +// /prj/{project} +// /prj/{project}/oplog/{target} +// /prj/{project}/oplog/{target}/{lsn} +// +// oplog entry +// +// id: {id} +// key: {} +// meta: {} +// data: [] +// refs: +// + +class HttpProjectService : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider +{ +public: + HttpProjectService(CidStore& Store, + ProjectStore* InProjectStore, + HttpStatusService& StatusService, + HttpStatsService& StatsService, + AuthMgr& AuthMgr, + OpenProcessCache& InOpenProcessCache, + JobQueue& InJobQueue); + ~HttpProjectService(); + + virtual const char* BaseUri() const override; + virtual void HandleRequest(HttpServerRequest& Request) override; + + virtual void HandleStatsRequest(HttpServerRequest& Request) override; + virtual void HandleStatusRequest(HttpServerRequest& Request) override; + +private: + struct ProjectStats + { + std::atomic_uint64_t ProjectReadCount{}; + std::atomic_uint64_t ProjectWriteCount{}; + std::atomic_uint64_t ProjectDeleteCount{}; + std::atomic_uint64_t OpLogReadCount{}; + std::atomic_uint64_t OpLogWriteCount{}; + std::atomic_uint64_t OpLogDeleteCount{}; + std::atomic_uint64_t OpHitCount{}; + std::atomic_uint64_t OpMissCount{}; + std::atomic_uint64_t OpWriteCount{}; + std::atomic_uint64_t ChunkHitCount{}; + std::atomic_uint64_t ChunkMissCount{}; + std::atomic_uint64_t ChunkWriteCount{}; + std::atomic_uint64_t RequestCount{}; + std::atomic_uint64_t BadRequestCount{}; + }; + + void HandleProjectListRequest(HttpRouterRequest& Req); + void HandleChunkBatchRequest(HttpRouterRequest& Req); + void HandleFilesRequest(HttpRouterRequest& Req); + void HandleChunkInfosRequest(HttpRouterRequest& Req); + void HandleChunkInfoRequest(HttpRouterRequest& Req); + void HandleChunkByIdRequest(HttpRouterRequest& Req); + void HandleChunkByCidRequest(HttpRouterRequest& Req); + void HandleOplogOpPrepRequest(HttpRouterRequest& Req); + void HandleOplogOpNewRequest(HttpRouterRequest& Req); + void HandleOplogValidateRequest(HttpRouterRequest& Req); + void HandleOpLogOpRequest(HttpRouterRequest& Req); + void HandleOpLogRequest(HttpRouterRequest& Req); + void HandleOpLogEntriesRequest(HttpRouterRequest& Req); + void HandleProjectRequest(HttpRouterRequest& Req); + void HandleOplogSaveRequest(HttpRouterRequest& Req); + void HandleOplogLoadRequest(HttpRouterRequest& Req); + void HandleRpcRequest(HttpRouterRequest& Req); + void HandleDetailsRequest(HttpRouterRequest& Req); + void HandleProjectDetailsRequest(HttpRouterRequest& Req); + void HandleOplogDetailsRequest(HttpRouterRequest& Req); + void HandleOplogOpDetailsRequest(HttpRouterRequest& Req); + + inline LoggerRef Log() { return m_Log; } + + LoggerRef m_Log; + CidStore& m_CidStore; + HttpRequestRouter m_Router; + Ref<ProjectStore> m_ProjectStore; + HttpStatusService& m_StatusService; + HttpStatsService& m_StatsService; + AuthMgr& m_AuthMgr; + OpenProcessCache& m_OpenProcessCache; + JobQueue& m_JobQueue; + ProjectStats m_ProjectStats; + metrics::OperationTiming m_HttpRequests; +}; + +} // namespace zen |