diff --git a/src/controllers/Domains.php b/src/controllers/Domains.php index 367eb78..34d99da 100644 --- a/src/controllers/Domains.php +++ b/src/controllers/Domains.php @@ -94,14 +94,8 @@ public function show(Request $request): Response $domain = models\Domain::requireFromRequest($request); - $alarms = models\Alarm::listByDomainIdOrderByDescCreatedAt($domain->id); - $last_heartbeat = models\Heartbeat::findLastHeartbeatByDomainId($domain->id); - $last_heartbeat_at = $last_heartbeat->created_at ?? null; - return Response::ok('domains/show.phtml', [ 'domain' => $domain, - 'last_heartbeat_at' => $last_heartbeat_at, - 'alarms' => $alarms, ]); } diff --git a/src/jobs/CheckAlarms.php b/src/jobs/CheckAlarms.php index 356c99d..75969d7 100644 --- a/src/jobs/CheckAlarms.php +++ b/src/jobs/CheckAlarms.php @@ -38,7 +38,7 @@ public function perform(): void $results = []; foreach ($domains as $domain) { - $heartbeat = models\Heartbeat::findLastHeartbeatByDomainId($domain->id); + $heartbeat = $domain->lastHeartbeat(); if (!$heartbeat) { continue; } diff --git a/src/models/Domain.php b/src/models/Domain.php index f55b085..972ea03 100644 --- a/src/models/Domain.php +++ b/src/models/Domain.php @@ -40,7 +40,7 @@ public function setId(string $url): void public function status(): string { - $last_heartbeat = Heartbeat::findLastHeartbeatByDomainId($this->id); + $last_heartbeat = $this->lastHeartbeat(); if ($last_heartbeat) { if ($last_heartbeat->created_at <= \Minz\Time::ago(5, 'minutes')) { return 'unknown'; @@ -54,6 +54,24 @@ public function status(): string } } + /** + * @return Alarm[] + */ + public function alarms(): array + { + return Alarm::listByDomainIdOrderByDescCreatedAt($this->id); + } + + public function lastHeartbeat(): ?Heartbeat + { + return Heartbeat::findLastHeartbeatByDomainId($this->id); + } + + public function lastSuccessfulHeartbeat(): ?Heartbeat + { + return Heartbeat::findLastSuccessfulHeartbeatByDomainId($this->id); + } + /** * @return self[] */ diff --git a/src/models/Heartbeat.php b/src/models/Heartbeat.php index 9be7989..4dc24ce 100644 --- a/src/models/Heartbeat.php +++ b/src/models/Heartbeat.php @@ -51,6 +51,27 @@ public static function initError(string $domain_id, string $details): self } public static function findLastHeartbeatByDomainId(string $domain_id): ?self + { + $sql = <<<'SQL' + SELECT * FROM heartbeats + WHERE domain_id = ? + ORDER BY created_at DESC + LIMIT 1 + SQL; + + $database = Database::get(); + $statement = $database->prepare($sql); + $statement->execute([$domain_id]); + + $result = $statement->fetch(); + if (is_array($result)) { + return self::fromDatabaseRow($result); + } else { + return null; + } + } + + public static function findLastSuccessfulHeartbeatByDomainId(string $domain_id): ?self { $sql = <<<'SQL' SELECT * FROM heartbeats diff --git a/src/views/domains/show.phtml b/src/views/domains/show.phtml index 3a0731b..8443a58 100644 --- a/src/views/domains/show.phtml +++ b/src/views/domains/show.phtml @@ -25,9 +25,10 @@
- +lastSuccessfulHeartbeat(); ?> +- = _f('Last ping on %s', _d($last_heartbeat_at, 'EEE d MMM YYYY, HH:mm:ss')) ?> + = _f('Last ping on %s', _d($last_successful_heartbeat->created_at, 'EEE d MMM YYYY, HH:mm:ss')) ?>
@@ -37,6 +38,7 @@ +alarms(); ?>