feat: persist logs to DB, load on startup

This commit is contained in:
2026-05-16 15:25:08 -04:00
parent 4d375cf874
commit ed082e4080
7 changed files with 59 additions and 0 deletions
+5
View File
@@ -51,6 +51,11 @@ func (d *PostgresDialect) CreateTablesSQL() []string {
last_seen TIMESTAMP DEFAULT NOW(),
version TEXT DEFAULT ''
)`,
`CREATE TABLE IF NOT EXISTS logs (
id SERIAL PRIMARY KEY,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
)`,
}
}
+5
View File
@@ -51,6 +51,11 @@ func (d *SQLiteDialect) CreateTablesSQL() []string {
last_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
version TEXT DEFAULT ''
)`,
`CREATE TABLE IF NOT EXISTS logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
message TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)`,
}
}
+28
View File
@@ -300,6 +300,34 @@ func (s *SQLStore) DeleteNode(id string) error {
return err
}
func (s *SQLStore) SaveLog(message string) error {
_, err := s.db.Exec(s.q("INSERT INTO logs (message) VALUES (?)"), message)
if err != nil {
return err
}
_, err = s.db.Exec(s.q(`DELETE FROM logs WHERE id NOT IN (
SELECT id FROM logs ORDER BY created_at DESC LIMIT 200
)`))
return err
}
func (s *SQLStore) LoadLogs(limit int) ([]string, error) {
rows, err := s.db.Query(s.q("SELECT message FROM logs ORDER BY created_at DESC LIMIT ?"), limit)
if err != nil {
return nil, err
}
defer rows.Close()
var logs []string
for rows.Next() {
var msg string
if err := rows.Scan(&msg); err != nil {
return logs, err
}
logs = append(logs, msg)
}
return logs, rows.Err()
}
func (s *SQLStore) LoadAllHistory(limit int) (map[int][]models.CheckRecord, error) {
result := make(map[int][]models.CheckRecord)
rows, err := s.db.Query(s.q(`
+4
View File
@@ -45,6 +45,10 @@ type Store interface {
UpdateNodeLastSeen(id string) error
DeleteNode(id string) error
// Logs
SaveLog(message string) error
LoadLogs(limit int) ([]string, error)
// Backup & Restore
ExportData() (models.Backup, error)
ImportData(data models.Backup) error