Kleines, self-contained Monitoring-Dashboard: holt per Zonentransfer (AXFR) alle A-Records einer DNS-Zone, pingt jeden Host im Intervall und zeigt den aktuellen Status in einem Web-Dashboard — dazu eine JSON-API mit CSV-Export.
- Dashboard (eine Seite, dark theme, keine externen Abhängigkeiten — kein CDN, funktioniert in Offline-Netzen): KPI-Kacheln (Gesamt / Online / Nicht erreichbar / Nie online / Neu heute), drei Tabs, Live-Suche, sortierbare Spalten (IPs numerisch), Status-Pills, Pagination, Auto-Refresh alle 60 s
- Statuswechsel-Log: gespeichert werden nur echte Übergänge (online ↔ nicht erreichbar) — die Datenbank bleibt dauerhaft winzig (wenige hundert KB), egal wie lange die App läuft
- JSON-API mit
?format=csvan allen Listen-Endpoints (UTF-8 BOM, öffnet sauber in Excel), interaktive Doku via Swagger unter/docs - Health-Endpoint inkl. Disk-Belegung
| Endpoint | Beschreibung |
|---|---|
GET /api/results |
Aktueller Ping-Status je Host/IP-Paar |
GET /api/hosts/today |
Heute erstmals gesehene Hostnamen |
GET /api/hosts/never_online |
Hosts ohne jemals einen erfolgreichen Ping |
GET /api/changes?limit=200 |
Letzte Statuswechsel, neueste zuerst |
DELETE /api/hosts/never_online |
Entfernt diese Hosts (kommen bei der nächsten Runde wieder, solange im DNS) |
GET /health |
Status + Disk-Belegung |
python main.py startet zwei Prozesse: einen uvicorn-Webserver und eine
Scheduler-Schleife. Pro Runde überträgt der Scheduler die Zone, pingt alle
Hosts parallel (begrenzt per Semaphore) und verbucht die Runde in einer
einzigen SQLite-Transaktion:
hostnames— jeder je gesehene Hostname mitcreated_atcurrent_status— genau eine Zeile je Host/IP-Paar (Status, zuletzt geprüft, zuletzt online)status_changes— Append-only-Log nur der echten Wechsel
SQLite läuft im WAL-Modus, damit beide Prozesse parallel arbeiten können.
Der Code verzichtet bewusst auf INSERT … ON CONFLICT DO UPDATE und läuft
so auch auf SQLite 3.22+ (z. B. Ubuntu 18.04).
Benötigt Python 3.9+ und einen DNS-Server, der Zonentransfers (AXFR) für die
Maschine erlaubt, auf der die App läuft — für Windows-DNS siehe
Windows DNS Server Anleitung.md.
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
# app.config in main.py anpassen: dns_server, dns_zone, server_ip
./venv/bin/python main.pyDanach http://<server_ip>:8000 öffnen.
Weitere Screenshots (Hostnamen redigiert): Neu heute · Nie online
GPLv2 — siehe LICENSE.
