//-------------------------------------------------------------------------------------------------- static void GenerateAppLimitsConfig ( std::ofstream& cfgStream, const legato::App& app ) //-------------------------------------------------------------------------------------------------- { if (app.IsSandboxed() == false) { cfgStream << " \"sandboxed\" !f" << std::endl; } if (app.StartMode() == legato::App::MANUAL) { cfgStream << " \"startManual\" !t" << std::endl; } cfgStream << " \"maxThreads\" [" << app.MaxThreads().Get() << "]" << std::endl; cfgStream << " \"maxMQueueBytes\" [" << app.MaxMQueueBytes().Get() << "]" << std::endl; cfgStream << " \"maxQueuedSignals\" [" << app.MaxQueuedSignals().Get() << "]" << std::endl; cfgStream << " \"maxMemoryBytes\" [" << app.MaxMemoryBytes().Get() << "]" << std::endl; cfgStream << " \"cpuShare\" [" << app.CpuShare().Get() << "]" << std::endl; if (app.MaxFileSystemBytes().IsSet()) { // This is not supported for unsandboxed apps. if (app.IsSandboxed() == false) { std::cerr << "**** Warning: File system size limit being ignored for unsandboxed" << " application '" << app.Name() << "'." << std::endl; } else { cfgStream << " \"maxFileSystemBytes\" [" << app.MaxFileSystemBytes().Get() << "]" << std::endl; } } if (app.WatchdogTimeout().IsSet()) { cfgStream << " \"watchdogTimeout\" [" << app.WatchdogTimeout().Get() << "]" << std::endl; } if (app.WatchdogAction().IsSet()) { cfgStream << " \"watchdogAction\" \"" << app.WatchdogAction().Get() << "\"" << std::endl; } }
//-------------------------------------------------------------------------------------------------- static void GenerateProcessEnvVarsConfig ( std::ofstream& cfgStream, const legato::App& app, const legato::ProcessEnvironment& procEnv ) //-------------------------------------------------------------------------------------------------- { // The PATH environment variable has to be handled specially. If no PATH variable is // specified in the .adef, we must provide one. bool pathSpecified = false; // Any environment variables are declared under a node called "envVars". // Each env var has its own node, with the name of the node being the name of // the environment variable. cfgStream << " \"envVars\"" << std::endl; cfgStream << " {" << std::endl; for (const auto& pair : procEnv.EnvVarList()) { if (pair.first == "PATH") { pathSpecified = true; } cfgStream << " \"" << pair.first << "\" \"" << pair.second << "\"" << std::endl; } if (!pathSpecified) { // The default path depends on whether the application is sandboxed or not. std::string path = "/usr/local/bin:/usr/bin:/bin"; if (app.IsSandboxed() == false) { path = "/opt/legato/apps/" + app.Name() + "/bin:" + path; } cfgStream << " \"PATH\" \"" << path << "\"" << std::endl; } cfgStream << " }" << std::endl; }