59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
function renderBits(byte) {
|
|
const bits = document.getElementById("bits");
|
|
bits.innerHTML = "";
|
|
|
|
byte = Number(byte || 0);
|
|
|
|
for (let i = 7; i >= 0; i--) {
|
|
const v = (byte >> i) & 1;
|
|
|
|
const d = document.createElement("div");
|
|
d.className = "bit" + (v ? " on" : "");
|
|
d.textContent = v;
|
|
bits.appendChild(d);
|
|
}
|
|
}
|
|
|
|
async function update() {
|
|
try {
|
|
const r1 = await fetch("/api/health");
|
|
const r2 = await fetch("/api/history");
|
|
|
|
const h = await r1.json();
|
|
const hist = await r2.json();
|
|
|
|
console.log("health:", h);
|
|
console.log("history:", hist);
|
|
|
|
document.getElementById("status").textContent = h.status || "unknown";
|
|
|
|
const filled = h.stats?.filled ?? 0;
|
|
const uptime = Math.round(h.uptime_sec || 0);
|
|
|
|
document.getElementById("meta").textContent =
|
|
"uptime: " + uptime + "s | filled: " + filled;
|
|
|
|
const latest = Number(h.latest || 0);
|
|
|
|
document.getElementById("latest").textContent = latest;
|
|
|
|
renderBits(latest);
|
|
|
|
const arr = Array.isArray(hist.bytes) ? hist.bytes : [];
|
|
|
|
document.getElementById("history").innerHTML =
|
|
arr.map((b, i) =>
|
|
"[" + i + "] " +
|
|
(Number(b) & 15).toString(2).padStart(4, "0") +
|
|
" = " + (Number(b) & 15)
|
|
).join("<br>");
|
|
|
|
} catch (e) {
|
|
console.error("UPDATE ERROR:", e);
|
|
document.getElementById("status").textContent = "SERVER DOWN";
|
|
}
|
|
}
|
|
|
|
setInterval(update, 500);
|
|
update();
|