81 lines
1.4 KiB
Go
81 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"sync"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// LogBuffer garde les derniers logs en mémoire
|
|
type LogBuffer struct {
|
|
entries []LogEntry
|
|
maxSize int
|
|
mutex sync.RWMutex
|
|
}
|
|
|
|
type LogEntry struct {
|
|
Timestamp string `json:"timestamp"`
|
|
Level string `json:"level"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
var logBuffer *LogBuffer
|
|
|
|
func NewLogBuffer(maxSize int) *LogBuffer {
|
|
return &LogBuffer{
|
|
entries: make([]LogEntry, 0, maxSize),
|
|
maxSize: maxSize,
|
|
}
|
|
}
|
|
|
|
func (lb *LogBuffer) Add(entry LogEntry) {
|
|
lb.mutex.Lock()
|
|
defer lb.mutex.Unlock()
|
|
|
|
lb.entries = append(lb.entries, entry)
|
|
|
|
// Garder seulement les N derniers
|
|
if len(lb.entries) > lb.maxSize {
|
|
lb.entries = lb.entries[1:]
|
|
}
|
|
}
|
|
|
|
func (lb *LogBuffer) GetAll() []LogEntry {
|
|
lb.mutex.RLock()
|
|
defer lb.mutex.RUnlock()
|
|
|
|
// Retourner une copie
|
|
result := make([]LogEntry, len(lb.entries))
|
|
copy(result, lb.entries)
|
|
return result
|
|
}
|
|
|
|
// Hook pour capturer les logs
|
|
type LogHook struct {
|
|
buffer *LogBuffer
|
|
}
|
|
|
|
func (h *LogHook) Levels() []log.Level {
|
|
return log.AllLevels
|
|
}
|
|
|
|
func (h *LogHook) Fire(entry *log.Entry) error {
|
|
logEntry := LogEntry{
|
|
Timestamp: entry.Time.Format("02-01-2006 15:04:05"),
|
|
Level: entry.Level.String(),
|
|
Message: entry.Message,
|
|
}
|
|
|
|
h.buffer.Add(logEntry)
|
|
|
|
// Broadcaster vers les clients WebSocket connectés
|
|
if httpServerInstance != nil {
|
|
httpServerInstance.broadcast <- WSMessage{
|
|
Type: "appLog",
|
|
Data: logEntry,
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|