Connor McCutcheon
/ SkyCode
errorlog.go
go
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
}
No comments yet.