Skip to content

Latest commit

 

History

History
69 lines (52 loc) · 2.69 KB

File metadata and controls

69 lines (52 loc) · 2.69 KB

Ping-Status-App

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

Features

  • 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=csv an allen Listen-Endpoints (UTF-8 BOM, öffnet sauber in Excel), interaktive Doku via Swagger unter /docs
  • Health-Endpoint inkl. Disk-Belegung

API

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

Funktionsweise

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 mit created_at
  • current_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).

Installation

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.py

Danach http://<server_ip>:8000 öffnen.

Weitere Screenshots (Hostnamen redigiert): Neu heute · Nie online

Lizenz

GPLv2 — siehe LICENSE.