From 79b1db518095fa43de2a8633ccfd7cf062a051a2 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Sun, 7 Sep 2025 08:18:31 +0200 Subject: [PATCH] version 2 chatgpt --- pmolog/webloger.go | 63 ++++++++++++++++++++++++++++++++++++++++------ upnp/server.go | 4 +-- 2 files changed, 58 insertions(+), 9 deletions(-) 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

+
+

📝 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)