aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/storage/projectstore/httpprojectstore.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/storage/projectstore/httpprojectstore.h')
-rw-r--r--src/zenserver/storage/projectstore/httpprojectstore.h111
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