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

111 lines
3.8 KiB
Markdown

# 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