summaryrefslogtreecommitdiff
path: root/internal/flamegraph/liveserver.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-01 23:22:26 +0200
committerPaul Buetow <paul@buetow.org>2026-03-01 23:22:26 +0200
commit320e2b25291627d9fbc2285c571303f610f6b4f6 (patch)
tree00979ded01518c2ba8bdc8c5332bececb9f0b855 /internal/flamegraph/liveserver.go
parent9c65e3a626f9685d9763ebe02b90c7e5169b5281 (diff)
flamegraph: share HTTP server lifecycle helper (task 316)
Diffstat (limited to 'internal/flamegraph/liveserver.go')
-rw-r--r--internal/flamegraph/liveserver.go39
1 files changed, 3 insertions, 36 deletions
diff --git a/internal/flamegraph/liveserver.go b/internal/flamegraph/liveserver.go
index 032bc3b..95063d0 100644
--- a/internal/flamegraph/liveserver.go
+++ b/internal/flamegraph/liveserver.go
@@ -15,42 +15,9 @@ func ServeLive(ctx context.Context, lt *LiveTrie, interval time.Duration) error
mux.HandleFunc("/events", handleSSE(lt, interval))
mux.HandleFunc("/reset", handleReset(lt))
mux.HandleFunc("/order", handleOrder(lt))
- srv := &http.Server{Handler: mux}
-
- listener, err := listenRandomPort()
- if err != nil {
- return err
- }
- defer listener.Close()
-
- hostname, port := serverHostPort(listener)
- fmt.Printf("Live flamegraph available at http://%s:%d/\n", hostname, port)
-
- errCh := make(chan error, 1)
- go func() {
- errCh <- srv.Serve(listener)
- }()
-
- select {
- case <-ctx.Done():
- case serveErr := <-errCh:
- if serveErr != nil && serveErr != http.ErrServerClosed {
- return serveErr
- }
- return nil
- }
-
- shutdownCtx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
- defer cancel()
- if err := srv.Shutdown(shutdownCtx); err != nil {
- return fmt.Errorf("shutdown live web server: %w", err)
- }
-
- serveErr := <-errCh
- if serveErr != nil && serveErr != http.ErrServerClosed {
- return serveErr
- }
- return nil
+ return runServer(ctx, mux, func(hostname string, port int) {
+ fmt.Printf("Live flamegraph available at http://%s:%d/\n", hostname, port)
+ })
}
func handleLivePage() http.HandlerFunc {