// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include #include #include #include #include namespace zen { class BuildStore; class HttpBuildStoreService final : public zen::HttpService, public IHttpStatusProvider, public IHttpStatsProvider { public: HttpBuildStoreService(HttpStatusService& StatusService, HttpStatsService& StatsService, BuildStore& Store); virtual ~HttpBuildStoreService(); virtual const char* BaseUri() const override; virtual void HandleRequest(zen::HttpServerRequest& Request) override; virtual void HandleStatsRequest(HttpServerRequest& Request) override; virtual void HandleStatusRequest(HttpServerRequest& Request) override; private: struct BuildStoreStats { std::atomic_uint64_t BlobReadCount{}; std::atomic_uint64_t BlobHitCount{}; std::atomic_uint64_t BlobWriteCount{}; std::atomic_uint64_t BlobMetaReadCount{}; std::atomic_uint64_t BlobMetaHitCount{}; std::atomic_uint64_t BlobMetaWriteCount{}; std::atomic_uint64_t BlobExistsCount{}; std::atomic_uint64_t BlobExistsBodyHitCount{}; std::atomic_uint64_t BlobExistsMetaHitCount{}; std::atomic_uint64_t RequestCount{}; std::atomic_uint64_t BadRequestCount{}; }; void Initialize(); inline LoggerRef Log() { return m_Log; } LoggerRef m_Log; void PutBlobRequest(HttpRouterRequest& Req); void GetBlobRequest(HttpRouterRequest& Req); void PutMetadataRequest(HttpRouterRequest& Req); void GetMetadatasRequest(HttpRouterRequest& Req); void BlobsExistsRequest(HttpRouterRequest& Req); HttpRequestRouter m_Router; HttpStatusService& m_StatusService; HttpStatsService& m_StatsService; BuildStore& m_BuildStore; BuildStoreStats m_BuildStoreStats; metrics::OperationTiming m_HttpRequests; }; } // namespace zen