# 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
