package models
import (
"time"
"theskyscape.com/repo/skykit"
)
type ErrorLog struct {
skykit.Model
Name string // Unique identifier like "saveFile:session_error"
Message string // Full error message
Count int // Number of occurrences
LastSeenAt time.Time
}
func (e *ErrorLog) GetModel() *skykit.Model {
return &e.Model
}
var ErrorLogs = skykit.Manage(DB, "error_logs", new(ErrorLog))
func init() {
go ErrorLogs.UniqueIndex("Name")
}
// LogError records an error, incrementing count if it already exists
func LogError(name, message string) {
existing, err := ErrorLogs.First("WHERE Name = ?", name)
if err == nil && existing != nil {
existing.Count++
existing.Message = message // Update with latest message
existing.LastSeenAt = time.Now()
ErrorLogs.Update(existing)
return
}
// Create new error log
errLog := ErrorLogs.New()
errLog.Name = name
errLog.Message = message
errLog.Count = 1
errLog.LastSeenAt = time.Now()
ErrorLogs.Insert(errLog)
}
// ListErrors returns all error logs ordered by last seen
func ListErrors() []*ErrorLog {
logs, _ := ErrorLogs.Search("ORDER BY LastSeenAt DESC LIMIT 100")
return logs
}
// ClearError removes an error log by ID
func ClearError(id string) error {
errLog, err := ErrorLogs.Get(id)
if err != nil {
return err
}
return ErrorLogs.Delete(errLog)
}
// ClearAllErrors removes all error logs
func ClearAllErrors() error {
logs, _ := ErrorLogs.Search("")
for _, l := range logs {
ErrorLogs.Delete(l)
}
return nil
}