Files
2026-07-24 21:37:03 +02:00

49 lines
1.8 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>boehmitools · Läufe</title>
<link rel="stylesheet" href="/shared/boehmi.css">
</head>
<body data-bt-title="Läufe" data-bt-icon="↻">
<main class="bt-main">
<div class="bt-pagehead">
<h1>Läufe</h1>
<p>Alle Ausführungen der Kommandozeilen-Tools dieser Sitzung.</p>
</div>
<div class="bt-card bt-card-flush">
<table class="bt-table">
<thead><tr><th>Tool</th><th>Aufgabe</th><th>Status</th><th>Dauer</th><th></th></tr></thead>
<tbody id="rows"></tbody>
</table>
</div>
<div id="empty" class="bt-empty bt-hidden">Noch keine Läufe in dieser Sitzung.</div>
</main>
<script src="/shared/boehmi.js"></script>
<script>
const badge = (s) => ({
running: '<span class="bt-badge info"><span class="bt-dot"></span>läuft</span>',
done: '<span class="bt-badge ok">erfolgreich</span>',
failed: '<span class="bt-badge err">fehlgeschlagen</span>',
cancelled: '<span class="bt-badge warn">abgebrochen</span>',
}[s] || s);
async function load() {
const { jobs } = await fetch("/api/jobs").then((r) => r.json());
document.getElementById("empty").classList.toggle("bt-hidden", jobs.length > 0);
document.getElementById("rows").innerHTML = jobs.map((j) => `
<tr>
<td><b>${BT.escape(j.plugin_name)}</b></td>
<td>${BT.escape(j.label)}<div class="bt-muted bt-mono" style="font-size:11px">${BT.escape(j.command)}</div></td>
<td>${badge(j.status)}</td>
<td class="bt-muted">${j.duration}s</td>
<td><a class="bt-btn mini" href="/plugins/${BT.escape(j.plugin)}/?job=${BT.escape(j.id)}">Protokoll</a></td>
</tr>`).join("");
}
load();
setInterval(load, 4000);
</script>
</body>
</html>