Vendor dashboard frontend assets

This commit is contained in:
Jordan Wages 2026-09-17 18:09:35 -05:00
commit 4587bdb144
4 changed files with 36 additions and 3 deletions

View file

@ -14,7 +14,7 @@ python3 -m venv .venv
pip install -r requirements.txt pip install -r requirements.txt
``` ```
The dashboard uses Bulma and Chart.js from their public CDNs. For an offline deployment, vendor those two assets and update `app/static/index.html`. Bulma and Chart.js are vendored under `app/static/vendor`, so the dashboard does not require browser access to a public CDN.
## Nginx log format ## Nginx log format

View file

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>Nginx Live Traffic Monitor</title> <title>Nginx Live Traffic Monitor</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css"> <link rel="stylesheet" href="/static/vendor/bulma.min.css">
<style> <style>
:root { --chart-grid: #d9e1ea; } :root { --chart-grid: #d9e1ea; }
[data-theme="dark"] { --chart-grid: #3b4654; } [data-theme="dark"] { --chart-grid: #3b4654; }
@ -23,6 +23,7 @@
<div class="navbar-end"><div class="navbar-item"><div class="select is-small"><select id="theme"><option value="system">System</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></div> <div class="navbar-end"><div class="navbar-item"><div class="select is-small"><select id="theme"><option value="system">System</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></div>
</div></nav> </div></nav>
<main class="section pt-5"><div class="container"> <main class="section pt-5"><div class="container">
<div class="notification is-danger is-light" id="frontend-error" hidden></div>
<div class="level mb-4"><div><h1 class="title is-4 mb-1">Traffic overview</h1><p class="subtitle is-6 mb-0" id="connection">Connecting to telemetry…</p></div> <div class="level mb-4"><div><h1 class="title is-4 mb-1">Traffic overview</h1><p class="subtitle is-6 mb-0" id="connection">Connecting to telemetry…</p></div>
<div class="field has-addons"><p class="control"><span class="select is-small"><select id="window"><option value="60">1 minute</option><option value="300" selected>5 minutes</option><option value="900">15 minutes</option><option value="3600">1 hour</option></select></span></p></div> <div class="field has-addons"><p class="control"><span class="select is-small"><select id="window"><option value="60">1 minute</option><option value="300" selected>5 minutes</option><option value="900">15 minutes</option><option value="3600">1 hour</option></select></span></p></div>
</div> </div>
@ -30,7 +31,16 @@
<div class="card mb-5"><div class="card-content"><div class="level mb-3"><div class="level-left"><h2 class="title is-5 mb-0">Throughput</h2></div><div class="level-right"><span class="tag is-light" id="updated">Waiting for data</span></div></div><div class="chart-wrap"><canvas id="traffic-chart"></canvas></div></div></div> <div class="card mb-5"><div class="card-content"><div class="level mb-3"><div class="level-left"><h2 class="title is-5 mb-0">Throughput</h2></div><div class="level-right"><span class="tag is-light" id="updated">Waiting for data</span></div></div><div class="chart-wrap"><canvas id="traffic-chart"></canvas></div></div></div>
<div class="card"><div class="card-content"><div class="columns"><div class="column is-one-quarter"><h2 class="title is-5">Host breakouts</h2><p class="help mb-3">Select hosts to compare their recent traffic.</p><div id="hosts" class="host-list"></div></div><div class="column"><div class="chart-wrap"><canvas id="host-chart"></canvas></div></div></div></div></div> <div class="card"><div class="card-content"><div class="columns"><div class="column is-one-quarter"><h2 class="title is-5">Host breakouts</h2><p class="help mb-3">Select hosts to compare their recent traffic.</p><div id="hosts" class="host-list"></div></div><div class="column"><div class="chart-wrap"><canvas id="host-chart"></canvas></div></div></div></div></div>
</div></main> </div></main>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js"></script> <script>
window.addEventListener('error', event => {
const box = document.getElementById('frontend-error');
if (box) {
box.hidden = false;
box.textContent = 'Dashboard error: ' + (event.message || 'frontend initialization failed');
}
});
</script>
<script src="/static/vendor/chart.umd.min.js"></script>
<script> <script>
const palette = ['#3273dc','#23d160','#ff3860','#ffdd57','#7957d5','#00d1b2','#f14668','#209cee']; const palette = ['#3273dc','#23d160','#ff3860','#ffdd57','#7957d5','#00d1b2','#f14668','#209cee'];
let selected = new Set(), latest = null, source; let selected = new Set(), latest = null, source;

3
app/static/vendor/bulma.min.css vendored Normal file

File diff suppressed because one or more lines are too long

20
app/static/vendor/chart.umd.min.js vendored Normal file

File diff suppressed because one or more lines are too long