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
This commit is contained in:
@@ -21,8 +21,8 @@ func InitDB() (*DB, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Tabelle erstellen
|
||||
createTableSQL := `
|
||||
// PC-Tabelle erstellen
|
||||
createPCTableSQL := `
|
||||
CREATE TABLE IF NOT EXISTS pcs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
@@ -32,7 +32,24 @@ func InitDB() (*DB, error) {
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
|
||||
_, err = db.Exec(createTableSQL)
|
||||
_, err = db.Exec(createPCTableSQL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Log-Tabelle erstellen
|
||||
createLogTableSQL := `
|
||||
CREATE TABLE IF NOT EXISTS 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
|
||||
);`
|
||||
|
||||
_, err = db.Exec(createLogTableSQL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -134,3 +151,92 @@ func (db *DB) GetPCByID(id int) (*models.PC, error) {
|
||||
|
||||
return &pc, nil
|
||||
}
|
||||
|
||||
// CreateLog erstellt einen neuen Log-Eintrag
|
||||
func (db *DB) CreateLog(pcID int, pcName, mac, trigger string) (*models.LogEvent, error) {
|
||||
now := time.Now()
|
||||
result, err := db.Exec(
|
||||
"INSERT INTO wol_logs (timestamp, pc_id, pc_name, mac, trigger) VALUES (?, ?, ?, ?, ?)",
|
||||
now, pcID, pcName, mac, trigger,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
id, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &models.LogEvent{
|
||||
ID: int(id),
|
||||
Timestamp: now,
|
||||
PCID: pcID,
|
||||
PCName: pcName,
|
||||
MAC: mac,
|
||||
Trigger: trigger,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetAllLogs holt alle Log-Einträge aus der Datenbank
|
||||
func (db *DB) GetAllLogs() ([]models.LogEvent, error) {
|
||||
rows, err := db.Query("SELECT id, timestamp, pc_id, pc_name, mac, trigger FROM wol_logs ORDER BY timestamp DESC")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var logs []models.LogEvent
|
||||
for rows.Next() {
|
||||
var log models.LogEvent
|
||||
err := rows.Scan(&log.ID, &log.Timestamp, &log.PCID, &log.PCName, &log.MAC, &log.Trigger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logs = append(logs, log)
|
||||
}
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
// GetLogsByPCID holt alle Log-Einträge für einen bestimmten PC
|
||||
func (db *DB) GetLogsByPCID(pcID int) ([]models.LogEvent, error) {
|
||||
rows, err := db.Query("SELECT id, timestamp, pc_id, pc_name, mac, trigger FROM wol_logs WHERE pc_id = ? ORDER BY timestamp DESC", pcID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var logs []models.LogEvent
|
||||
for rows.Next() {
|
||||
var log models.LogEvent
|
||||
err := rows.Scan(&log.ID, &log.Timestamp, &log.PCID, &log.PCName, &log.MAC, &log.Trigger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logs = append(logs, log)
|
||||
}
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
// GetRecentLogsByPCID holt die letzten 5 Log-Einträge für einen bestimmten PC
|
||||
func (db *DB) GetRecentLogsByPCID(pcID int) ([]models.LogEvent, error) {
|
||||
rows, err := db.Query("SELECT id, timestamp, pc_id, pc_name, mac, trigger FROM wol_logs WHERE pc_id = ? ORDER BY timestamp DESC LIMIT 5", pcID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var logs []models.LogEvent
|
||||
for rows.Next() {
|
||||
var log models.LogEvent
|
||||
err := rows.Scan(&log.ID, &log.Timestamp, &log.PCID, &log.PCName, &log.MAC, &log.Trigger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logs = append(logs, log)
|
||||
}
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user