Website-fabianschieder/index.php

64 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
/*
* Absolute Webpfade verwenden!
* Ordnerstruktur im Webroot:
* /icons/...
* /style.css
*/
$projects = require __DIR__ . '/includes/config/projects.php';
$serverStatusTargets = require __DIR__ . '/includes/config/server_status_targets.php';
require_once __DIR__ . '/includes/lib/server_status.php';
require_once __DIR__ . '/includes/lib/view_helpers.php';
// ── Serverstatus (mit Cache) ──────────────────────────────────────────────
$cacheTtlSeconds = 30;
$cacheKey = 'server_status_v4';
$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));
}
// Index: url => status
$serverStatusByUrl = [];
if (is_array($serverStatus)) {
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';
?>
<main>
<?php foreach ($projects as $category => $items): ?>
<?php require __DIR__ . '/includes/views/projects_section.php'; ?>
<?php endforeach; ?>
</main>
<?php
require __DIR__ . '/includes/views/footer.php';
require __DIR__ . '/includes/views/layout_foot.php';