UTILLib 2.0
Common C++ library with utilities.
Loading...
Searching...
No Matches
isuperviseapplication.h
Go to the documentation of this file.
1/*
2* Copyright 2025 Ingemar Hedvall
3 * SPDX-License-Identifier: MIT
4 */
5
14#pragma once
15
16#include <algorithm>
17#include <atomic>
18#include <string>
19#include <string_view>
20#include <vector>
21
22namespace util::xml {
23class IXmlNode;
24}
25
26namespace util::supervise {
27
31enum class ApplicationState : uint8_t {
32 Stopped = 0,
33 Running = 1,
34 Failing = 2,
35 Ready = 3,
36};
37
64enum class ApplicationStartup : uint8_t {
65 Manual = 0,
66 Once = 1,
68};
69
87
117 public:
119 virtual ~ISuperviseApplication() = default;
120
129 void Name(std::string name) { name_ = std::move(name); }
130
135 [[nodiscard]] const std::string &Name() const { return name_; }
136
145 void Path(std::string path) {
146 path_ = std::move(path);
147 }
148
153 [[nodiscard]] const std::string &Path() const {
154 return path_;
155 }
156
161 void Arguments(std::string arguments) {
162 arguments_ = std::move(arguments);
163 }
164
169 [[nodiscard]] const std::string &Arguments() const {
170 return arguments_;
171 }
172
200 void Startup(ApplicationStartup startup) { startup_ = startup; }
201
206 [[nodiscard]] ApplicationStartup Startup() const { return startup_; }
207
208
213 void Priority(ApplicationPriority priority) { priority_ = priority; }
214
219 [[nodiscard]] ApplicationPriority Priority() const { return priority_; }
220
232 void ShowWindow(bool show) { show_window_ = show; }
233
238 [[nodiscard]] bool ShowWindow() const { return show_window_; }
239
246 void StartupDelay(uint32_t delay) { startup_delay_ = delay; }
247
252 [[nodiscard]] uint32_t StartupDelay() const { return startup_delay_; }
253
258 void MaxRestarts(uint32_t max_restarts) { max_restarts_ = max_restarts; }
259
264 [[nodiscard]] uint32_t MaxRestarts() const { return max_restarts_; }
265
271 void InService(bool in_service) { in_service_ = in_service; }
272
277 [[nodiscard]] bool InService() const { return in_service_; }
278
283 [[nodiscard]] uint32_t NofRestarts() const { return nof_restarts_; }
284
289 [[nodiscard]] bool Operable() const { return operable_; }
290
295 [[nodiscard]] ApplicationState State() const { return state_; }
296
300 virtual void Start();
301
305 virtual void Stop();
306
310 virtual void Poll();
311
316 void ReadConfig(const xml::IXmlNode &application_node);
317
322 void SaveConfig(xml::IXmlNode &root_node) const;
323
324 protected:
325
329 void IncrementNofRestarts() { ++nof_restarts_; }
330
334 void ResetNofRestarts() { nof_restarts_ = 0; }
335
340 void Operable(bool operable) { operable_ = operable; }
341
346 void State(ApplicationState state) { state_ = state; }
347
352 std::vector<std::string> ParseCommandLine() const;
353
354 private:
355 std::string name_;
356 std::string path_;
357 std::string arguments_;
358
359 bool show_window_ = true;
360 uint32_t startup_delay_ = 0;
361 uint32_t max_restarts_ = 100;
362
363 std::atomic<ApplicationStartup> startup_ = ApplicationStartup::Manual;
365
366 std::atomic<uint32_t> nof_restarts_ = 0;
367 std::atomic<bool> in_service_ = false;
368 std::atomic<bool> operable_ = false;
369 std::atomic<ApplicationState> state_ = ApplicationState::Stopped;
370
375 void StartupAsString(const std::string &startup);
376
381 [[nodiscard]] std::string_view StartupAsString() const;
382
387 void PriorityAsString(const std::string &priority);
388
393 [[nodiscard]] std::string_view PriorityAsString() const;
394
395};
396
397} // util
398
399
Supervise an executable application.
Definition isuperviseapplication.h:116
void Operable(bool operable)
Sets the operable property.
Definition isuperviseapplication.h:340
virtual ~ISuperviseApplication()=default
Default destructor.
void ShowWindow(bool show)
Sets to true if a window should be shown.
Definition isuperviseapplication.h:232
uint32_t StartupDelay() const
Returns the startup delay in seconds.
Definition isuperviseapplication.h:252
void ResetNofRestarts()
Reset number of restarts..
Definition isuperviseapplication.h:334
uint32_t NofRestarts() const
Returns number of restarts.
Definition isuperviseapplication.h:283
const std::string & Arguments() const
Command line arguments.
Definition isuperviseapplication.h:169
void MaxRestarts(uint32_t max_restarts)
Sets maximum number of restarts.
Definition isuperviseapplication.h:258
void ReadConfig(const xml::IXmlNode &application_node)
Reads in the configuration.
void InService(bool in_service)
Starts or stops the executable.
Definition isuperviseapplication.h:271
void StartupDelay(uint32_t delay)
Initial startup delay in seconds.
Definition isuperviseapplication.h:246
virtual void Start()
Initialize and start the supervisor.
void Name(std::string name)
Name of the application.
Definition isuperviseapplication.h:129
ApplicationStartup Startup() const
Startup mode for the application.
Definition isuperviseapplication.h:206
void State(ApplicationState state)
Sets the supervisor state.
Definition isuperviseapplication.h:346
void IncrementNofRestarts()
Increment number of restarts.
Definition isuperviseapplication.h:329
const std::string & Name() const
Name of the application.
Definition isuperviseapplication.h:135
void Startup(ApplicationStartup startup)
Startup mode for the application.
Definition isuperviseapplication.h:200
std::vector< std::string > ParseCommandLine() const
Convert the command line into an array of arguments.
void Path(std::string path)
Path to the executable.
Definition isuperviseapplication.h:145
bool Operable() const
Returns true if the executable is running.
Definition isuperviseapplication.h:289
ApplicationPriority Priority() const
Returns the executable priority.
Definition isuperviseapplication.h:219
virtual void Stop()
Stops the supervisor.
void Priority(ApplicationPriority priority)
Defines the priority for the executable.
Definition isuperviseapplication.h:213
bool InService() const
Returns true if the executable should be started.
Definition isuperviseapplication.h:277
uint32_t MaxRestarts() const
Maximum number of restarts.
Definition isuperviseapplication.h:264
const std::string & Path() const
Path to the executable.
Definition isuperviseapplication.h:153
ApplicationState State() const
Returns the state of the supervisor.
Definition isuperviseapplication.h:295
bool ShowWindow() const
True if window should be shown.
Definition isuperviseapplication.h:238
virtual void Poll()
Poll the supervisor.
void SaveConfig(xml::IXmlNode &root_node) const
Saves the application configuration.
void Arguments(std::string arguments)
Command line arguments to use at startup.
Definition isuperviseapplication.h:161
Interface class against a XML tag (node) in a XML file.
Definition ixmlnode.h:61
ApplicationStartup
Defines the type of startup for tha tas.
Definition isuperviseapplication.h:64
@ Automatic
Starts and restarts if stopped.
Definition isuperviseapplication.h:67
@ Once
Starts only one time.
Definition isuperviseapplication.h:66
@ Manual
Manual start and stop of the application.
Definition isuperviseapplication.h:65
ApplicationState
The supervisor state.
Definition isuperviseapplication.h:31
@ Failing
Application is failing (not running).
Definition isuperviseapplication.h:34
@ Running
Application is running.
Definition isuperviseapplication.h:33
@ Stopped
Application is (manually) stopped.
Definition isuperviseapplication.h:32
@ Ready
Application is ready (not running).
Definition isuperviseapplication.h:35
ApplicationPriority
Defines the priority uses when it is running.
Definition isuperviseapplication.h:79
@ High
High priority.
Definition isuperviseapplication.h:81
@ AboveNormal
Above normal. Questionable usage.
Definition isuperviseapplication.h:82
@ Normal
Typical GUI applications uses this priority.
Definition isuperviseapplication.h:83
@ Realtime
Realtime task. Avoid to use this priority.
Definition isuperviseapplication.h:80
@ BelowNormal
Below normal. Questionable usage.
Definition isuperviseapplication.h:84
@ Idle
Typical for most background task. Recommended usage.
Definition isuperviseapplication.h:85
The xml namespace is used for XML related classes and functions.
Definition isuperviseapplication.h:22