summaryrefslogtreecommitdiffstats
path: root/library/Director/Daemon/DaemonProcessState.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/Daemon/DaemonProcessState.php')
-rw-r--r--library/Director/Daemon/DaemonProcessState.php85
1 files changed, 85 insertions, 0 deletions
diff --git a/library/Director/Daemon/DaemonProcessState.php b/library/Director/Daemon/DaemonProcessState.php
new file mode 100644
index 0000000..6ae3cd2
--- /dev/null
+++ b/library/Director/Daemon/DaemonProcessState.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Icinga\Module\Director\Daemon;
+
+use gipfl\Cli\Process;
+use gipfl\SystemD\NotifySystemD;
+
+class DaemonProcessState
+{
+ /** @var NotifySystemD|null */
+ protected $systemd;
+
+ protected $components = [];
+
+ protected $currentMessage;
+
+ protected $processTitle;
+
+ protected $state;
+
+ public function __construct($processTitle)
+ {
+ $this->processTitle = $processTitle;
+ $this->refreshMessage();
+ }
+
+ /**
+ * @param NotifySystemD|false $systemd
+ * @return $this
+ */
+ public function setSystemd($systemd)
+ {
+ if ($systemd) {
+ $this->systemd = $systemd;
+ } else {
+ $this->systemd = null;
+ }
+
+ return $this;
+ }
+
+ public function setState($message)
+ {
+ $this->state = $message;
+ $this->refreshMessage();
+
+ return $this;
+ }
+
+ public function setComponentState($name, $stateMessage)
+ {
+ if ($stateMessage === null) {
+ unset($this->components[$name]);
+ } else {
+ $this->components[$name] = $stateMessage;
+ }
+ $this->refreshMessage();
+ }
+
+ protected function refreshMessage()
+ {
+ $messageParts = [];
+ if ($this->state !== null && \strlen($this->state)) {
+ $messageParts[] = $this->state;
+ }
+ foreach ($this->components as $component => $message) {
+ $messageParts[] = "$component: $message";
+ }
+
+ $message = \implode(', ', $messageParts);
+
+ if ($message !== $this->currentMessage) {
+ $this->currentMessage = $message;
+ if (\strlen($message) === 0) {
+ Process::setTitle($this->processTitle);
+ } else {
+ Process::setTitle($this->processTitle . ": $message");
+ }
+
+ if ($this->systemd) {
+ $this->systemd->setStatus($message);
+ }
+ }
+ }
+}