diff options
| author | Dan Engelbrecht <[email protected]> | 2024-05-29 08:54:01 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-05-29 08:54:01 +0200 |
| commit | 3d3a39d69b39d5202960ada6d3512786fa4a8c83 (patch) | |
| tree | f981eaf60b278edc84d7bd959153981fc2934b22 /src/zen/zen.cpp | |
| parent | 5.5.2 (diff) | |
| download | archived-zen-3d3a39d69b39d5202960ada6d3512786fa4a8c83.tar.xz archived-zen-3d3a39d69b39d5202960ada6d3512786fa4a8c83.zip | |
workspace shares (#84)
Feature: New 'workspaces' service which allows a user to share a local folder via zenserver. A workspace can have mulitple workspace shares and they provie an HTTP API that is compatible with the project oplog HTTP API. Workspaces and shares are preserved between runs. Workspaces feature is disabled by default - enable with --workspaces-enabled option when launching zenserver.
Diffstat (limited to 'src/zen/zen.cpp')
| -rw-r--r-- | src/zen/zen.cpp | 128 |
1 files changed, 83 insertions, 45 deletions
diff --git a/src/zen/zen.cpp b/src/zen/zen.cpp index 4881d44ae..6320fcc2f 100644 --- a/src/zen/zen.cpp +++ b/src/zen/zen.cpp @@ -22,6 +22,7 @@ #include "cmds/up_cmd.h" #include "cmds/version_cmd.h" #include "cmds/vfs_cmd.h" +#include "cmds/workspaces_cmd.h" #include <zencore/filesystem.h> #include <zencore/logging.h> @@ -65,7 +66,12 @@ ZenCmdBase::CommandCategory() const bool ZenCmdBase::ParseOptions(int argc, char** argv) { - cxxopts::Options& CmdOptions = Options(); + return ParseOptions(Options(), argc, argv); +} + +bool +ZenCmdBase::ParseOptions(cxxopts::Options& CmdOptions, int argc, char** argv) +{ cxxopts::ParseResult Result; try @@ -106,6 +112,34 @@ ZenCmdBase::ParseOptions(int argc, char** argv) return true; } +// Get the number of args including the sub command +// Build an array for sub command to parse +int +ZenCmdBase::GetSubCommand(cxxopts::Options&, + int argc, + char** argv, + std::span<cxxopts::Options*> SubOptions, + cxxopts::Options*& OutSubOption, + std::vector<char*>& OutSubCommandArguments) +{ + for (int I = 1; I < argc; ++I) + { + if (auto It = std::find_if(SubOptions.begin(), + SubOptions.end(), + [&](cxxopts::Options* SubOption) { return SubOption->program() == argv[I]; }); + It != SubOptions.end()) + { + OutSubOption = (*It); + OutSubCommandArguments.push_back(argv[0]); + std::copy(&argv[I + 1], &argv[argc], std::back_inserter(OutSubCommandArguments)); + return I + 1; + } + } + // No Sub command found + OutSubOption = nullptr; + return argc; +} + std::string ZenCmdBase::FormatHttpResponse(const cpr::Response& Response) { @@ -297,6 +331,8 @@ main(int argc, char** argv) UpCommand UpCmd; VersionCommand VersionCmd; VfsCommand VfsCmd; + WorkspaceCommand WorkspaceCmd; + WorkspaceShareCommand WorkspaceShareCmd; const struct CommandInfo { @@ -305,50 +341,52 @@ main(int argc, char** argv) const char* CmdSummary; } Commands[] = { // clang-format off - {"attach", &AttachCmd, "Add a sponsor process to a running zen service"}, - {"bench", &BenchCmd, "Utility command for benchmarking"}, - {"cache-details", &CacheDetailsCmd, "Details on cache"}, - {"cache-info", &CacheInfoCmd, "Info on cache, namespace or bucket"}, - {"cache-stats", &CacheStatsCmd, "Stats on cache"}, - {"copy", &CopyCmd, "Copy file(s)"}, - {"copy-state", &CopyStateCmd, "Copy zen server disk state"}, - {"dedup", &DedupCmd, "Dedup files"}, - {"down", &DownCmd, "Bring zen server down"}, - {"drop", &DropCmd, "Drop cache namespace or bucket"}, - {"gc-status", &GcStatusCmd, "Garbage collect zen storage status check"}, - {"gc-stop", &GcStopCmd, "Request cancel of running garbage collection in zen storage"}, - {"gc", &GcCmd, "Garbage collect zen storage"}, - {"info", &InfoCmd, "Show high level Zen server information"}, - {"jobs", &JobCmd, "Show/cancel zen background jobs"}, - {"logs", &LoggingCmd, "Show/control zen logging"}, - {"oplog-create", &CreateOplogCmd, "Create a project oplog"}, - {"oplog-delete", &DeleteOplogCmd, "Delete a project oplog"}, - {"oplog-export", &ExportOplogCmd, "Export project store oplog"}, - {"oplog-import", &ImportOplogCmd, "Import project store oplog"}, - {"oplog-mirror", &OplogMirrorCmd, "Mirror project store oplog to file system"}, - {"oplog-snapshot", &SnapshotOplogCmd, "Snapshot project store oplog"}, - {"print", &PrintCmd, "Print compact binary object"}, - {"printpackage", &PrintPkgCmd, "Print compact binary package"}, - {"project-create", &CreateProjectCmd, "Create a project"}, - {"project-delete", &DeleteProjectCmd, "Delete a project"}, - {"project-details", &ProjectDetailsCmd, "Details on project store"}, - {"project-drop", &ProjectDropCmd, "Drop project or project oplog"}, - {"project-info", &ProjectInfoCmd, "Info on project or project oplog"}, - {"project-stats", &ProjectStatsCmd, "Stats on project store"}, - {"ps", &PsCmd, "Enumerate running zen server instances"}, - {"rpc-record-replay", &RpcReplayCmd, "Replays a previously recorded session of rpc requests"}, - {"rpc-record-start", &RpcStartRecordingCmd, "Starts recording of cache rpc requests on a host"}, - {"rpc-record-stop", &RpcStopRecordingCmd, "Stops recording of cache rpc requests on a host"}, - {"run", &RunCmd, "Run command with special options"}, - {"scrub", &ScrubCmd, "Scrub zen storage (verify data integrity)"}, - {"serve", &ServeCmd, "Serve files from a directory"}, - {"status", &StatusCmd, "Show zen status"}, - {"top", &TopCmd, "Monitor zen server activity"}, - {"trace", &TraceCmd, "Control zen realtime tracing"}, - {"up", &UpCmd, "Bring zen server up"}, - {"version", &VersionCmd, "Get zen server version"}, - {"vfs", &VfsCmd, "Manage virtual file system"}, - {"flush", &FlushCmd, "Flush storage"}, + {"attach", &AttachCmd, "Add a sponsor process to a running zen service"}, + {"bench", &BenchCmd, "Utility command for benchmarking"}, + {"cache-details", &CacheDetailsCmd, "Details on cache"}, + {"cache-info", &CacheInfoCmd, "Info on cache, namespace or bucket"}, + {"cache-stats", &CacheStatsCmd, "Stats on cache"}, + {"copy", &CopyCmd, "Copy file(s)"}, + {"copy-state", &CopyStateCmd, "Copy zen server disk state"}, + {"dedup", &DedupCmd, "Dedup files"}, + {"down", &DownCmd, "Bring zen server down"}, + {"drop", &DropCmd, "Drop cache namespace or bucket"}, + {"gc-status", &GcStatusCmd, "Garbage collect zen storage status check"}, + {"gc-stop", &GcStopCmd, "Request cancel of running garbage collection in zen storage"}, + {"gc", &GcCmd, "Garbage collect zen storage"}, + {"info", &InfoCmd, "Show high level Zen server information"}, + {"jobs", &JobCmd, "Show/cancel zen background jobs"}, + {"logs", &LoggingCmd, "Show/control zen logging"}, + {"oplog-create", &CreateOplogCmd, "Create a project oplog"}, + {"oplog-delete", &DeleteOplogCmd, "Delete a project oplog"}, + {"oplog-export", &ExportOplogCmd, "Export project store oplog"}, + {"oplog-import", &ImportOplogCmd, "Import project store oplog"}, + {"oplog-mirror", &OplogMirrorCmd, "Mirror project store oplog to file system"}, + {"oplog-snapshot", &SnapshotOplogCmd, "Snapshot project store oplog"}, + {"print", &PrintCmd, "Print compact binary object"}, + {"printpackage", &PrintPkgCmd, "Print compact binary package"}, + {"project-create", &CreateProjectCmd, "Create a project"}, + {"project-delete", &DeleteProjectCmd, "Delete a project"}, + {"project-details", &ProjectDetailsCmd, "Details on project store"}, + {"project-drop", &ProjectDropCmd, "Drop project or project oplog"}, + {"project-info", &ProjectInfoCmd, "Info on project or project oplog"}, + {"project-stats", &ProjectStatsCmd, "Stats on project store"}, + {"ps", &PsCmd, "Enumerate running zen server instances"}, + {"rpc-record-replay", &RpcReplayCmd, "Replays a previously recorded session of rpc requests"}, + {"rpc-record-start", &RpcStartRecordingCmd, "Starts recording of cache rpc requests on a host"}, + {"rpc-record-stop", &RpcStopRecordingCmd, "Stops recording of cache rpc requests on a host"}, + {"run", &RunCmd, "Run command with special options"}, + {"scrub", &ScrubCmd, "Scrub zen storage (verify data integrity)"}, + {"serve", &ServeCmd, "Serve files from a directory"}, + {"status", &StatusCmd, "Show zen status"}, + {"top", &TopCmd, "Monitor zen server activity"}, + {"trace", &TraceCmd, "Control zen realtime tracing"}, + {"up", &UpCmd, "Bring zen server up"}, + {"version", &VersionCmd, "Get zen server version"}, + {"vfs", &VfsCmd, "Manage virtual file system"}, + {"flush", &FlushCmd, "Flush storage"}, + {WorkspaceCommand::Name, &WorkspaceCmd, WorkspaceCommand::Description}, + {WorkspaceShareCommand::Name, &WorkspaceShareCmd, WorkspaceShareCommand::Description}, // clang-format on }; |