53 explicit ProcessManager(std::shared_ptr<Configuration> conf =
nullptr);
57 void setNodeName(
const std::string& name);
58 std::string getNodeName()
const;
60 void setHealthCheckInterval(
size_t msec);
61 void setRestartWindow(
size_t msec);
62 void setStopTimeout(
size_t msec);
63 void setCommonArgs(
const std::vector<std::string>& args);
64 void setPassthroughArgs(
const std::string& args);
65 void setForwardArgs(
const std::vector<std::string>& args);
77 bool isBulkOperationInProgress()
const;
79 bool restartProcess(
const std::string& name);
80 bool stopProcess(
const std::string& name);
81 bool startProcess(
const std::string& name);
84 void startMonitoring();
85 void stopMonitoring();
86 bool isMonitoring()
const;
89 ProcessState getProcessState(
const std::string& name)
const;
90 ProcessInfo getProcessInfo(
const std::string& name)
const;
91 std::vector<ProcessInfo> getAllProcesses()
const;
92 std::vector<ProcessGroup> getAllGroups()
const;
94 bool allRunning()
const;
95 bool anyCriticalFailed()
const;
98 std::vector<std::string>
getFullArgs(
const std::string& name)
const;
108 using ProcessCallback = std::function<void(
const ProcessInfo&)>;
109 void setOnProcessStarted(ProcessCallback cb);
110 void setOnProcessStopped(ProcessCallback cb);
111 void setOnProcessFailed(ProcessCallback cb);
114 std::shared_ptr<DebugStream> log();
117 bool startProcessWithUnlock(
ProcessInfo& proc, std::unique_lock<std::mutex>& lock);
118 bool startOneshotWithUnlock(
ProcessInfo& proc, std::unique_lock<std::mutex>& lock);
121 void handleProcessExitByName(
const std::string& name,
int exitCode);
125 std::vector<std::string> assembleArgs(
const ProcessInfo& proc)
const;
126 std::vector<std::string> prepareProcessArgs(
const ProcessInfo& proc);
130 static bool interruptibleSleep(
size_t msec,
const std::atomic<bool>& cancelFlag,
131 size_t pollInterval_msec = 500);
133 std::vector<std::string> resolveStartOrder();
134 void expandEnvironment(std::vector<std::string>& args);
135 std::string expandEnvVar(
const std::string& s);
137 std::shared_ptr<Configuration> conf_;
138 std::unique_ptr<HealthChecker> healthChecker_;
141 std::string nodeName_;
142 std::map<std::string, ProcessInfo> processes_;
143 std::map<std::string, ProcessGroup> groups_;
145 std::thread monitorThread_;
146 std::atomic<bool> running_{
false};
147 std::atomic<bool> stopping_{
false};
148 std::atomic<BulkOperation> currentBulkOp_{BulkOperation::None};
149 mutable std::mutex mutex_;
151 size_t healthCheckInterval_msec_ = 5000;
152 size_t restartWindow_msec_ = 60000;
153 size_t stopTimeout_msec_ = 5000;
154 std::vector<std::string> commonArgs_;
155 std::string passthroughArgs_;
156 std::vector<std::string> forwardArgs_;
158 ProcessCallback onStarted_;
159 ProcessCallback onStopped_;
160 ProcessCallback onFailed_;
162 std::shared_ptr<DebugStream> mylog;
std::vector< std::string > getFullArgs(const std::string &name) const
Get full arguments list for a process (commonArgs + args + forwardArgs)
Definition ProcessManager.cc:1741