diff --git a/pmolog/webloger.go b/pmolog/webloger.go
index 92d7d9bc..65c6bb56 100644
--- a/pmolog/webloger.go
+++ b/pmolog/webloger.go
@@ -2,6 +2,7 @@ package pmolog
import (
"container/ring"
+ "context"
"encoding/json"
"fmt"
"net/http"
@@ -103,7 +104,7 @@ func sseHandler(w http.ResponseWriter, r *http.Request) {
}
}
-// ---------- HTML ----------
+// ---------- HTML Dashboard ----------
var indexHTML = `
@@ -112,31 +113,54 @@ var indexHTML = `
🚀 Real-Time Logs
- 📝 Logs en temps réel
+
@@ -166,10 +200,25 @@ func indexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, indexHTML)
}
-func LoggerWeb(mux *http.ServeMux) {
+// LoggerWeb installe les routes et arrête le broker quand ctx est annulé.
+func LoggerWeb(ctx context.Context, mux *http.ServeMux) {
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true, FullTimestamp: true})
logrus.AddHook(SSELogHook{})
+
mux.HandleFunc("/log", indexHandler)
mux.HandleFunc("/log-sse", sseHandler)
+
+ // goroutine d'arrêt
+ go func() {
+ <-ctx.Done()
+ broker.mu.Lock()
+ for ch := range broker.clients {
+ close(ch)
+ delete(broker.clients, ch)
+ }
+ broker.mu.Unlock()
+ logrus.Info("Web logger stopped")
+ }()
+
logrus.Info("Web logger connected")
}
diff --git a/upnp/server.go b/upnp/server.go
index 18e877fa..8419401c 100644
--- a/upnp/server.go
+++ b/upnp/server.go
@@ -78,8 +78,6 @@ func (s *Server) Start() error {
s.mu.RLock()
- pmolog.LoggerWeb(mux)
-
mux.HandleFunc("/", s.ServeDebugIndex)
s.httpSrv = &http.Server{
@@ -125,6 +123,8 @@ func (s *Server) Run(ctx context.Context) error {
return fmt.Errorf("❌ failed to start server: %w", err)
}
+ pmolog.LoggerWeb(ctx, s.httpSrv.Handler.(*http.ServeMux))
+
s.sspd = ssdp.NewSSDPServer()
if err := s.sspd.Start(ctx); err != nil {
return fmt.Errorf("❌ failed to start SSDP server: %w", err)