diff --git a/audit/internal/webui/server.go b/audit/internal/webui/server.go index 5739993..c9461c8 100644 --- a/audit/internal/webui/server.go +++ b/audit/internal/webui/server.go @@ -163,6 +163,7 @@ func NewHandler(opts HandlerOptions) http.Handler { // ── Infrastructure ────────────────────────────────────────────────────── mux.HandleFunc("GET /healthz", h.handleHealthz) + mux.HandleFunc("GET /api/ready", h.handleReady) // ── Existing read-only endpoints (preserved for compatibility) ────────── mux.HandleFunc("GET /audit.json", h.handleAuditJSON) @@ -654,9 +655,66 @@ func sparseLabels(labels []string, n int) []string { // ── Page handler ───────────────────────────────────────────────────────────── +func (h *handler) handleReady(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-store") + if _, err := os.Stat(h.opts.AuditPath); err != nil { + w.WriteHeader(http.StatusServiceUnavailable) + _, _ = w.Write([]byte("starting")) + return + } + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte("ready")) +} + +const loadingPageHTML = ` + + + +EASY-BEE + + + +
+ +
+
Starting up...
+
+ + +` + func (h *handler) handlePage(w http.ResponseWriter, r *http.Request) { page := strings.TrimPrefix(r.URL.Path, "/") if page == "" { + // Serve loading page until audit snapshot exists + if _, err := os.Stat(h.opts.AuditPath); err != nil { + w.Header().Set("Cache-Control", "no-store") + w.Header().Set("Content-Type", "text/html; charset=utf-8") + _, _ = w.Write([]byte(loadingPageHTML)) + return + } page = "dashboard" } // Redirect old routes to new names diff --git a/iso/overlay/etc/systemd/system/bee-web.service b/iso/overlay/etc/systemd/system/bee-web.service index 15745df..632b2d3 100644 --- a/iso/overlay/etc/systemd/system/bee-web.service +++ b/iso/overlay/etc/systemd/system/bee-web.service @@ -1,6 +1,6 @@ [Unit] Description=Bee: hardware audit web viewer -After=bee-network.service bee-audit.service +After=bee-network.service Wants=bee-audit.service [Service] diff --git a/iso/overlay/usr/local/bin/bee-openbox-session b/iso/overlay/usr/local/bin/bee-openbox-session index 9f20f23..55a11b1 100755 --- a/iso/overlay/usr/local/bin/bee-openbox-session +++ b/iso/overlay/usr/local/bin/bee-openbox-session @@ -8,6 +8,13 @@ xset -dpms xset s noblank tint2 & +# Wait for bee-web to bind (Go starts fast, usually <2s) +i=0 +while [ $i -lt 30 ]; do + if curl -sf http://localhost/healthz >/dev/null 2>&1; then break; fi + sleep 1 + i=$((i+1)) +done chromium \ --disable-infobars \ --disable-translate \ @@ -15,6 +22,6 @@ chromium \ --disable-session-crashed-bubble \ --disable-features=TranslateUI \ --start-fullscreen \ - file:///usr/local/share/bee/loading.html & + http://localhost/ & exec openbox diff --git a/iso/overlay/usr/local/share/bee/loading.html b/iso/overlay/usr/local/share/bee/loading.html deleted file mode 100644 index a633865..0000000 --- a/iso/overlay/usr/local/share/bee/loading.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -EASY-BEE - - - -
- -
-
Starting
-
- - -