From 2b0bc6def92b846effbed29a34f284a3ec2ac01a Mon Sep 17 00:00:00 2001 From: zousar <2936246+zousar@users.noreply.github.com> Date: Fri, 1 Dec 2023 14:49:10 -0700 Subject: Add endpoint for all chunk infos Add endpoint for querying all chunk infos in an oplog. --- src/zenserver/projectstore/httpprojectstore.cpp | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/zenserver/projectstore/httpprojectstore.cpp') diff --git a/src/zenserver/projectstore/httpprojectstore.cpp b/src/zenserver/projectstore/httpprojectstore.cpp index 261485834..3994a9a46 100644 --- a/src/zenserver/projectstore/httpprojectstore.cpp +++ b/src/zenserver/projectstore/httpprojectstore.cpp @@ -275,6 +275,11 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects, [this](HttpRouterRequest& Req) { HandleFilesRequest(Req); }, HttpVerb::kGet); + m_Router.RegisterRoute( + "{project}/oplog/{log}/chunks", + [this](HttpRouterRequest& Req) { HandleChunksRequest(Req); }, + HttpVerb::kGet); + m_Router.RegisterRoute( "{project}/oplog/{log}/{chunk}/info", [this](HttpRouterRequest& Req) { HandleChunkInfoRequest(Req); }, @@ -642,6 +647,41 @@ HttpProjectService::HandleFilesRequest(HttpRouterRequest& Req) return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); } +void +HttpProjectService::HandleChunksRequest(HttpRouterRequest& Req) +{ + ZEN_TRACE_CPU("ProjectService::Chunks"); + + HttpServerRequest& HttpReq = Req.ServerRequest(); + + const auto& ProjectId = Req.GetCapture(1); + const auto& OplogId = Req.GetCapture(2); + + CbObject ResponsePayload; + std::pair Result = m_ProjectStore->GetProjectChunks(ProjectId, OplogId, ResponsePayload); + if (Result.first == HttpResponseCode::OK) + { + return HttpReq.WriteResponse(HttpResponseCode::OK, ResponsePayload); + } + else + { + if (Result.first == HttpResponseCode::BadRequest) + { + m_ProjectStats.BadRequestCount++; + } + ZEN_DEBUG("Request {}: '{}' failed with {}. Reason: `{}`", + ToString(HttpReq.RequestVerb()), + HttpReq.QueryString(), + static_cast(Result.first), + Result.second); + } + if (Result.second.empty()) + { + return HttpReq.WriteResponse(Result.first); + } + return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); +} + void HttpProjectService::HandleChunkInfoRequest(HttpRouterRequest& Req) { -- cgit v1.2.3