// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include #include #include #include #include namespace zen { class HttpRouterRequest; class HttpStatsService; struct ObjectStoreConfig { struct BucketConfig { std::string Name; std::filesystem::path Directory; }; std::filesystem::path RootDirectory; std::vector Buckets; }; class HttpObjectStoreService final : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider { public: HttpObjectStoreService(HttpStatsService& StatsService, HttpStatusService& StatusService, ObjectStoreConfig Cfg); virtual ~HttpObjectStoreService(); virtual const char* BaseUri() const override; virtual void HandleRequest(HttpServerRequest& Request) override; virtual void HandleStatusRequest(HttpServerRequest& Request) override; virtual void HandleStatsRequest(HttpServerRequest& Request) override; virtual CbObject CollectStats() override; virtual uint64_t GetActivityCounter() override; private: void Initialize(); std::filesystem::path GetBucketDirectory(std::string_view BucketName); void ListBuckets(HttpRouterRequest& Request); void CreateBucket(HttpRouterRequest& Request); void ListBucket(HttpRouterRequest& Request, const std::string_view Path); void DeleteBucket(HttpRouterRequest& Request); void GetObject(HttpRouterRequest& Request, const std::string_view Path); void PutObject(HttpRouterRequest& Request); HttpStatsService& m_StatsService; HttpStatusService& m_StatusService; ObjectStoreConfig m_Cfg; std::mutex m_BucketsMutex; HttpRequestRouter m_Router; std::atomic_uint64_t m_TotalBytesServed{0}; metrics::OperationTiming m_HttpRequests; }; } // namespace zen