aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-11-21 10:13:05 +0100
committerGitHub <[email protected]>2022-11-21 01:13:05 -0800
commit8e4f89ac73a1924b289b4cf10e1643ceca3526a1 (patch)
tree0e846e52349582789c460d490de3cc6a6a79f3b3
parentbump cache large object size limit to 128Kb (#191) (diff)
downloadzen-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.md4
-rw-r--r--zen/cmds/version.cpp76
-rw-r--r--zen/cmds/version.h24
-rw-r--r--zen/zen.cpp3
-rw-r--r--zenserver/diag/diagsvcs.cpp15
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