Monitoring: Server-Auslastung über P42-S.M. mit Detailansicht und 2-Tage-Verlauf

- Neue Prüfart "Server-Auslastung (P42-S.M.)": Adresse + Token (Token bleibt
  im Backend, wird nie an den Browser gegeben)
- Karte zeigt CPU, RAM, vollste Platte, Load, Temperatur, Uptime
- Klick öffnet große Ansicht: Kacheln, Platten, Threads, Temperaturen,
  Netzwerk, Verlaufsdiagramme (6 h / 24 h / 2 Tage) mit Tooltip und Tabelle
- Hintergrund-Task speichert jede Minute einen Mittelwert (monitor_samples,
  2 Tage), unabhängig davon, ob die Seite offen ist
- Docker: zusätzlich im Netz p42, update-docker.sh legt es bei Bedarf an

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
guyg1474andClaude Opus 5.5 committed 2026-10-14 16:22:48 +02:00
1 parent 94bda25516
commit f16c8c73c6
13 files changed
+923 -35

No files matched your search

+25
View File
@@ -95,9 +95,26 @@ CREATE TABLE IF NOT EXISTS monitors (
name TEXT NOT NULL,
type TEXT NOT NULL,
target TEXT NOT NULL,
token TEXT, -- nur Typ "agent" (P42-S.M.); wird nie an den Browser gegeben
created_at TEXT NOT NULL
);
-- Verlauf der Server-Auslastung (Typ "agent"): ein Mittelwert pro Minute, 2 Tage lang
CREATE TABLE IF NOT EXISTS monitor_samples (
monitor_id INTEGER NOT NULL REFERENCES monitors(id) ON DELETE CASCADE,
ts INTEGER NOT NULL, -- Unix-Zeit, auf die Minute gerundet
cpu REAL,
mem REAL,
swap REAL,
load1 REAL,
rx REAL,
tx REAL,
rd REAL,
wr REAL,
temp REAL,
PRIMARY KEY (monitor_id, ts)
) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS household_items {HOUSEHOLD_TABLE};
-- Produktkatalog für die Vorschläge
@@ -290,6 +307,13 @@ def _migrate_kanban_priority(conn) -> None:
)
def _migrate_monitor_token(conn) -> None:
# Monitore aus der Zeit vor P42-S.M.: Spalte für den Token ergänzen
columns = {r["name"] for r in conn.execute("PRAGMA table_info(monitors)")}
if "token" not in columns:
conn.execute("ALTER TABLE monitors ADD COLUMN token TEXT")
def _migrate_kanban_completed(conn) -> None:
# Projekte "abgeschlossen": Spalte ergänzen, falls sie fehlt
columns = {r["name"] for r in conn.execute("PRAGMA table_info(kanban_projects)")}
@@ -327,6 +351,7 @@ def init() -> None:
conn.executescript(SCHEMA)
_migrate(conn)
_migrate_travel(conn)
_migrate_monitor_token(conn)
_migrate_kanban_categories(conn)
_migrate_kanban_completed(conn)
_migrate_kanban(conn)