/server in the dashboard SPA, backed by GET /api/server/overview) is a
read-only snapshot of the LiveKit deployment your agents run on, annotated with VoiceGateway’s own
metered cost. LiveKit’s own console shows the same topology but not the cost; this page joins the
two, using cheap control-plane reads only: no synthetic probes, no billed calls. See
What you can profile for how this fits against the agent and SIP
layers. Gated behind the admin scope like Diagnostics: a no-op locally with no API keys
configured, enforced once auth is enabled.
To run the process that serves this page, install voicegateway[livekit,dashboard]. Every
voicegw subcommand, including serve and dashboard, imports the LiveKit diagnostics modules at
startup, so [livekit] is required before the reads below even run; [dashboard] brings FastAPI,
uvicorn, and the built SPA. See Installation for the full extras matrix.
Connection
A badge reports one of four states:- Not configured: no
LIVEKIT_URL/LIVEKIT_API_KEY/LIVEKIT_API_SECRET(or alivekit:block invoicegw.yaml) resolved. A setup hint shows; nothing below is queried. - Configured: credentials resolved, but the
livekitextra isn’t installed. The page says “LiveKit SDK not installed. Install voicegateway[livekit].” - Unreachable: credentials and SDK both present, but every control-plane read failed.
- Connected: at least one control-plane read succeeded.
Rooms: the only cost-annotated section
Live rooms and their in-room or dispatched agents come from the LiveKit Server API. Each room is enriched with VoiceGateway’s own metered numbers over the trailing 24 hours: cost in USD, request count, and p95 latency, computed from local request records with the same percentile helper the Latency and Agents pages use: a database read, not a provider invoice. A failed read degrades to zeros rather than blanking the row. Nothing else on the page carries a cost number. Unreachable LiveKit shows that instead of listing rooms.SIP, egress, ingress
A read-only wrapper overlivekit.api: VoiceGateway does not create, edit, or delete trunks,
dispatch rules, egress jobs, or ingress endpoints here.
Auth fields, stream keys, and passwords are never read into the dashboard. If your deployment
doesn’t run one of these services, that panel alone shows “not available on this deployment” (or
whatever the control plane returned); the rest of the page is unaffected, since each section fails
independently. All three render only once LiveKit is configured. For SIP capacity and
answer-latency evidence under load, see
voicegw loadtest; this page only lists
what’s wired up.
Fleet
The worker roster is VoiceGateway-native, not a LiveKit read: the LiveKit Server API cannot report idle, registered-but-undispatched workers. It comes from your agents callingregister_worker(...), heartbeating to this collector (VOICEGW_COLLECTOR_URL +
VOICEGW_API_KEY). Columns: agent, status (idle/busy/offline), region, host, version, active
sessions, memory percent (RSS over the worker’s memory ceiling), last seen. Empty when nothing has
heartbeated, but also when the roster read itself fails: a failed read degrades to the same empty
list, and the dashboard doesn’t currently surface which one happened.
What this page cannot show you
No SFU node health or load bars: VoiceGateway never fabricates a number it hasn’t measured. The only SFU number it can produce is a timestamped probe fromvoicegw livekit sfu, which measures connection quality and costs nothing
because it never invokes STT, LLM, or TTS. For SFU host capacity over time (CPU, memory,
connection counts), see Node metrics instead.