Files
medi-wol/LOGGING_README.md
Markus b6888ca5da Implementiere umfassendes Logging-System für WOL-Ereignisse
- Neue Log-Tabelle in der Datenbank
- Automatisches Logging bei WOL-Button-Klicks
- Dedizierte Logs-Seite mit Bootstrap-Design
- Tooltips mit letzten 5 WOL-Ereignissen pro PC
- API-Endpunkte für Log-Verwaltung
- Einheitliches Design zwischen Haupt- und Logs-Seite
- Vollständige Dokumentation des Logging-Systems
2025-08-22 07:16:14 +02:00

3.8 KiB

Medi-WOL Logging-System

Übersicht

Das Medi-WOL Logging-System protokolliert alle Wake-on-LAN (WOL) Ereignisse in der Datenbank und bietet verschiedene Möglichkeiten, diese Logs anzuzeigen und zu verwalten.

Funktionen

1. Automatisches Logging

  • WOL-Ereignisse: Jedes Mal, wenn ein PC über die Web-Oberfläche aufgeweckt wird, wird automatisch ein Log-Eintrag erstellt
  • Auslöser-Tracking: Unterscheidung zwischen manuellen Button-Klicks und automatischen Cron-Jobs
  • Vollständige Protokollierung: Timestamp, PC-Name, MAC-Adresse und Auslöser werden gespeichert

2. Log-Anzeige

  • Dedizierte Logs-Seite: Übersicht aller WOL-Ereignisse unter /logs
  • Tooltips: Zeigt die letzten 5 WOL-Ereignisse für jeden PC als Tooltip über der Tabellenzeile
  • Sortierung: Logs werden nach Zeitstempel sortiert (neueste zuerst)

3. API-Endpunkte

  • GET /api/logs - Alle Log-Einträge abrufen
  • GET /api/logs/pc/:id - Alle Logs für einen bestimmten PC
  • GET /api/logs/pc/:id/recent - Die letzten 5 Logs für einen bestimmten PC

Datenbankstruktur

Tabelle: wol_logs

CREATE TABLE wol_logs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    pc_id INTEGER NOT NULL,
    pc_name TEXT NOT NULL,
    mac TEXT NOT NULL,
    trigger TEXT NOT NULL,
    FOREIGN KEY (pc_id) REFERENCES pcs (id) ON DELETE CASCADE
);

Felder

  • id: Eindeutige ID des Log-Eintrags
  • timestamp: Zeitstempel des WOL-Ereignisses
  • pc_id: Referenz auf den PC (Foreign Key)
  • pc_name: Name des PCs (für bessere Lesbarkeit)
  • mac: MAC-Adresse des PCs
  • trigger: Auslöser des WOL-Ereignisses ("button" oder "cron")

Verwendung

1. Logs-Seite aufrufen

Navigieren Sie zu http://localhost:8080/logs um alle WOL-Logs anzuzeigen.

2. Tooltips verwenden

  • Bewegen Sie den Mauszeiger über eine PC-Zeile in der Haupttabelle
  • Ein Tooltip zeigt die letzten 5 WOL-Ereignisse für diesen PC an

3. API verwenden

// Alle Logs abrufen
const response = await fetch('/api/logs');
const logs = await response.json();

// Logs für einen bestimmten PC abrufen
const pcLogs = await fetch(`/api/logs/pc/${pcId}`);
const logs = await pcLogs.json();

// Letzte 5 Logs für einen PC abrufen
const recentLogs = await fetch(`/api/logs/pc/${pcId}/recent`);
const logs = await recentLogs.json();

Erweiterungen

Cron-Job Logging

Das System ist vorbereitet für automatische WOL-Ereignisse über Cron-Jobs. Diese würden mit dem Trigger "cron" protokolliert werden.

Log-Bereinigung

Für Produktionsumgebungen sollte eine Log-Bereinigung implementiert werden, um alte Log-Einträge nach einem bestimmten Zeitraum zu löschen.

Export-Funktionalität

Zukünftige Versionen könnten CSV- oder PDF-Export der Logs bieten.

Technische Details

Implementierung

  • Backend: Go mit Gin-Framework
  • Datenbank: SQLite mit Foreign Key Constraints
  • Frontend: HTML, CSS, JavaScript mit Bootstrap
  • Tooltips: Bootstrap Tooltip-System mit HTML-Inhalt

Sicherheit

  • HTML-Escaping für alle Benutzereingaben
  • Validierung der API-Parameter
  • Keine sensiblen Daten in den Logs

Performance

  • Indizierte Datenbankabfragen
  • Lazy Loading der Tooltips
  • Begrenzte Anzahl von Log-Einträgen pro Tooltip (5)

Fehlerbehebung

Häufige Probleme

  1. Tooltips werden nicht angezeigt: Überprüfen Sie, ob Bootstrap korrekt geladen ist
  2. Logs werden nicht gespeichert: Überprüfen Sie die Datenbankverbindung und -berechtigungen
  3. Fehler beim Laden der Logs: Überprüfen Sie die API-Endpunkte und die Datenbankstruktur

Debugging

  • Überprüfen Sie die Browser-Konsole auf JavaScript-Fehler
  • Überprüfen Sie die Server-Logs auf Backend-Fehler
  • Testen Sie die API-Endpunkte direkt mit einem HTTP-Client