diff options
| author | Dan Engelbrecht <[email protected]> | 2023-01-13 07:08:02 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-01-13 07:08:02 -0800 |
| commit | 61f18d2de7f37aa03aa09d55562d05c6da033eb2 (patch) | |
| tree | 217828004ee4417b6f2be80a7bf778b808798e4d /zen/zen.cpp | |
| parent | Add info (GET) endpoints for structured cache (#211) (diff) | |
| download | archived-zen-61f18d2de7f37aa03aa09d55562d05c6da033eb2.tar.xz archived-zen-61f18d2de7f37aa03aa09d55562d05c6da033eb2.zip | |
zen command line tool improvements (#212)
- Feature: zen command line tool `cache-info` to show cache, namespace or bucket info
- Feature: zen command line tool `project-info` to show store, project or oplog info
- Feature: zen command line tool `project-drop` to drop project or oplog
- Feature: zen command line tool `gc` to trigger a GC run
- Feature: zen command line tool `gc-info` to check status of GC
- Improvement: zen command line tool now fails on any unrecognized arguments
- Improvement: zen command line tool now displays extra help for all sub-commands
- Improvement: host address can now be configured for zen command line tool `drop` command
changelog
Diffstat (limited to 'zen/zen.cpp')
| -rw-r--r-- | zen/zen.cpp | 100 |
1 files changed, 66 insertions, 34 deletions
diff --git a/zen/zen.cpp b/zen/zen.cpp index 447c4f825..b4159df3a 100644 --- a/zen/zen.cpp +++ b/zen/zen.cpp @@ -13,7 +13,9 @@ #include "cmds/hash.h" #include "cmds/importproject.h" #include "cmds/print.h" +#include "cmds/projectstore.h" #include "cmds/run.h" +#include "cmds/scrub.h" #include "cmds/status.h" #include "cmds/top.h" #include "cmds/up.h" @@ -48,7 +50,7 @@ public: return 0; } - virtual cxxopts::Options* Options() override { return &m_Options; } + virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"template", "EDIT THIS COMMAND DESCRIPTION"}; @@ -57,6 +59,36 @@ private: ////////////////////////////////////////////////////////////////////////// +bool +ZenCmdBase::ParseOptions(int argc, char** argv) +{ + cxxopts::Options& CmdOptions = Options(); + cxxopts::ParseResult Result = CmdOptions.parse(argc, argv); + if (Result.count("help")) + { + printf("%s\n", CmdOptions.help({}).c_str()); + return false; + } + if (!Result.unmatched().empty()) + { + zen::ExtendableStringBuilder<64> StringBuilder; + for (bool First = true; const auto& Param : Result.unmatched()) + { + if (!First) + { + StringBuilder.Append(", "); + } + StringBuilder.Append('"'); + StringBuilder.Append(Param); + StringBuilder.Append('"'); + First = false; + } + throw cxxopts::OptionParseException(fmt::format("Invalid arguments: {}", StringBuilder.ToView())); + } + + return true; +} + #if ZEN_WITH_TESTS class RunTestsCommand : public ZenCmdBase @@ -84,7 +116,7 @@ public: return ZEN_RUN_TESTS(argc, argv); } - virtual cxxopts::Options* Options() override { return &m_Options; } + virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"runtests", "Run tests"}; @@ -129,6 +161,11 @@ main(int argc, char** argv) ExportProjectCommand ExportProjectCmd; ImportProjectCommand ImportProjectCmd; VersionCommand VersionCmd; + CacheInfoCommand CacheInfoCmd; + DropProjectCommand ProjectDropCmd; + ProjectInfoCommand ProjectInfoCmd; + GcCommand GcCmd; + GcStatusCommand GcStatusCmd; #if ZEN_WITH_TESTS RunTestsCommand RunTestsCmd; @@ -141,28 +178,33 @@ main(int argc, char** argv) const char* CmdSummary; } Commands[] = { // clang-format off -// {"chunk", &ChunkCmd, "Perform chunking"}, - {"copy", &CopyCmd, "Copy file(s)"}, - {"dedup", &DedupCmd, "Dedup files"}, - {"drop", &DropCmd, "Drop cache namespace or bucket"}, - {"export-project", &ExportProjectCmd, "Export project store oplog"}, - {"hash", &HashCmd, "Compute file hashes"}, - {"import-project", &ImportProjectCmd, "Import project store oplog"}, - {"print", &PrintCmd, "Print compact binary object"}, - {"printpackage", &PrintPkgCmd, "Print compact binary package"}, +// {"chunk", &ChunkCmd, "Perform chunking"}, + {"copy", &CopyCmd, "Copy file(s)"}, + {"dedup", &DedupCmd, "Dedup files"}, + {"drop", &DropCmd, "Drop cache namespace or bucket"}, + {"export-project", &ExportProjectCmd, "Export project store oplog"}, + {"hash", &HashCmd, "Compute file hashes"}, + {"import-project", &ImportProjectCmd, "Import project store oplog"}, + {"print", &PrintCmd, "Print compact binary object"}, + {"printpackage", &PrintPkgCmd, "Print compact binary package"}, #if ZEN_WITH_EXEC_SERVICES - {"run", &RunCmd, "Remote execution"}, + {"run", &RunCmd, "Remote execution"}, #endif // ZEN_WITH_EXEC_SERVICES - {"status", &StatusCmd, "Show zen status"}, - {"ps", &PsCmd, "Enumerate running zen server instances"}, - {"top", &TopCmd, "Monitor zen server activity"}, - {"up", &UpCmd, "Bring zen server up"}, - {"down", &DownCmd, "Bring zen server down"}, - {"version", &VersionCmd, "Get zen server version"}, - // clang-format on + {"status", &StatusCmd, "Show zen status"}, + {"ps", &PsCmd, "Enumerate running zen server instances"}, + {"top", &TopCmd, "Monitor zen server activity"}, + {"up", &UpCmd, "Bring zen server up"}, + {"down", &DownCmd, "Bring zen server down"}, + {"version", &VersionCmd, "Get zen server version"}, + {"cache-info", &CacheInfoCmd, "Info on cache, namespace or bucket"}, + {"project-drop", &ProjectDropCmd, "Drop project or project oplog"}, + {"project-info", &ProjectInfoCmd, "Info on project or project oplog"}, + {"gc", &GcCmd, "Garbage collect zen storage"}, + {"gc-status", &GcStatusCmd, "Garbage collect zen storage status check"}, #if ZEN_WITH_TESTS - {"runtests", &RunTestsCmd, "Run zen tests"}, + {"runtests", &RunTestsCmd, "Run zen tests"}, #endif + // clang-format on }; // Build set containing available commands @@ -286,28 +328,18 @@ main(int argc, char** argv) { if (StrCaseCompare(SubCommand.c_str(), CmdInfo.CmdName) == 0) { - cxxopts::Options* VerbOptions = CmdInfo.Cmd->Options(); - + cxxopts::Options& VerbOptions = CmdInfo.Cmd->Options(); try { return CmdInfo.Cmd->Run(GlobalOptions, (int)CommandArgVec.size(), CommandArgVec.data()); } catch (cxxopts::OptionParseException& Ex) { - if (VerbOptions) - { - std::string help = VerbOptions->help(); - - printf("Error parsing arguments for command '%s': %s\n\n%s", SubCommand.c_str(), Ex.what(), help.c_str()); + std::string help = VerbOptions.help(); - exit(11); - } - else - { - printf("Error parsing arguments for command '%s': %s\n\n", SubCommand.c_str(), Ex.what()); + printf("Error parsing arguments for command '%s': %s\n\n%s", SubCommand.c_str(), Ex.what(), help.c_str()); - exit(11); - } + exit(11); } } } |