Skip to content

The web interface

ernolf edited this page Sep 26, 2026 · 2 revisions

The web interface

Nine pages, one sidebar, and a bell that tells you when the cluster needs something. Every page runs as www-data and reaches /etc either directly — the files it owns — or through sudo dcm-cli.

Page map

The sidebar order matches this table.

Page File Description
Dashboard dashboard.php Server status (incl. listen addresses, port and running dnsmasq version), What differs? / Sync / Restart controls with live output
Configuration dnsconf.php Per-directive drop-in editor — schema-driven switches/selects with dnsmasq manual help
Hosts hosts.php Edit hosts/local — add/remove/enable/disable entries
Virtual Machines vms.php Edit hosts/vms + one-click subnet relocation
Isolated Hosts isolated.php Edit hosts/isolated — one row per name set, written to 127.0.0.1 and ::1; paste whole lists
Upstream DNS upstream.php Per-directive editor for the upstream group (no-resolv, resolv-file, server, …); servers go to upstream.conf
Fixed Addresses address.php Edit address.conf — domains answered from one fixed address instead of being forwarded
Live Log live.php Real-time SSE log viewer, two panels (local + remote), color-coded, layout toggle, dark mode
Analytics analytics.php Full log analysis — time range + server filter, persisted via cookie

Notifications

A bell in the top bar of every page is fed by polling action.php?action=health → dcm-cli health (on load, every 60 s, and immediately after a Sync/Restart on the Dashboard). It is greyed out when all is well and glows gold when there is something to do, derived purely from live state — no database:

  • Sync pending — a node's configuration differs (content-compared via rsync --checksum).
  • Restart pending — a drop-in or hosts file is newer than the running dnsmasq on some node (node-report). The editing pages write a file only when its content really changes, so re-saving an entry unchanged raises no alarm.
  • Version mismatch — the nodes run different dnsmasq versions. The message names each node's version and the one to upgrade to; the Dashboard shows the same warning above the server cards.
  • Feature mismatch — the versions match but the builds were compiled with different options, so the same configuration does not behave the same everywhere.
  • Unknown directive — a directive in the current configuration is not in some node's option list. That node's dnsmasq would exit at startup, so it is named together with the directive.

Clicking a notification jumps to the Dashboard, where What differs? (dcm-cli diff) lists the exact paths. Transient confirmations such as Saved. appear as a top-right toast and are not persisted (the editable pages redirect to ?saved=1, the toast fires once, then the query is stripped so a refresh does not repeat it). A persisted fault/notification history (unreachable node, lost upstream, with timestamps) backed by SQLite is a planned phase-2 feature.

See also

dcm

Getting started

Managing the cluster

Under the hood

What comes next

Clone this wiki locally