From 1d5d063d6a443c9d4a1206d2743e4824411da956 Mon Sep 17 00:00:00 2001 From: mae Date: Wed, 4 Mar 2026 22:50:58 -0600 Subject: cmd/mbf: package status dashboard This displays package metadata with optional status from a report. --- cmd/mbf/main.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'cmd/mbf/main.go') diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 0d44bdbc..291e91ef 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -20,6 +20,7 @@ import ( "io" "log" "net" + "net/http" "os" "os/signal" "path/filepath" @@ -41,6 +42,9 @@ import ( "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + + "hakurei.app/cmd/mbf/internal/pkgserver" + "hakurei.app/cmd/mbf/internal/pkgserver/ui" ) func main() { @@ -180,6 +184,7 @@ func main() { { var ( + flagBind string flagStatus bool flagReport string ) @@ -187,8 +192,52 @@ func main() { "info", "Display out-of-band metadata of an artifact", func(args []string) (err error) { - return commandInfo(&cm, args, os.Stdout, flagStatus, flagReport) + const shutdownTimeout = 15 * time.Second + + var r *rosa.Report + if flagReport != "" { + if r, err = rosa.OpenReport(flagReport); err != nil { + return err + } + defer func() { + if closeErr := r.Close(); err == nil { + err = closeErr + } + }() + defer r.HandleAccess(&err)() + } + + if flagBind == "" { + return commandInfo(&cm, args, os.Stdout, flagStatus, r) + } + + var mux http.ServeMux + ui.Register(&mux) + if err = pkgserver.Register(ctx, &mux, r); err != nil { + return + } + + server := http.Server{Addr: flagBind, Handler: &mux} + go func() { + <-ctx.Done() + cc, cancel := context.WithTimeout(context.Background(), shutdownTimeout) + defer cancel() + if _err := server.Shutdown(cc); _err != nil { + log.Fatal(_err) + } + }() + + msg.Verbosef("listening on %q", flagBind) + err = server.ListenAndServe() + if errors.Is(err, http.ErrServerClosed) { + err = nil + } + return }, + ).Flag( + &flagBind, + "bind", command.StringFlag(""), + "TCP address for the server to listen on", ).Flag( &flagStatus, "status", command.BoolFlag(false), -- cgit v1.3.1