aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/admin_cmd.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-09-22 10:04:02 -0400
committerGitHub <[email protected]>2023-09-22 16:04:02 +0200
commit47ba787e2cfe32b252b74e09494fbcaabc4e8190 (patch)
tree80acc5dfa51b08211583e38d31be2b2327a525a3 /src/zen/cmds/admin_cmd.cpp
parentadded support for sln on Mac (#421) (diff)
downloadarchived-zen-47ba787e2cfe32b252b74e09494fbcaabc4e8190.tar.xz
archived-zen-47ba787e2cfe32b252b74e09494fbcaabc4e8190.zip
Add runtime status/control of logging (#419)
- Feature: New endpoint `/admin/logs` to query status of logging and log file locations and cache logging - `enablewritelog`=`true`/`false` parameter to control cache write logging - `enableaccesslog`=`true`/`false` parameter to control cache access logging - `loglevel` = `trace`/`debug`/`info`/`warning`/`error` - Feature: New zen command `logs` to query/control zen logging - No arguments gives status of logging and paths to log files - `--cache-write-log` `enable`/`disable` to control cache write logging - `--cache-access-log` `enable`/`disable` to control cache access logging - `--loglevel` `trace`/`debug`/`info`/`warning`/`error` to set debug level
Diffstat (limited to 'src/zen/cmds/admin_cmd.cpp')
-rw-r--r--src/zen/cmds/admin_cmd.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/zen/cmds/admin_cmd.cpp b/src/zen/cmds/admin_cmd.cpp
index 0aef968a9..b48207bec 100644
--- a/src/zen/cmds/admin_cmd.cpp
+++ b/src/zen/cmds/admin_cmd.cpp
@@ -267,4 +267,106 @@ JobCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
return 0;
}
+////////////////////////////////////////////
+
+LoggingCommand::LoggingCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
+ m_Options.add_option("", "", "cache-write-log", "Enable cache write logging", cxxopts::value(m_CacheWriteLog), "<enable/disable>");
+ 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>");
+}
+
+LoggingCommand::~LoggingCommand() = default;
+
+int
+LoggingCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions);
+
+ using namespace std::literals;
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ m_HostName = ResolveTargetHostSpec(m_HostName);
+
+ if (m_HostName.empty())
+ {
+ throw OptionParseException("unable to resolve server specification");
+ }
+
+ HttpClient Http(m_HostName);
+
+ HttpClient::KeyValueMap Parameters;
+
+ if (!m_CacheWriteLog.empty())
+ {
+ if (m_CacheWriteLog == "enable")
+ {
+ (*Parameters)["cacheenablewritelog"] = "true";
+ }
+ else if (m_CacheWriteLog == "disable")
+ {
+ (*Parameters)["cacheenablewritelog"] = "false";
+ }
+ else
+ {
+ ZEN_ERROR("Invalid value for parameter 'cache-write-log'. Use 'enable' or 'disable'");
+ return 1;
+ }
+ }
+
+ if (!m_CacheAccessLog.empty())
+ {
+ if (m_CacheAccessLog == "enable")
+ {
+ (*Parameters)["cacheenableaccesslog"] = "true";
+ }
+ else if (m_CacheAccessLog == "disable")
+ {
+ (*Parameters)["cacheenableaccesslog"] = "false";
+ }
+ else
+ {
+ ZEN_ERROR("Invalid value for parameter 'cache-access-log'. Use 'enable' or 'disable'");
+ return 1;
+ }
+ }
+
+ if (!m_SetLogLevel.empty())
+ {
+ (*Parameters)["loglevel"] = m_SetLogLevel;
+ }
+
+ if ((*Parameters).empty())
+ {
+ if (HttpClient::Response Result = Http.Get("/admin/logs", HttpClient::Accept(ZenContentType::kJSON)))
+ {
+ ZEN_CONSOLE("{}", Result.AsText());
+ }
+ else
+ {
+ Result.ThrowError("failed fetching log info"sv);
+ return 1;
+ }
+ return 0;
+ }
+ if (HttpClient::Response Result = Http.Post("/admin/logs", HttpClient::KeyValueMap{}, Parameters))
+ {
+ ZEN_CONSOLE("{}", Result.AsText());
+ }
+ else
+ {
+ Result.ThrowError("failed setting log info"sv);
+ return 1;
+ }
+
+ return 0;
+}
+
} // namespace zen