aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/scrub.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-15 18:53:38 +0200
committerGitHub <[email protected]>2023-05-15 18:53:38 +0200
commit3fb79e25865c3bafa9156c2db767ddc16f5019f3 (patch)
treed476cf8c3b05793642b1a029171d76dfcf9f092d /src/zen/cmds/scrub.cpp
parentadded trace::DescribeSession to TraceInit (diff)
downloadarchived-zen-3fb79e25865c3bafa9156c2db767ddc16f5019f3.tar.xz
archived-zen-3fb79e25865c3bafa9156c2db767ddc16f5019f3.zip
Better defaults for zen cli (#302)
added ZenCmdBase::ResolveTargetHostSpec - this is a helper which provides better default behaviour for commands which interact with a local zen server instance. more specifically it picks a default based on which processes are actually running on the local machine this change also wires up the Scrub command along with some required HttpClient improvements
Diffstat (limited to 'src/zen/cmds/scrub.cpp')
-rw-r--r--src/zen/cmds/scrub.cpp57
1 files changed, 52 insertions, 5 deletions
diff --git a/src/zen/cmds/scrub.cpp b/src/zen/cmds/scrub.cpp
index 27ff5e0ac..c3ca0ff1e 100644
--- a/src/zen/cmds/scrub.cpp
+++ b/src/zen/cmds/scrub.cpp
@@ -2,6 +2,7 @@
#include "scrub.h"
#include <zencore/logging.h>
+#include <zenhttp/httpclient.h>
#include <zenhttp/httpcommon.h>
ZEN_THIRD_PARTY_INCLUDES_START
@@ -15,7 +16,7 @@ namespace zen {
ScrubCommand::ScrubCommand()
{
m_Options.add_options()("h,help", "Print help");
- m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
}
ScrubCommand::~ScrubCommand() = default;
@@ -23,9 +24,41 @@ ScrubCommand::~ScrubCommand() = default;
int
ScrubCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
{
- ZEN_UNUSED(GlobalOptions, argc, argv);
+ ZEN_UNUSED(GlobalOptions);
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ m_HostName = ResolveTargetHostSpec(m_HostName);
+
+ if (m_HostName.empty())
+ {
+ throw OptionParseException("unable to resolve server specification");
+ }
+
+ zen::HttpClient Http(m_HostName);
+
+ if (zen::HttpClient::Response Response = Http.Post("/admin/scrub"sv))
+ {
+ ZEN_CONSOLE("OK: {}", Response.ToText());
+
+ return 0;
+ }
+ else if (int StatusCode = (int)Response.StatusCode)
+ {
+ ZEN_ERROR("scrub start failed: {}: {} ({})",
+ (int)Response.StatusCode,
+ ReasonStringForHttpResultCode((int)Response.StatusCode),
+ Response.AsText());
+ }
+ else
+ {
+ ZEN_ERROR("scrub start failed: {}", Response.AsText());
+ }
- return 0;
+ return 1;
}
//////////////////////////////////////////////////////////////////////////
@@ -33,7 +66,7 @@ ScrubCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
GcCommand::GcCommand()
{
m_Options.add_options()("h,help", "Print help");
- m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
m_Options.add_option("",
"s",
"smallobjects",
@@ -68,6 +101,13 @@ GcCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
return 0;
}
+ m_HostName = ResolveTargetHostSpec(m_HostName);
+
+ if (m_HostName.empty())
+ {
+ throw OptionParseException("unable to resolve server specification");
+ }
+
cpr::Parameters Params;
if (m_SmallObjects)
{
@@ -110,7 +150,7 @@ GcCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
GcStatusCommand::GcStatusCommand()
{
m_Options.add_options()("h,help", "Print help");
- m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
}
GcStatusCommand::~GcStatusCommand()
@@ -127,6 +167,13 @@ GcStatusCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
return 0;
}
+ m_HostName = ResolveTargetHostSpec(m_HostName);
+
+ if (m_HostName.empty())
+ {
+ throw OptionParseException("unable to resolve server specification");
+ }
+
cpr::Session Session;
Session.SetHeader(cpr::Header{{"Accept", "application/json"}});
Session.SetUrl({fmt::format("{}/admin/gc", m_HostName)});