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  }