name = $name; $this->containerId = $containerId; $this->status = $status; $this->startedAt = $startedAt; $this->finishedAt = $finishedAt; $this->isNotFound = $isNotFound; } } function getDockerStatus($containerName): ServiceStatus { $dockerOutput = exec('sudo docker inspect --format=\'{{.Id}} {{.State.Status}} {{.State.StartedAt}} {{.State.FinishedAt}}\' ' . $containerName); if (empty($dockerOutput)) { return new ServiceStatus($containerName, '-', '-', '-', '-', true); } $parts = explode(' ', $dockerOutput); $status = new ServiceStatus($containerName, substr($parts[0], 0, 12), $parts[1], $parts[2], $parts[3], false); return $status; } function createStatusTable(ServiceStatus $status) { echo (''); echo (''); echo (''); echo (''); echo (''); echo (''); echo (''); echo (''); echo (''); echo ('
Container IDNameStatusStarted atFinished at
' . $status->containerId . '' . $status->name . '' . $status->status . '' . $status->startedAt . '' . $status->finishedAt . '
'); } function createStatusBanner(ServiceStatus $status) { if ($status->isNotFound) { createBanner('✗', "Container '" . $status->name . "' not found", 'bad'); return; } $state = $status->status === 'running' ? 'good' : 'bad'; $symbol = $status->status === 'running' ? '✓' : '✗'; createBanner($symbol, "Status of '$status->name' is '$status->status'", $state); } function createBanner($symbol, $message, $state) { echo ('
'); echo ("

$symbol $message

"); echo ('
'); } function doShellExec($command, $redirect, $action) { $output = shell_exec($command); //if (empty($output)) { // header("Location: $redirect"); // exit; //} echo "

Output of $action

"; echo "
$output
"; echo "

[Acknowledge]

"; exit; } function doSessionCheck($redirect) { if (!isset($_SESSION['token']) || $_SESSION['token'] !== getSuperSecretToken()) { header('Location: authenticate.php?redirect=/' . $redirect); exit; } } include('key.php'); function getSuperSecretToken() { global $superSecretToken; return $superSecretToken; }