Compare commits

...

2 Commits

3 changed files with 17 additions and 5 deletions
+4 -1
View File
@@ -182,7 +182,10 @@ function collect_all(): array {
} }
// ── Site Health (TTL 5 min) ─────────────────────────────────────────── // ── Site Health (TTL 5 min) ───────────────────────────────────────────
if ($fresh('sites', 300)) { // Fixed 2026-07-07: this guard was 300s but cron only runs every 180s, so sites
// were effectively only re-checked every OTHER run (~6 min gaps, felt "far apart").
// 170s keeps it just under the cron cadence so it re-checks on every run.
if ($fresh('sites', 170)) {
$results['sites'] = 'skipped (fresh)'; $results['sites'] = 'skipped (fresh)';
} else try { } else try {
$sites = [ $sites = [
+12 -4
View File
@@ -1388,6 +1388,14 @@ a{color:var(--cyan);text-decoration:none}
.stat-card .val{font-size:1.6rem;color:var(--cyan)} .stat-card .val{font-size:1.6rem;color:var(--cyan)}
.stat-card .sub{color:var(--text-dim);font-size:0.65rem;margin-top:4px} .stat-card .sub{color:var(--text-dim);font-size:0.65rem;margin-top:4px}
.stat-card .ok{color:var(--green)}.stat-card .warn{color:var(--yellow)}.stat-card .danger{color:var(--red)} .stat-card .ok{color:var(--green)}.stat-card .warn{color:var(--yellow)}.stat-card .danger{color:var(--red)}
/* Sites tab: domain names are much longer than typical stat labels (e.g.
parkerslingshotrentals.com) wider columns + no letter-spacing so they read cleanly. */
.site-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin-bottom:24px}
.site-card{background:var(--surface);border:1px solid var(--border);padding:16px}
.site-card .lbl{color:var(--text-dim);font-size:0.68rem;letter-spacing:0.5px;margin-bottom:8px;white-space:normal;word-break:break-word;line-height:1.4}
.site-card .val{font-size:1.2rem;color:var(--cyan)}
.site-card .sub{color:var(--text-dim);font-size:0.65rem;margin-top:4px}
.site-card .ok{color:var(--green)}.site-card .danger{color:var(--red)}
/* ── TABLE ── */ /* ── TABLE ── */
.tbl-wrap{background:var(--surface);border:1px solid var(--border);overflow-x:auto} .tbl-wrap{background:var(--surface);border:1px solid var(--border);overflow-x:auto}
@@ -3520,18 +3528,18 @@ async function loadSites() {
if (!sites.length) { document.getElementById('sites-content').innerHTML='<div class="empty">NO SITE DATA</div>'; return; } if (!sites.length) { document.getElementById('sites-content').innerHTML='<div class="empty">NO SITE DATA</div>'; return; }
const labels = { const labels = {
'jarvis':'jarvis.orbishosting.com','tomsjavajive':'tomsjavajive.com', 'jarvis':'jarvis.orbishosting.com','tomsjavajive':'tomsjavajive.com',
'epictravelexp':'epictravelexpeditions.com','parkersling':'parkerslingshot', 'epictravelexp':'epictravelexpeditions.com','parkerslingshotrentals':'parkerslingshotrentals.com',
'orbishosting':'orbishosting.com','orbisportal':'orbis.orbishosting.com','tomtomgames':'tomtomgames.com' 'orbishosting':'orbishosting.com','orbisportal':'orbis.orbishosting.com','tomtomgames':'tomtomgames.com'
}; };
let cards = sites.map(s => { let cards = sites.map(s => {
const up = s.fact_value==='up'; const up = s.fact_value==='up';
return `<div class="stat-card" style="border-left:3px solid ${up?'var(--green)':'var(--red)'}"> return `<div class="site-card" style="border-left:3px solid ${up?'var(--green)':'var(--red)'}">
<div class="lbl">${esc(labels[s.fact_key]||s.fact_key)}</div> <div class="lbl">${esc(labels[s.fact_key]||s.fact_key)}</div>
<div class="val ${up?'ok':'danger'}" style="font-size:1.2rem">${up?'ONLINE':'OFFLINE'}</div> <div class="val ${up?'ok':'danger'}">${up?'ONLINE':'OFFLINE'}</div>
<div class="sub">checked ${ago(s.updated_at)}</div> <div class="sub">checked ${ago(s.updated_at)}</div>
</div>`; </div>`;
}).join(''); }).join('');
document.getElementById('sites-content').innerHTML = `<div class="stat-grid">${cards}</div>`; document.getElementById('sites-content').innerHTML = `<div class="site-grid">${cards}</div>`;
} }
// ── USERS ───────────────────────────────────────────────────────────────────── // ── USERS ─────────────────────────────────────────────────────────────────────
+1
View File
@@ -57,3 +57,4 @@ file_put_contents(DEPLOY_QUEUE, $path . "\n", FILE_APPEND | LOCK_EX);
file_put_contents(DEPLOY_LOG, "[$ts] Queued deploy: $repo by $pusher -> $path\n", FILE_APPEND | LOCK_EX); file_put_contents(DEPLOY_LOG, "[$ts] Queued deploy: $repo by $pusher -> $path\n", FILE_APPEND | LOCK_EX);
echo json_encode(['ok' => true, 'queued' => $repo, 'path' => $path]); echo json_encode(['ok' => true, 'queued' => $repo, 'path' => $path]);
// deploy pipeline verified working 2026-07-07