diff options
| author | Dan Engelbrecht <[email protected]> | 2022-11-21 10:13:05 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-21 01:13:05 -0800 |
| commit | 8e4f89ac73a1924b289b4cf10e1643ceca3526a1 (patch) | |
| tree | 0e846e52349582789c460d490de3cc6a6a79f3b3 | |
| parent | bump cache large object size limit to 128Kb (#191) (diff) | |
| download | zen-8e4f89ac73a1924b289b4cf10e1643ceca3526a1.tar.xz zen-8e4f89ac73a1924b289b4cf10e1643ceca3526a1.zip | |
add "version" command with "detailed" option (#192)
specify host url to query running service version, otherwise you get zen command version
| -rw-r--r-- | CHANGELOG.md | 4 | ||||
| -rw-r--r-- | zen/cmds/version.cpp | 76 | ||||
| -rw-r--r-- | zen/cmds/version.h | 24 | ||||
| -rw-r--r-- | zen/zen.cpp | 3 | ||||
| -rw-r--r-- | zenserver/diag/diagsvcs.cpp | 15 |
5 files changed, 122 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d34d6300c..2dbfa413a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ - Feature: Adds two command to Zen command tool to export/import project store oplogs with attachments - `export-project <target-folder> <project> [oplogs...]` - `import-project <target-folder> <project> [oplogs...]` +- Feature: Adds command to query Zen version, specify `host-name` url to query running service version, otherwise you get zen command version. `detailed` option gives you long form version. + - `version [host-name] [detailed]` +- Feature: New service endpoint to query Zen server version, add `?detailed=true` to get long form version + - `<host>/health/version` - Feature: Configure OpenID providers from cmd line and Lua cfg - Feature: Added zen command line executable to release distribution - Improvement: Bumped limit for storing cache values as separate files to reduce number of loose files diff --git a/zen/cmds/version.cpp b/zen/cmds/version.cpp new file mode 100644 index 000000000..b92ef670a --- /dev/null +++ b/zen/cmds/version.cpp @@ -0,0 +1,76 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "version.h" + +#include <zencore/config.h> +#include <zencore/filesystem.h> +#include <zencore/fmtutils.h> +#include <zencore/logging.h> +#include <zenhttp/httpcommon.h> +#include <zenutil/zenserverprocess.h> + +#include <memory> + +ZEN_THIRD_PARTY_INCLUDES_START +#include <cpr/cpr.h> +ZEN_THIRD_PARTY_INCLUDES_END + +namespace zen { + +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]"); +} + +VersionCommand::~VersionCommand() = default; + +int +VersionCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) +{ + ZEN_UNUSED(GlobalOptions); + m_Options.parse_positional({"hosturl"}); + m_Options.parse(argc, argv); + + std::string Version; + + if (m_HostName.empty()) + { + if (m_DetailedVersion) + { + Version = ZEN_CFG_VERSION_BUILD_STRING_FULL; + } + else + { + Version = ZEN_CFG_VERSION; + } + } + 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 (Response.status_code) + { + ZEN_ERROR("{} failed: {}: {} ({})", VersionRequest, Response.status_code, Response.reason, Response.text); + } + else + { + ZEN_ERROR("{} failed: {}", VersionRequest, Response.error.message); + } + + return 1; + } + Version = Response.text; + } + + zen::ConsoleLog().info("{}", Version); + + return 0; +} +} // namespace zen diff --git a/zen/cmds/version.h b/zen/cmds/version.h new file mode 100644 index 000000000..17aec73e3 --- /dev/null +++ b/zen/cmds/version.h @@ -0,0 +1,24 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "../zen.h" + +namespace zen { + +class VersionCommand : public ZenCmdBase +{ +public: + VersionCommand(); + ~VersionCommand(); + + virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; + virtual cxxopts::Options* Options() override { return &m_Options; } + +private: + cxxopts::Options m_Options{"version", "Get zen service version"}; + std::string m_HostName; + bool m_DetailedVersion; +}; + +} // namespace zen diff --git a/zen/zen.cpp b/zen/zen.cpp index a736d740e..792751d43 100644 --- a/zen/zen.cpp +++ b/zen/zen.cpp @@ -17,6 +17,7 @@ #include "cmds/status.h" #include "cmds/top.h" #include "cmds/up.h" +#include "cmds/version.h" #include <zencore/logging.h> #include <zencore/scopeguard.h> @@ -127,6 +128,7 @@ main(int argc, char** argv) DownCommand DownCmd; ExportProjectCommand ExportProjectCmd; ImportProjectCommand ImportProjectCmd; + VersionCommand VersionCmd; #if ZEN_WITH_TESTS RunTestsCommand RunTestsCmd; @@ -156,6 +158,7 @@ main(int argc, char** argv) {"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 #if ZEN_WITH_TESTS {"runtests", &RunTestsCmd, "Run zen tests"}, diff --git a/zenserver/diag/diagsvcs.cpp b/zenserver/diag/diagsvcs.cpp index ef2baa1b4..29ad5c3dd 100644 --- a/zenserver/diag/diagsvcs.cpp +++ b/zenserver/diag/diagsvcs.cpp @@ -4,6 +4,7 @@ #include <zencore/compactbinary.h> #include <zencore/compactbinarybuilder.h> +#include <zencore/config.h> #include <zencore/filesystem.h> #include <zencore/logging.h> #include <zencore/string.h> @@ -86,6 +87,20 @@ HttpHealthService::HttpHealthService() } }, HttpVerb::kGet); + m_Router.RegisterRoute( + "version", + [this](HttpRouterRequest& RoutedReq) { + HttpServerRequest& HttpReq = RoutedReq.ServerRequest(); + if (HttpReq.GetQueryParams().GetValue("detailed") == "true") + { + HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, ZEN_CFG_VERSION_BUILD_STRING_FULL); + } + else + { + HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, ZEN_CFG_VERSION); + } + }, + HttpVerb::kGet); } void |