42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package manifest
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
type sqliteLogWriter struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewSQLiteLogWriter(db *sql.DB) (LogWriter, error) {
|
|
_, err := db.Exec(`CREATE TABLE IF NOT EXISTS logs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
ts INTEGER NOT NULL,
|
|
level TEXT NOT NULL,
|
|
event TEXT NOT NULL,
|
|
asset_id TEXT,
|
|
album TEXT,
|
|
filename TEXT,
|
|
size INTEGER,
|
|
cloud TEXT,
|
|
duration_ms INTEGER,
|
|
message TEXT
|
|
)`)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_, _ = db.Exec(`CREATE INDEX IF NOT EXISTS idx_logs_ts ON logs(ts)`)
|
|
_, _ = db.Exec(`CREATE INDEX IF NOT EXISTS idx_logs_event ON logs(event)`)
|
|
return &sqliteLogWriter{db: db}, nil
|
|
}
|
|
|
|
func (w *sqliteLogWriter) Log(e LogEntry) {
|
|
if w.db == nil {
|
|
return
|
|
}
|
|
w.db.Exec(`INSERT INTO logs (ts, level, event, asset_id, album, filename, size, cloud, duration_ms, message) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
e.Timestamp, e.Level, e.Event, e.AssetID, e.Album, e.Filename, e.Size, e.Cloud, e.DurationMs, e.Message)
|
|
}
|
|
|
|
func (w *sqliteLogWriter) Close() { _ = w }
|