aboutsummaryrefslogtreecommitdiff
path: root/zenserver/projectstore.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2022-03-23 14:01:34 +0100
committerPer Larsson <[email protected]>2022-03-23 14:01:34 +0100
commit0745c75bd8e49757fd003c076f2ae98dc2ee5439 (patch)
tree9118c1bbcaf3d8936b054ec2caff8f12bf42b4a9 /zenserver/projectstore.cpp
parentHelper function for sending compact binary array HTTP response. (diff)
downloadzen-0745c75bd8e49757fd003c076f2ae98dc2ee5439.tar.xz
zen-0745c75bd8e49757fd003c076f2ae98dc2ee5439.zip
Added route '/prj/list' for retrieving project info.
Diffstat (limited to 'zenserver/projectstore.cpp')
-rw-r--r--zenserver/projectstore.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp
index 113a7cec4..79ebc0a65 100644
--- a/zenserver/projectstore.cpp
+++ b/zenserver/projectstore.cpp
@@ -933,6 +933,17 @@ ProjectStore::DiscoverProjects()
}
void
+ProjectStore::IterateProjects(std::function<void(Project& Prj)>&& Fn)
+{
+ RwLock::SharedLockScope _(m_ProjectsLock);
+
+ for (auto& Kv : m_Projects)
+ {
+ Fn(Kv.second);
+ }
+}
+
+void
ProjectStore::Flush()
{
// TODO
@@ -1072,6 +1083,27 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects)
m_Router.AddPattern("hash", "([[:xdigit:]]{40})");
m_Router.RegisterRoute(
+ "/list",
+ [this](HttpRouterRequest& Req) {
+ m_ProjectStore->DiscoverProjects();
+
+ CbWriter Response;
+ Response.BeginArray();
+ m_ProjectStore->IterateProjects([&Response](ProjectStore::Project& Prj) {
+ Response.BeginObject();
+ Response << "Id"sv << Prj.Identifier;
+ Response << "RootDir"sv << Prj.RootDir.string();
+ Response << "ProjectRootDir"sv << Prj.ProjectRootDir;
+ Response << "EngineRootDir"sv << Prj.EngineRootDir;
+ Response.EndObject();
+ });
+ Response.EndArray();
+
+ Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response.Save().AsArray());
+ },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
"{project}/oplog/{log}/batch",
[this](HttpRouterRequest& Req) {
HttpServerRequest& HttpReq = Req.ServerRequest();