diff --git a/index.php b/index.php index 7db2710..16d001b 100644 --- a/index.php +++ b/index.php @@ -15,14 +15,65 @@ require_once __DIR__ . '/includes/lib/server_status.php'; require_once __DIR__ . '/includes/lib/view_helpers.php'; // ── Serverstatus ───────────────────────────────────────────────────────── -// Wichtig für Performance: Beim initialen Rendern NICHT blockierend live prüfen. -// Die Badges starten als „Unbekannt“ und werden clientseitig über /server_status.php aktualisiert. +// Performance: Beim ersten Rendern sofort antworten (=> Unbekannt). +// Nach ~1s lädt die Seite einmal neu mit ?status=1 und rendert dann serverseitig Online/Offline. +$shouldComputeStatus = isset($_GET['status']) && $_GET['status'] === '1'; + $serverStatusByUrl = []; +if ($shouldComputeStatus) { + $cacheTtlSeconds = 30; + $cacheKey = 'server_status_v5'; + $cacheFile = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $cacheKey . '.json'; + + $serverStatus = null; + if (is_file($cacheFile)) { + $raw = @file_get_contents($cacheFile); + if ($raw !== false) { + $decoded = json_decode($raw, true); + if (is_array($decoded) && isset($decoded['ts'], $decoded['data']) && is_array($decoded['data'])) { + $age = time() - (int)$decoded['ts']; + if ($age >= 0 && $age <= $cacheTtlSeconds) { + $serverStatus = $decoded['data']; + } + } + } + } + + if (!is_array($serverStatus)) { + $serverStatus = build_server_status($serverStatusTargets); + @file_put_contents($cacheFile, json_encode(['ts' => time(), 'data' => $serverStatus], JSON_UNESCAPED_SLASHES)); + } + + foreach ($serverStatus as $svc) { + if (!empty($svc['url']) && is_string($svc['url'])) { + $serverStatusByUrl[$svc['url']] = $svc; + } + } +} require __DIR__ . '/includes/views/layout_head.php'; require __DIR__ . '/includes/views/header.php'; ?> + + + +
$items): ?>