From 894c23c137158d206dba5f938e41bdb68369dd58 Mon Sep 17 00:00:00 2001 From: Tom Wiesing Date: Mon, 3 Oct 2022 13:37:36 +0200 Subject: [PATCH] cmd/info: Use 'info' struct --- cmd/info.go | 50 ++++++++++++++++--- internal/component/instances/wisski_status.go | 2 - pkg/slicesx/slicesx.go | 11 ++++ 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/cmd/info.go b/cmd/info.go index 82b6149..a06a349 100644 --- a/cmd/info.go +++ b/cmd/info.go @@ -1,14 +1,18 @@ package cmd import ( + "encoding/json" + wisski_distillery "github.com/FAU-CDI/wisski-distillery" "github.com/FAU-CDI/wisski-distillery/internal/core" + "github.com/FAU-CDI/wisski-distillery/pkg/slicesx" ) // Info is then 'info' command var Info wisski_distillery.Command = info{} type info struct { + JSON bool `short:"j" long:"json" description:"Print information as JSON instead of as string"` Positionals struct { Slug string `positional-arg-name:"SLUG" required:"1-1" description:"slug of instance to show info about"` } `positional-args:"true"` @@ -30,16 +34,46 @@ func (i info) Run(context wisski_distillery.Context) error { return err } - context.Printf("URL: %s\n", instance.URL()) - context.Printf("Base directory: %s\n", instance.FilesystemBase) + info, err := instance.Info(false) + if err != nil { + return err + } - context.Printf("SQL Database: %s\n", instance.SqlDatabase) - context.Printf("SQL Username: %s\n", instance.SqlUsername) - context.Printf("SQL Password: %s\n", instance.SqlPassword) + if i.JSON { + json.NewEncoder(context.Stdout).Encode(info) + return nil + } - context.Printf("GraphDB Repository: %s\n", instance.GraphDBRepository) - context.Printf("GraphDB Username: %s\n", instance.GraphDBUsername) - context.Printf("GraphDB Password: %s\n", instance.GraphDBPassword) + context.Printf("Slug: %v\n", info.Slug) + context.Printf("URL: %v\n", info.URL) + + context.Printf("Base directory: %v\n", instance.FilesystemBase) + + context.Printf("SQL Database: %v\n", instance.SqlDatabase) + context.Printf("SQL Username: %v\n", instance.SqlUsername) + context.Printf("SQL Password: %v\n", instance.SqlPassword) + + context.Printf("GraphDB Repository: %v\n", instance.GraphDBRepository) + context.Printf("GraphDB Username: %v\n", instance.GraphDBUsername) + context.Printf("GraphDB Password: %v\n", instance.GraphDBPassword) + + context.Printf("Running: %v\n", info.Running) + context.Printf("Last Rebuild: %v\n", info.LastRebuild.String()) + + context.Printf("Prefixes: (count %d)\n", len(info.Prefixes)) + for _, prefix := range info.Prefixes { + context.Printf("- %s\n", prefix) + } + + context.Printf("Snapshots: (count %d)\n", len(info.Snapshots)) + for _, s := range info.Snapshots { + context.Printf("- %s (taken %s, packed %v)\n", s.Path, s.Created.String(), s.Packed) + } + + context.Printf("Pathbuilders: (count %d)\n", len(info.Pathbuilders)) + slicesx.ForSorted(info.Pathbuilders, func(name, data string) { + context.Printf("- %s (%d bytes)\n", name, len(data)) + }) return nil } diff --git a/internal/component/instances/wisski_status.go b/internal/component/instances/wisski_status.go index e1ba958..62ec039 100644 --- a/internal/component/instances/wisski_status.go +++ b/internal/component/instances/wisski_status.go @@ -1,7 +1,6 @@ package instances import ( - "fmt" "time" "github.com/FAU-CDI/wisski-distillery/internal/models" @@ -70,7 +69,6 @@ func (wisski *WissKI) Info(quick bool) (info WissKIInfo, err error) { } err = group.Wait() - fmt.Println(err) return } diff --git a/pkg/slicesx/slicesx.go b/pkg/slicesx/slicesx.go index 20033fa..ae8c8de 100644 --- a/pkg/slicesx/slicesx.go +++ b/pkg/slicesx/slicesx.go @@ -2,9 +2,20 @@ package slicesx import ( "golang.org/x/exp/constraints" + "golang.org/x/exp/maps" "golang.org/x/exp/slices" ) +// ForSorted iterates over the map in an ordered fashion +func ForSorted[K constraints.Ordered, V any](mp map[K]V, callback func(k K, v V)) { + keys := maps.Keys(mp) + slices.Sort(keys) + + for _, key := range keys { + callback(key, mp[key]) + } +} + // Any returns true if test returns true for any of values. func Any[T any](values []T, test func(T) bool) bool { for _, v := range values {