Add Prometheus-backed home server status
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
(() => {
|
||||
const list = document.querySelector(".status-list");
|
||||
if (!list) return;
|
||||
|
||||
const esc = (value) => String(value ?? "").replace(/[&<>"']/g, (ch) => ({
|
||||
"&": "&",
|
||||
"<": "<",
|
||||
">": ">",
|
||||
"\"": """,
|
||||
"'": "'",
|
||||
}[ch]));
|
||||
|
||||
const players = (value) => {
|
||||
const n = Number(value || 0);
|
||||
return `${n.toLocaleString()} ${n === 1 ? "Player" : "Players"}`;
|
||||
};
|
||||
|
||||
const render = (data) => {
|
||||
const servers = Array.isArray(data?.servers) ? data.servers : [];
|
||||
if (!servers.length) return;
|
||||
|
||||
list.innerHTML = servers.map((server) => `
|
||||
<div class="status-row status-parent status-server" role="listitem">
|
||||
<span>${esc(server.label)}</span><span>${players(server.players)}</span>
|
||||
</div>
|
||||
${(server.ships || []).map((ship) => `
|
||||
<div class="status-row status-parent status-ship" role="listitem">
|
||||
<span>${esc(ship.label)}</span><span></span>
|
||||
</div>
|
||||
${(ship.rows || []).map((row) => `
|
||||
<div class="status-row status-child" role="listitem">
|
||||
<span>${esc(row.label)}</span><span>${players(row.players)}</span>
|
||||
</div>
|
||||
`).join("")}
|
||||
`).join("")}
|
||||
`).join("");
|
||||
};
|
||||
|
||||
fetch("/api/server-status", { cache: "no-store" })
|
||||
.then((res) => res.ok ? res.json() : null)
|
||||
.then((data) => data && render(data))
|
||||
.catch(() => {});
|
||||
})();
|
||||
Reference in New Issue
Block a user