aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/version_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zen/cmds/version_cmd.cpp')
-rw-r--r--src/zen/cmds/version_cmd.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/zen/cmds/version_cmd.cpp b/src/zen/cmds/version_cmd.cpp
index 41042533d..7dfa125e4 100644
--- a/src/zen/cmds/version_cmd.cpp
+++ b/src/zen/cmds/version_cmd.cpp
@@ -2,10 +2,12 @@
#include "version_cmd.h"
+#include <zencore/basicfile.h>
#include <zencore/config.h>
#include <zencore/filesystem.h>
#include <zencore/fmtutils.h>
#include <zencore/logging.h>
+#include <zenhttp/httpclient.h>
#include <zenhttp/httpcommon.h>
#include <zenutil/zenserverprocess.h>
@@ -17,11 +19,14 @@ ZEN_THIRD_PARTY_INCLUDES_END
namespace zen {
+using namespace std::literals;
+
VersionCommand::VersionCommand()
{
m_Options.add_options()("h,help", "Print help");
m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName), "[hosturl]");
m_Options.add_option("", "d", "detailed", "Detailed Version", cxxopts::value(m_DetailedVersion), "[detailedversion]");
+ m_Options.add_option("", "o", "output-path", "Path for output", cxxopts::value(m_OutputPath), "[outputpath]");
m_Options.parse_positional({"hosturl"});
}
@@ -51,28 +56,40 @@ VersionCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
else
{
- const std::string UrlBase = fmt::format("{}/health", m_HostName);
- cpr::Session Session;
- std::string VersionRequest = fmt::format("{}/version{}", UrlBase, m_DetailedVersion ? "?detailed=true" : "");
- Session.SetUrl(VersionRequest);
- cpr::Response Response = Session.Get();
- if (!zen::IsHttpSuccessCode(Response.status_code))
+ if (!m_OutputPath.empty())
{
- if (Response.status_code)
- {
- ZEN_ERROR("{} failed: {}: {} ({})", VersionRequest, Response.status_code, Response.reason, Response.text);
- }
- else
- {
- ZEN_ERROR("{} failed: {}", VersionRequest, Response.error.message);
- }
+ ZEN_CONSOLE("Querying host {}", m_HostName);
+ }
+ HttpClient Client(m_HostName, HttpClientSettings{.Timeout = std::chrono::milliseconds(5000)});
+
+ HttpClient::KeyValueMap Parameters;
+ if (m_DetailedVersion)
+ {
+ Parameters.Entries.insert_or_assign("detailed", "true");
+ }
+ const std::string_view VersionRequest("/health/version"sv);
+ HttpClient::Response Response = Client.Get(VersionRequest, {}, Parameters);
+ if (!Response.IsSuccess())
+ {
+ ZEN_ERROR("{} failed: {}", VersionRequest, Response.ErrorMessage(""sv));
return 1;
}
- Version = Response.text;
+ Version = Response.AsText();
}
- ZEN_CONSOLE("{}", Version);
+ if (m_OutputPath.empty())
+ {
+ ZEN_CONSOLE("{}", Version);
+ }
+ else
+ {
+ ZEN_CONSOLE("Writing version '{}' to '{}'", Version, m_OutputPath);
+
+ BasicFile OutputFile(m_OutputPath, BasicFile::Mode::kTruncate);
+ OutputFile.Write(Version.data(), Version.length(), 0);
+ OutputFile.Close();
+ }
return 0;
}