1
// Code generated by go run tools/import_commands.go --talos-version v1.7.1 stats
4
// This Source Code Form is subject to the terms of the Mozilla Public
5
// License, v. 2.0. If a copy of the MPL was not distributed with this
6
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
18
criconstants "github.com/containerd/containerd/pkg/cri/constants"
19
"github.com/spf13/cobra"
20
"google.golang.org/grpc"
21
"google.golang.org/grpc/peer"
23
"github.com/siderolabs/talos/pkg/cli"
24
"github.com/siderolabs/talos/pkg/machinery/api/common"
25
machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine"
26
"github.com/siderolabs/talos/pkg/machinery/client"
27
"github.com/siderolabs/talos/pkg/machinery/constants"
30
// statsCmd represents the stats command.
31
var statsCmd = &cobra.Command{
33
Short: "Get container stats",
36
RunE: func(cmd *cobra.Command, args []string) error {
37
return WithClient(func(ctx context.Context, c *client.Client) error {
40
driver common.ContainerDriver
44
namespace = criconstants.K8sContainerdNamespace
45
driver = common.ContainerDriver_CRI
47
namespace = constants.SystemContainerdNamespace
48
driver = common.ContainerDriver_CONTAINERD
51
var remotePeer peer.Peer
53
resp, err := c.Stats(ctx, namespace, driver, grpc.Peer(&remotePeer))
56
return fmt.Errorf("error getting stats: %s", err)
59
cli.Warning("%s", err)
62
return statsRender(&remotePeer, resp)
67
func statsRender(remotePeer *peer.Peer, resp *machineapi.StatsResponse) error {
68
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
70
fmt.Fprintln(w, "NODE\tNAMESPACE\tID\tMEMORY(MB)\tCPU")
72
defaultNode := client.AddrFromPeer(remotePeer)
74
for _, msg := range resp.Messages {
77
return strings.Compare(msg.Stats[i].Id, msg.Stats[j].Id) < 0
80
for _, s := range msg.Stats {
83
// container in a sandbox
84
display = "└─ " + display
89
if msg.Metadata != nil {
90
node = msg.Metadata.Hostname
93
fmt.Fprintf(w, "%s\t%s\t%s\t%.2f\t%d\n", node, s.Namespace, display, float64(s.MemoryUsage)*1e-6, s.CpuUsage)
101
statsCmd.Flags().StringSliceVarP(&statsCmdFlags.configFiles, "file",
102
"f", nil, "specify config files or patches in a YAML file (can specify multiple)",
104
statsCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
105
nodesFromArgs := len(GlobalArgs.
108
endpointsFromArgs := len(GlobalArgs.Endpoints) > 0
109
for _, configFile := range statsCmdFlags.configFiles {
110
if err := processModelineAndUpdateGlobals(configFile,
112
nodesFromArgs, endpointsFromArgs, false,
120
statsCmd.Flags().BoolVarP(&kubernetesFlag, "kubernetes", "k", false, "use the k8s.io containerd namespace")
122
statsCmd.Flags().BoolP("use-cri", "c", false, "use the CRI driver")
123
statsCmd.Flags().MarkHidden("use-cri") //nolint:errcheck
128
var statsCmdFlags struct {