# 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` ```sql 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 ```javascript // 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