diff options
Diffstat (limited to 'src/zenserver/config/config.cpp')
| -rw-r--r-- | src/zenserver/config/config.cpp | 40 |
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) { |