- 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
111 lines
3.8 KiB
Markdown
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
|