aboutsummaryrefslogtreecommitdiff
path: root/zen/zen.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-01-13 07:08:02 -0800
committerGitHub <[email protected]>2023-01-13 07:08:02 -0800
commit61f18d2de7f37aa03aa09d55562d05c6da033eb2 (patch)
tree217828004ee4417b6f2be80a7bf778b808798e4d /zen/zen.cpp
parentAdd info (GET) endpoints for structured cache (#211) (diff)
downloadarchived-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.cpp100
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);
}
}
}