diff options
| author | Dan Engelbrecht <[email protected]> | 2023-08-14 13:01:55 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-14 13:01:55 +0200 |
| commit | 126cd15dbca6e322360ece085563deba449926c6 (patch) | |
| tree | 22d132c528b80bd5c8e61c3f75eb7e8fe6e5a4ac /src/zenserver/projectstore/projectstore.cpp | |
| parent | update vcpkg dependencies (#356) (diff) | |
| download | zen-126cd15dbca6e322360ece085563deba449926c6.tar.xz zen-126cd15dbca6e322360ece085563deba449926c6.zip | |
project store stats (#357)
* add basic stats for project store
* stats for BadRequest in ProjectStore::Rpc
* changelog
* group stats
fix ChunkWriteCount when accepting ops
Diffstat (limited to 'src/zenserver/projectstore/projectstore.cpp')
| -rw-r--r-- | src/zenserver/projectstore/projectstore.cpp | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp index 3a91d7f0c..40fd3d30b 100644 --- a/src/zenserver/projectstore/projectstore.cpp +++ b/src/zenserver/projectstore/projectstore.cpp @@ -2323,7 +2323,7 @@ ProjectStore::WriteBlock(const std::string_view ProjectId, const std::string_vie return {HttpResponseCode::OK, {}}; } -void +bool ProjectStore::Rpc(HttpServerRequest& HttpReq, const std::string_view ProjectId, const std::string_view OplogId, @@ -2346,9 +2346,10 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, Cb = LoadCompactBinaryFromJson(JsonText).AsObject(); if (!Cb) { - return HttpReq.WriteResponse(HttpResponseCode::BadRequest, - HttpContentType::kText, - "Content format not supported, expected JSON format"); + HttpReq.WriteResponse(HttpResponseCode::BadRequest, + HttpContentType::kText, + "Content format not supported, expected JSON format"); + return false; } } break; @@ -2356,9 +2357,10 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, Cb = LoadCompactBinaryObject(Payload); if (!Cb) { - return HttpReq.WriteResponse(HttpResponseCode::BadRequest, - HttpContentType::kText, - "Content format not supported, expected compact binary format"); + HttpReq.WriteResponse(HttpResponseCode::BadRequest, + HttpContentType::kText, + "Content format not supported, expected compact binary format"); + return false; } break; case HttpContentType::kCbPackage: @@ -2366,30 +2368,34 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, Cb = Package.GetObject(); if (!Cb) { - return HttpReq.WriteResponse(HttpResponseCode::BadRequest, - HttpContentType::kText, - "Content format not supported, expected package message format"); + HttpReq.WriteResponse(HttpResponseCode::BadRequest, + HttpContentType::kText, + "Content format not supported, expected package message format"); + return false; } break; default: - return HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Invalid request content type"); + HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Invalid request content type"); + return false; } Ref<ProjectStore::Project> Project = OpenProject(ProjectId); if (!Project) { - return HttpReq.WriteResponse(HttpResponseCode::NotFound, - HttpContentType::kText, - fmt::format("Rpc oplog request for unknown project '{}'", ProjectId)); + HttpReq.WriteResponse(HttpResponseCode::NotFound, + HttpContentType::kText, + fmt::format("Rpc oplog request for unknown project '{}'", ProjectId)); + return true; } Project->TouchProject(); ProjectStore::Oplog* Oplog = Project->OpenOplog(OplogId); if (!Oplog) { - return HttpReq.WriteResponse(HttpResponseCode::NotFound, - HttpContentType::kText, - fmt::format("Rpc oplog request for unknown oplog '{}/{}'", ProjectId, OplogId)); + HttpReq.WriteResponse(HttpResponseCode::NotFound, + HttpContentType::kText, + fmt::format("Rpc oplog request for unknown oplog '{}/{}'", ProjectId, OplogId)); + return true; } Project->TouchOplog(OplogId); @@ -2399,23 +2405,28 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, { if (!AreDiskWritesAllowed()) { - return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + return true; } std::pair<HttpResponseCode, std::string> Result = Import(*Project.Get(), *Oplog, Cb["params"sv].AsObjectView(), AuthManager); if (Result.second.empty()) { - return HttpReq.WriteResponse(Result.first); + HttpReq.WriteResponse(Result.first); + return Result.first != HttpResponseCode::BadRequest; } - return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); + HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); + return true; } else if (Method == "export"sv) { std::pair<HttpResponseCode, std::string> Result = Export(*Project.Get(), *Oplog, Cb["params"sv].AsObjectView(), AuthManager); if (Result.second.empty()) { - return HttpReq.WriteResponse(Result.first); + HttpReq.WriteResponse(Result.first); + return Result.first != HttpResponseCode::BadRequest; } - return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); + HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); + return true; } else if (Method == "getchunks"sv) { @@ -2439,13 +2450,15 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, ResponsePackage.SetObject(ResponseWriter.Save()); } CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(ResponsePackage, FormatFlags::kDefault); - return HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer); + HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer); + return true; } else if (Method == "putchunks"sv) { if (!AreDiskWritesAllowed()) { - return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + return true; } std::span<const CbAttachment> Attachments = Package.GetAttachments(); for (const CbAttachment& Attachment : Attachments) @@ -2454,13 +2467,15 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, CompressedBuffer Compressed = Attachment.AsCompressedBinary(); m_CidStore.AddChunk(Compressed.GetCompressed().Flatten().AsIoBuffer(), RawHash, CidStore::InsertMode::kCopyOnly); } - return HttpReq.WriteResponse(HttpResponseCode::OK); + HttpReq.WriteResponse(HttpResponseCode::OK); + return true; } else if (Method == "snapshot"sv) { if (!AreDiskWritesAllowed()) { - return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); + return true; } // Snapshot all referenced files. This brings the content of all @@ -2614,9 +2629,11 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, ZEN_INFO("rewrote {} oplog entries (out of {})", NewOps.size(), OpCount); - return HttpReq.WriteResponse(HttpResponseCode::OK, ResponseObj.Save()); + HttpReq.WriteResponse(HttpResponseCode::OK, ResponseObj.Save()); + return true; } - return HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, fmt::format("Unknown rpc method '{}'", Method)); + HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, fmt::format("Unknown rpc method '{}'", Method)); + return true; } std::pair<HttpResponseCode, std::string> |