github.com/cilium/cilium@v1.16.2/clustermesh-apiserver/kvstoremesh-dbg/status.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package dbg 5 6 import ( 7 "context" 8 "fmt" 9 "io" 10 "os" 11 12 "github.com/spf13/cobra" 13 14 "github.com/cilium/cilium/api/v1/kvstoremesh/client/cluster" 15 ciliumdbg "github.com/cilium/cilium/pkg/client" 16 "github.com/cilium/cilium/pkg/command" 17 ) 18 19 var Status = func() *cobra.Command { 20 var verbose bool 21 22 cmd := &cobra.Command{ 23 Use: "status", 24 Short: "Display status of remote clusters", 25 Run: func(cmd *cobra.Command, args []string) { status(cmd.Context(), cmd.OutOrStdout(), verbose) }, 26 } 27 28 RootCmd.AddCommand(cmd) 29 command.AddOutputOption(cmd) 30 31 cmd.Flags().BoolVar(&verbose, "verbose", false, "Output verbose status information for ready clusters as well") 32 33 return cmd 34 }() 35 36 func status(ctx context.Context, writer io.Writer, verbose bool) { 37 params := cluster.NewGetClusterParams().WithContext(ctx) 38 resp, err := client.Cluster.GetCluster(params) 39 if err != nil { 40 fmt.Printf("Failed to retrieve status information: %s\n", clientErrorHint(err)) 41 os.Exit(1) 42 } 43 44 if command.OutputOption() { 45 if err := command.PrintOutput(resp.Payload); err != nil { 46 fmt.Printf("Failed to output status information: %s\n", err) 47 os.Exit(1) 48 } 49 return 50 } 51 52 clusters := resp.GetPayload() 53 54 verbosity := ciliumdbg.RemoteClustersStatusBrief 55 if verbose { 56 verbosity = ciliumdbg.RemoteClustersStatusVerbose 57 } 58 59 fmt.Fprintf(writer, "KVStoreMesh:\t%d/%d remote clusters ready\n", 60 ciliumdbg.NumReadyClusters(clusters), len(clusters)) 61 ciliumdbg.FormatStatusResponseRemoteClusters(writer, clusters, verbosity) 62 }