47 std::shared_ptr<Process> m_process =
nullptr;
48 std::shared_ptr<boost::process::v1::child> m_child;
49 std::shared_ptr<std::promise<int>> m_promise =
nullptr;
51 std::chrono::steady_clock::time_point m_processStartTime{};
52 std::chrono::steady_clock::time_point m_lastRestartTime{};
53 int m_consecutiveFailures = 0;
54 bool m_failed =
false;
55 std::optional<ProcessResourceData> m_lastResourceSample;
56 std::chrono::steady_clock::time_point m_lastNotifyTime{};
59 ProcessExecutes() =
default;
63 void setProcess(std::shared_ptr<Process> process) { m_process = std::move(process); }
67 void setChild(std::shared_ptr<boost::process::v1::child>
child)
69 m_child = std::move(
child);
70 m_processStartTime = std::chrono::steady_clock::now();
75 [[
nodiscard]]
const std::shared_ptr<Process> &getProcess()
const {
return m_process; }
79 [[
nodiscard]] std::shared_ptr<boost::process::v1::child> &getChild() {
return m_child; }
85 if (m_promise ==
nullptr) { m_promise = std::make_shared<std::promise<int>>(); }
91 void setPromiseException(
const std::exception_ptr &
p)
93 if (m_promise ==
nullptr) { m_promise = std::make_shared<std::promise<int>>(); }
94 m_promise->set_exception(
p);
99 std::future<int> getFuture()
101 if (m_promise ==
nullptr) { m_promise = std::make_shared<std::promise<int>>(); }
102 return m_promise->get_future();
106 void markStart() { m_processStartTime = std::chrono::steady_clock::now(); }
109 [[
nodiscard]] std::chrono::steady_clock::time_point processStartTime()
const {
return m_processStartTime; }
112 void markRestart() { m_lastRestartTime = std::chrono::steady_clock::now(); }
115 [[
nodiscard]] std::chrono::steady_clock::time_point lastRestartTime()
const {
return m_lastRestartTime; }
118 void setConsecutiveFailures(
int failures) { m_consecutiveFailures =
failures; }
121 [[
nodiscard]]
int consecutiveFailures()
const {
return m_consecutiveFailures; }
127 [[
nodiscard]]
bool isFailed()
const {
return m_failed; }
133 [[
nodiscard]]
const std::optional<ProcessResourceData> &resourceSample()
const {
return m_lastResourceSample; }
136 void setLastNotifyTime(std::chrono::steady_clock::time_point time) { m_lastNotifyTime = time; }
139 [[
nodiscard]] std::chrono::steady_clock::time_point lastNotifyTime()
const {
return m_lastNotifyTime; }
143 std::shared_ptr<ProcessName> m_processName;
144 std::shared_ptr<EnvironmentConfiguration> m_environmentConfiguration;
145 std::shared_ptr<Process> m_process;
146 std::shared_ptr<Configuration> m_configuration;
147 std::shared_ptr<IHistoryService> m_historyService;
149 std::mutex m_processesMutex;
150 std::map<std::string, ProcessExecutes> m_processes;
151 std::mutex m_processGroupMutex;
152 std::map<std::string, std::shared_ptr<ProcessGroup>> m_processGroups;
153 std::thread m_monitorThread;
154 std::atomic_bool m_running =
true;
155 std::condition_variable m_condition;
158 std::shared_ptr<Property<std::chrono::seconds>> m_monitorWaitTime;
159 std::shared_ptr<Property<std::chrono::milliseconds>> m_processStopWaitTime;
163 void monitorProcess();
165 void monitorProcessGroups();
170 std::filesystem::path resolvePath(
const std::filesystem::path &
path)
const;
177 std::shared_ptr<boost::process::v1::child>
178 spawnChild(
const std::filesystem::path &
path,
const std::vector<std::string> &
args,
const std::string &
configName);
184 void sampleResources(
const std::string &
id, ProcessExecutes &
processExecutes);
219 std::vector<ProcessGroupDto>
allGroupsOf(
const std::string &name);
232 std::optional<std::shared_ptr<Process>>
of(
const std::string &
id);