aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/config/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/config/config.cpp')
-rw-r--r--src/zenserver/config/config.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/zenserver/config/config.cpp b/src/zenserver/config/config.cpp
index 2a89fc637..5f53374fc 100644
--- a/src/zenserver/config/config.cpp
+++ b/src/zenserver/config/config.cpp
@@ -16,6 +16,7 @@
#include <zencore/fmtutils.h>
#include <zencore/iobuffer.h>
#include <zencore/logging.h>
+#include <zencore/session.h>
#include <zencore/string.h>
#include <zenutil/config/commandlineoptions.h>
#include <zenutil/config/environmentoptions.h>
@@ -147,6 +148,10 @@ ZenServerConfiguratorBase::AddCommonConfigOptions(LuaConfig::Options& LuaOptions
LuaOptions.AddOption("server.clean"sv, ServerOptions.IsCleanStart, "clean"sv);
LuaOptions.AddOption("server.security.configpath"sv, ServerOptions.SecurityConfigPath, "security-config-path"sv);
+ ////// sessions
+
+ LuaOptions.AddOption("sessions.url"sv, ServerOptions.SessionsTargetUrl, "sessions-url"sv);
+
////// network
LuaOptions.AddOption("network.httpclientbackend"sv, ServerOptions.HttpClient.Backend, "httpclient"sv);
@@ -205,6 +210,7 @@ struct ZenServerCmdLineOptions
std::string SecurityConfigPath;
std::string UnixSocketPath;
std::string PortStr;
+ std::string ParentSessionId;
ZenLoggingCmdLineOptions LoggingOptions;
@@ -285,10 +291,22 @@ ZenServerCmdLineOptions::AddCliOptions(cxxopts::Options& options, ZenServerConfi
.add_option("lifetime", "", "owner-pid", "Specify owning process id", cxxopts::value<int>(ServerOptions.OwnerPid), "<identifier>");
options.add_option("lifetime",
"",
+ "parent-session",
+ "Specify parent session id used to associate this process with another session",
+ cxxopts::value<std::string>(ParentSessionId),
+ "<oid>");
+ options.add_option("lifetime",
+ "",
"child-id",
"Specify id which can be used to signal parent",
cxxopts::value<std::string>(ServerOptions.ChildId),
"<identifier>");
+ options.add_option("lifetime",
+ "",
+ "sessions-url",
+ "URL of remote zenserver to announce session to",
+ cxxopts::value<std::string>(ServerOptions.SessionsTargetUrl),
+ "<url>");
#if ZEN_PLATFORM_WINDOWS
options.add_option("lifetime",
@@ -519,6 +537,18 @@ ZenServerCmdLineOptions::ApplyOptions(cxxopts::Options& options, ZenServerConfig
ServerOptions.BasePort = Port;
}
+ if (!ParentSessionId.empty())
+ {
+ Oid ParsedParentSessionId;
+ if (!Oid::TryParse(ParentSessionId, ParsedParentSessionId) || ParsedParentSessionId == Oid::Zero)
+ {
+ throw OptionParseException(fmt::format("invalid parent session id '{}': expected a 24-character object id", ParentSessionId),
+ options.help());
+ }
+ ServerOptions.ParentSessionId = ParsedParentSessionId;
+ SetParentSessionId(ParsedParentSessionId);
+ }
+
LoggingOptions.ApplyOptions(ServerOptions.LoggingConfig);
#if ZEN_WITH_HTTPSYS
@@ -688,6 +718,16 @@ ZenServerConfiguratorBase::Configure(int argc, char* argv[])
{
m_ServerOptions.BasePort = ZenServerConfig::kDefaultBasePort;
}
+
+ // Resolve sessions target. If neither CLI nor config supplied a value,
+ // fall back to the ZEN_SESSIONS_URL environment variable. When a remote
+ // target is configured, session logs flow through SessionsServiceClient
+ // instead of the in-proc broadcast sink.
+ if (m_ServerOptions.SessionsTargetUrl.empty())
+ {
+ m_ServerOptions.SessionsTargetUrl = GetEnvVariable("ZEN_SESSIONS_URL").value_or("");
+ }
+ m_ServerOptions.UseInProcSessionLogging = m_ServerOptions.SessionsTargetUrl.empty();
}
catch (const OptionParseException& e)
{