37 lines
1.3 KiB
HTML
Executable File
37 lines
1.3 KiB
HTML
Executable File
<!doctype html>
|
|
<html class="h-full">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Log: {{ slug }}</title>
|
|
<link rel="stylesheet" href="{{ url_for('static_file', filename='tailwind.css') }}">
|
|
</head>
|
|
<body class="h-full bg-slate-950 text-slate-100">
|
|
<div class="max-w-5xl mx-auto px-4 py-4 space-y-2">
|
|
<div class="flex items-center justify-between mb-2">
|
|
<div>
|
|
<h1 class="text-sm font-semibold">Log for <span class="font-mono text-sky-400">{{ slug }}</span></h1>
|
|
<p class="text-[0.65rem] text-slate-400">Live tail of wget output (auto-refreshing).</p>
|
|
</div>
|
|
<a href="/mirrors/{{ slug }}/" target="_blank" class="text-xs text-sky-400 hover:text-sky-200">Open mirror</a>
|
|
</div>
|
|
<div class="border border-slate-800 rounded-xl bg-slate-950/90 max-h-[75vh] overflow-y-auto">
|
|
<pre id="log" class="text-[0.65rem] p-3 font-mono whitespace-pre-wrap"></pre>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
const logEl = document.getElementById('log');
|
|
async function pollLog() {
|
|
try {
|
|
const resp = await fetch("{{ url_for('log_tail', slug=slug) }}");
|
|
if (!resp.ok) return;
|
|
const text = await resp.text();
|
|
logEl.textContent = text;
|
|
logEl.parentElement.scrollTop = logEl.parentElement.scrollHeight;
|
|
} catch (e) {}
|
|
}
|
|
setInterval(pollLog, 1500);
|
|
pollLog();
|
|
</script>
|
|
</body>
|
|
</html>
|