diff --git a/frontend/index.html b/frontend/index.html index 62664d0..e7dd161 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -70,18 +70,37 @@ function setBtn(id, loading, label) { function barChart(rows, labelKey, valueKey) { if (!rows?.length) return '

No data

' - const max = Math.max(...rows.map(r => r[valueKey] || 0), 1) - const W = 680, H = 140, padL = 10, padB = 24 - const bw = Math.max(4, Math.floor((W - padL) / rows.length) - 3) - const bars = rows.map((r, i) => { - const bh = Math.floor(((r[valueKey] || 0) / max) * (H - padB - 4)) - const x = padL + i * (bw + 3) - const y = H - padB - bh - const lbl = esc(String(r[labelKey] || '').slice(0, 10)) - return ` - ${lbl}` + const vals = rows.map(r => r[valueKey] || 0) + const max = Math.max(...vals, 1) + const W = 680, H = 160, padL = 52, padR = 10, padT = 24, padB = 28 + const chartW = W - padL - padR + const chartH = H - padT - padB + const bw = Math.max(8, Math.floor(chartW / rows.length) - 4) + + // Y-axis ticks (4 lines) + const ticks = [0, 0.25, 0.5, 0.75, 1].map(t => { + const val = Math.round(max * t) + const y = padT + chartH - Math.floor(t * chartH) + const label = val >= 1000 ? (val/1000).toFixed(1)+'k' : val + return ` + ${label}` }).join('') - return `${bars}` + + const bars = rows.map((r, i) => { + const val = r[valueKey] || 0 + const bh = Math.max(2, Math.floor((val / max) * chartH)) + const x = padL + i * (chartW / rows.length) + (chartW / rows.length - bw) / 2 + const y = padT + chartH - bh + // date label: show MM/DD + const lbl = esc(String(r[labelKey] || '').slice(5, 10)) + // value label on top of bar + const valLbl = val >= 1000 ? (val/1000).toFixed(1)+'k' : val + return ` + ${valLbl} + ${lbl}` + }).join('') + + return `${ticks}${bars}` } // ── Home ────────────────────────────────────────────────────────────────── @@ -265,7 +284,10 @@ function renderIngest() {
-

Daily Event Volume

+
+

Daily Event Volume

+ events ingested per day +

Loading…