{# Plan 61/2b W2 — top machines by LLM spend card. D2 from per-machine-spend.md. Server-admin only — gated at template level in dashboard.html; the endpoint also enforces server-admin on the API side. Auto-refresh piggy-backs on overviewPage's 30s tick (see overview.js). Click any row → /admin/machines/ for the per-machine drill-down (W1 owns that page; this card is the "land here, then drill" entry point). `data.topMachinesSpend` is populated by overview.js (extended in plan 61/2b W2 to fetch `/api/admin/overview/top-machines-spend`). It is `null` while loading and an object once the request resolves; the object has `items` + `machine_id_column_pending` so we can flip between "live data" and "pending W1 migration" states. #} {% from 'admin/components/ui.html' import tooltip %} {# Decluttered: the whole card is hidden unless there's actual spend to show. An empty "No LLM spend" / "waiting for migration" card is pure noise on a quiet fleet — it reappears the moment a row lands. Shown while loading so the skeleton doesn't flash. #}

Top machines · LLM spend (24h)

server admin {{ tooltip('Per-machine cost attribution from the spend ledger. Burn-rate flags machines whose last-hour cost exceeds 5× their 7d hourly average.') }}
View all →