diff options
author | Julien Veyssier <eneiluj@posteo.net> | 2020-08-31 13:18:18 +0300 |
---|---|---|
committer | Julien Veyssier <eneiluj@posteo.net> | 2020-09-01 14:06:47 +0300 |
commit | b46f39e70d804ed45259800e8d757469e4ae1e07 (patch) | |
tree | 2bdbdfcf0e16c5d21479cb3b7b8d487c95671c2a /lib/MatterbridgeManager.php | |
parent | f0561d0357c5b71d5817ff2a87dfba4923560dc9 (diff) |
show bridge process state and log
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
Diffstat (limited to 'lib/MatterbridgeManager.php')
-rw-r--r-- | lib/MatterbridgeManager.php | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/lib/MatterbridgeManager.php b/lib/MatterbridgeManager.php index bab70dbdf..5724c9c06 100644 --- a/lib/MatterbridgeManager.php +++ b/lib/MatterbridgeManager.php @@ -93,6 +93,36 @@ class MatterbridgeManager { } /** + * Get bridge process information for a specific room + * + * @param Room $room the room + * @return array process state and log + */ + public function getBridgeProcessState(Room $room): array { + $bridge = $this->getBridgeFromDb($room); + + $logContent = $this->getBridgeLog($room); + + $pid = $this->checkBridgeProcess($room, $bridge, false); + return [ + 'running' => ($pid !== 0), + 'log' => $logContent + ]; + } + + /** + * Get bridge log file content + * + * @param Room $room the room + * @return string log file content + */ + public function getBridgeLog(Room $room): string { + $outputPath = sprintf('/tmp/bridge-%s.log', $room->getToken()); + $logContent = file_get_contents($outputPath); + return $logContent ?? ''; + } + + /** * Edit bridge information for a room * * @param Room $room the room @@ -153,8 +183,9 @@ class MatterbridgeManager { /** * For one room, check mattermost process respects desired state * @param Room $room the room + * @return int the bridge process ID */ - public function checkBridge(Room $room): void { + public function checkBridge(Room $room): int { $bridge = $this->getBridgeOfRoom($room); $pid = $this->checkBridgeProcess($room, $bridge); if ($pid !== $bridge['pid']) { @@ -162,6 +193,7 @@ class MatterbridgeManager { $bridge['pid'] = $pid; $this->saveBridgeToDb($room, $bridge); } + return $pid; } private function getDataFolder(): ISimpleFolder { @@ -437,43 +469,48 @@ class MatterbridgeManager { * * @param Room $room the room * @param array $bridge bridge information + * @param $relaunch whether to launch the process if it's down but bridge is enabled * @return int the corresponding matterbridge process ID, 0 if none */ - private function checkBridgeProcess(Room $room, array $bridge): int { + private function checkBridgeProcess(Room $room, array $bridge, bool $relaunch = true): int { $pid = 0; if (isset($bridge['pid']) && intval($bridge['pid']) !== 0) { // config : there is a PID stored - $pid = intval($bridge['pid']); - $isRunning = $this->isRunning($pid); + $isRunning = $this->isRunning($bridge['pid']); // if bridge running and enabled is false : kill it if ($isRunning) { if ($bridge['enabled']) { $this->logger->info('Process running AND bridge enabled in config : doing nothing'); + $pid = $bridge['pid']; } else { - $this->logger->info('Process running AND bridge disabled in config : KILL ' . $pid); - $killed = $this->killPid($pid); + $this->logger->info('Process running AND bridge disabled in config : KILL ' . $bridge['pid']); + $killed = $this->killPid($bridge['pid']); if ($killed) { $pid = 0; } else { - $this->logger->info('Impossible to kill ' . $pid); - throw new ImpossibleToKillException('Impossible to kill bridge process [' . $pid . ']'); + $this->logger->info('Impossible to kill ' . $bridge['pid']); + throw new ImpossibleToKillException('Impossible to kill bridge process [' . $bridge['pid'] . ']'); } } } else { // no process found if ($bridge['enabled']) { - $this->logger->info('Process not found AND bridge enabled in config : relaunching'); - $pid = $this->launchMatterbridge($room); + if ($relaunch) { + $this->logger->info('Process not found AND bridge enabled in config : relaunching'); + $pid = $this->launchMatterbridge($room); + } } else { $this->logger->info('Process not found AND bridge disabled in config : doing nothing'); } } } elseif ($bridge['enabled']) { - // config : no PID stored - // config : enabled => launch it - $pid = $this->launchMatterbridge($room); - $this->logger->info('Launch process, PID is '.$pid); + if ($relaunch) { + // config : no PID stored + // config : enabled => launch it + $pid = $this->launchMatterbridge($room); + $this->logger->info('Launch process, PID is '.$pid); + } } else { $this->logger->info('No PID defined in config AND bridge disabled in config : doing nothing'); } |