using Npgsql; using Phantom.Utils.Logging; using Phantom.Utils.Runtime; namespace Phantom.Controller; sealed record Variables( string AgentRpcServerHost, ushort AgentRpcServerPort, string WebRpcServerHost, ushort WebRpcServerPort, string SqlConnectionString ) { private static Variables LoadOrThrow() { var connectionStringBuilder = new NpgsqlConnectionStringBuilder { Host = EnvironmentVariables.GetString("PG_HOST").Require, Port = EnvironmentVariables.GetPortNumber("PG_PORT").Require, Username = EnvironmentVariables.GetString("PG_USER").Require, Password = EnvironmentVariables.GetString("PG_PASS").Require, Database = EnvironmentVariables.GetString("PG_DATABASE").Require }; return new Variables( EnvironmentVariables.GetString("AGENT_RPC_SERVER_HOST").WithDefault("0.0.0.0"), EnvironmentVariables.GetPortNumber("AGENT_RPC_SERVER_PORT").WithDefault(9401), EnvironmentVariables.GetString("WEB_RPC_SERVER_HOST").WithDefault("0.0.0.0"), EnvironmentVariables.GetPortNumber("WEB_RPC_SERVER_PORT").WithDefault(9402), connectionStringBuilder.ToString() ); } public static Variables LoadOrStop() { try { return LoadOrThrow(); } catch (Exception e) { PhantomLogger.Root.Fatal(e.Message); throw StopProcedureException.Instance; } } }