aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/admin_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zen/cmds/admin_cmd.cpp')
-rw-r--r--src/zen/cmds/admin_cmd.cpp72
1 files changed, 64 insertions, 8 deletions
diff --git a/src/zen/cmds/admin_cmd.cpp b/src/zen/cmds/admin_cmd.cpp
index 1bde785c7..15a729c78 100644
--- a/src/zen/cmds/admin_cmd.cpp
+++ b/src/zen/cmds/admin_cmd.cpp
@@ -59,11 +59,11 @@ ScrubCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
ZEN_ERROR("scrub start failed: {}: {} ({})",
(int)Response.StatusCode,
ReasonStringForHttpResultCode((int)Response.StatusCode),
- Response.AsText());
+ Response.ToText());
}
else
{
- ZEN_ERROR("scrub start failed: {}", Response.AsText());
+ ZEN_ERROR("scrub start failed: {}", Response.ToText());
}
return 1;
@@ -358,7 +358,7 @@ JobCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
else if (HttpClient::Response Result = Http.Get(Url, HttpClient::Accept(ZenContentType::kJSON)))
{
- ZEN_CONSOLE("{}", Result.AsText());
+ ZEN_CONSOLE("{}", Result.ToText());
}
else
{
@@ -379,6 +379,24 @@ LoggingCommand::LoggingCommand()
m_Options.add_option("", "", "cache-access-log", "Enable cache access logging", cxxopts::value(m_CacheAccessLog), "<enable/disable>");
m_Options
.add_option("", "", "set-log-level", "Set zenserver log level", cxxopts::value(m_SetLogLevel), "<trace/debug/info/warning/error>");
+ m_Options.add_option("",
+ "",
+ "copy-log",
+ "Copy the server log file from a local zenserver instance",
+ cxxopts::value(m_ServerLogTarget),
+ "<targetpath>");
+ m_Options.add_option("",
+ "",
+ "copy-cache-log",
+ "Copy the server cache log file from a local zenserver instance",
+ cxxopts::value(m_CacheLogTarget),
+ "<targetpath>");
+ m_Options.add_option("",
+ "",
+ "copy-http-log",
+ "Copy the server http log file from a local zenserver instance",
+ cxxopts::value(m_HttpLogTarget),
+ "<targetpath>");
}
LoggingCommand::~LoggingCommand() = default;
@@ -447,9 +465,47 @@ LoggingCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
if ((*Parameters).empty())
{
- if (HttpClient::Response Result = Http.Get("/admin/logs", HttpClient::Accept(ZenContentType::kJSON)))
+ if (HttpClient::Response Result = Http.Get("/admin/logs", HttpClient::Accept(ZenContentType::kCbObject)))
{
- ZEN_CONSOLE("{}", Result.AsText());
+ ZEN_CONSOLE("{}", Result.ToText());
+ const CbObject LogsResponse = Result.AsObject();
+
+ auto CopyLog = [](std::string_view SourceName, std::string_view SourcePath, std::string_view TargetPath) -> bool {
+ if (SourcePath.empty())
+ {
+ ZEN_ERROR("Failed to retrieve {} log path", SourceName);
+ return false;
+ }
+ if (!CopyFile(SourcePath, TargetPath, {}))
+ {
+ ZEN_ERROR("Failed to copy {} log file {} to output file '{}'", SourceName, SourcePath, TargetPath);
+ return false;
+ }
+ return true;
+ };
+
+ if (!m_ServerLogTarget.empty())
+ {
+ if (!CopyLog("server", LogsResponse["Logfile"].AsString(), m_ServerLogTarget))
+ {
+ return 1;
+ }
+ }
+
+ if (!m_CacheLogTarget.empty())
+ {
+ if (!CopyLog("cache", LogsResponse["cache"].AsObjectView()["Logfile"].AsString(), m_CacheLogTarget))
+ {
+ return 1;
+ }
+ }
+ if (!m_HttpLogTarget.empty())
+ {
+ if (!CopyLog("http", LogsResponse["http"].AsObjectView()["Logfile"].AsString(), m_HttpLogTarget))
+ {
+ return 1;
+ }
+ }
}
else
{
@@ -460,7 +516,7 @@ LoggingCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
if (HttpClient::Response Result = Http.Post("/admin/logs", HttpClient::KeyValueMap{}, Parameters))
{
- ZEN_CONSOLE("{}", Result.AsText());
+ ZEN_CONSOLE("{}", Result.ToText());
}
else
{
@@ -511,11 +567,11 @@ FlushCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
ZEN_ERROR("flush failed: {}: {} ({})",
(int)Response.StatusCode,
ReasonStringForHttpResultCode((int)Response.StatusCode),
- Response.AsText());
+ Response.ToText());
}
else
{
- ZEN_ERROR("flush failed: {}", Response.AsText());
+ ZEN_ERROR("flush failed: {}", Response.ToText());
}
return 1;