From defea76033f75804a45bbb650e19cb16c677295b Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 28 Jan 2026 03:12:23 -0800 Subject: feat: Add SSE streaming for instant page load and real-time updates New refresh_mode 'stream' eliminates blocking database queries from initial page load. Page renders instantly with skeleton UI, then hydrates via SSE. - Add SSE hub for managing client connections and broadcasting - Add /api/stream endpoint with init and update events - Add stream.html skeleton template with loading animations - Wire scheduler to broadcast on check completion - Backwards compatible: page/api modes unchanged --- cmd/kaze/main.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'cmd') diff --git a/cmd/kaze/main.go b/cmd/kaze/main.go index aaed1fa..b8895a0 100644 --- a/cmd/kaze/main.go +++ b/cmd/kaze/main.go @@ -108,6 +108,10 @@ func main() { } srv.SetVersion(version, commit, date) + sched.SetOnCheckCallback(func() { + srv.BroadcastStatusUpdate(context.Background()) + }) + // Setup graceful shutdown ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -178,10 +182,12 @@ func main() { return fmt.Errorf("failed to create new scheduler: %w", err) } - // Swap config/scheduler without restarting the HTTP listener srv.UpdateConfig(newCfg, newSched) cfg = newCfg sched = newSched + sched.SetOnCheckCallback(func() { + srv.BroadcastStatusUpdate(context.Background()) + }) sched.Start() logger.Info("configuration reloaded successfully (zero-downtime)", -- cgit v1.2.3