Migrate to a better architectured project
This commit is contained in:
parent
cc5ed5f23e
commit
b1b9eaa028
21 changed files with 2712 additions and 1540 deletions
94
internal/logging/logging.go
Normal file
94
internal/logging/logging.go
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
package logging
|
||||
|
||||
import (
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/nemunaire/repeater/internal/models"
|
||||
)
|
||||
|
||||
var (
|
||||
logEntries []models.LogEntry
|
||||
logMutex sync.RWMutex
|
||||
websocketClients = make(map[*websocket.Conn]bool)
|
||||
clientsMutex sync.RWMutex
|
||||
)
|
||||
|
||||
// AddLog adds a new log entry
|
||||
func AddLog(source, message string) {
|
||||
logMutex.Lock()
|
||||
entry := models.LogEntry{
|
||||
Timestamp: time.Now(),
|
||||
Source: source,
|
||||
Message: message,
|
||||
}
|
||||
logEntries = append(logEntries, entry)
|
||||
|
||||
// Keep only the last 100 logs
|
||||
if len(logEntries) > 100 {
|
||||
logEntries = logEntries[len(logEntries)-100:]
|
||||
}
|
||||
logMutex.Unlock()
|
||||
|
||||
// Broadcast to WebSocket clients
|
||||
broadcastToWebSockets(entry)
|
||||
|
||||
// Log to console
|
||||
log.Printf("[%s] %s", source, message)
|
||||
}
|
||||
|
||||
// GetLogs returns all log entries
|
||||
func GetLogs() []models.LogEntry {
|
||||
logMutex.RLock()
|
||||
defer logMutex.RUnlock()
|
||||
|
||||
logs := make([]models.LogEntry, len(logEntries))
|
||||
copy(logs, logEntries)
|
||||
return logs
|
||||
}
|
||||
|
||||
// ClearLogs clears all log entries
|
||||
func ClearLogs() {
|
||||
logMutex.Lock()
|
||||
logEntries = []models.LogEntry{}
|
||||
logMutex.Unlock()
|
||||
|
||||
AddLog("Système", "Logs effacés")
|
||||
}
|
||||
|
||||
// RegisterWebSocketClient registers a new WebSocket client
|
||||
func RegisterWebSocketClient(conn *websocket.Conn) {
|
||||
clientsMutex.Lock()
|
||||
websocketClients[conn] = true
|
||||
clientsMutex.Unlock()
|
||||
|
||||
// Send existing logs to the new client
|
||||
logMutex.RLock()
|
||||
for _, entry := range logEntries {
|
||||
conn.WriteJSON(entry)
|
||||
}
|
||||
logMutex.RUnlock()
|
||||
}
|
||||
|
||||
// UnregisterWebSocketClient removes a WebSocket client
|
||||
func UnregisterWebSocketClient(conn *websocket.Conn) {
|
||||
clientsMutex.Lock()
|
||||
delete(websocketClients, conn)
|
||||
clientsMutex.Unlock()
|
||||
}
|
||||
|
||||
// broadcastToWebSockets sends a log entry to all connected WebSocket clients
|
||||
func broadcastToWebSockets(entry models.LogEntry) {
|
||||
clientsMutex.RLock()
|
||||
defer clientsMutex.RUnlock()
|
||||
|
||||
for client := range websocketClients {
|
||||
err := client.WriteJSON(entry)
|
||||
if err != nil {
|
||||
client.Close()
|
||||
delete(websocketClients, client)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue