-
-
Notifications
You must be signed in to change notification settings - Fork 0
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.
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 |
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.
- Hosts files — what the Hosts, Virtual Machines and Isolated Hosts pages write
- Directive catalog — the source of truth behind the Configuration page
- CLI reference — the commands the UI calls
© 2026 [ernolf] Raphael Gradenwitz · GPL-3.0-or-later · Report an issue
Getting started
Managing the cluster
Under the hood
What comes next