talm

Форк
0
/
imported_stats.go 
130 строк · 3.3 Кб
1
// Code generated by go run tools/import_commands.go --talos-version v1.7.1 stats
2
// DO NOT EDIT.
3

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/.
7

8
package commands
9

10
import (
11
	"context"
12
	"fmt"
13
	"os"
14
	"sort"
15
	"strings"
16
	"text/tabwriter"
17

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"
22

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"
28
)
29

30
// statsCmd represents the stats command.
31
var statsCmd = &cobra.Command{
32
	Use:   "stats",
33
	Short: "Get container stats",
34
	Long:  ``,
35
	Args:  cobra.NoArgs,
36
	RunE: func(cmd *cobra.Command, args []string) error {
37
		return WithClient(func(ctx context.Context, c *client.Client) error {
38
			var (
39
				namespace string
40
				driver    common.ContainerDriver
41
			)
42

43
			if kubernetesFlag {
44
				namespace = criconstants.K8sContainerdNamespace
45
				driver = common.ContainerDriver_CRI
46
			} else {
47
				namespace = constants.SystemContainerdNamespace
48
				driver = common.ContainerDriver_CONTAINERD
49
			}
50

51
			var remotePeer peer.Peer
52

53
			resp, err := c.Stats(ctx, namespace, driver, grpc.Peer(&remotePeer))
54
			if err != nil {
55
				if resp == nil {
56
					return fmt.Errorf("error getting stats: %s", err)
57
				}
58

59
				cli.Warning("%s", err)
60
			}
61

62
			return statsRender(&remotePeer, resp)
63
		})
64
	},
65
}
66

67
func statsRender(remotePeer *peer.Peer, resp *machineapi.StatsResponse) error {
68
	w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
69

70
	fmt.Fprintln(w, "NODE\tNAMESPACE\tID\tMEMORY(MB)\tCPU")
71

72
	defaultNode := client.AddrFromPeer(remotePeer)
73

74
	for _, msg := range resp.Messages {
75
		sort.Slice(msg.Stats,
76
			func(i, j int) bool {
77
				return strings.Compare(msg.Stats[i].Id, msg.Stats[j].Id) < 0
78
			})
79

80
		for _, s := range msg.Stats {
81
			display := s.Id
82
			if s.Id != s.PodId {
83
				// container in a sandbox
84
				display = "└─ " + display
85
			}
86

87
			node := defaultNode
88

89
			if msg.Metadata != nil {
90
				node = msg.Metadata.Hostname
91
			}
92

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)
94
		}
95
	}
96

97
	return w.Flush()
98
}
99

100
func init() {
101
	statsCmd.Flags().StringSliceVarP(&statsCmdFlags.configFiles, "file",
102
		"f", nil, "specify config files or patches in a YAML file (can specify multiple)",
103
	)
104
	statsCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
105
		nodesFromArgs := len(GlobalArgs.
106
			Nodes) >
107
			0
108
		endpointsFromArgs := len(GlobalArgs.Endpoints) > 0
109
		for _, configFile := range statsCmdFlags.configFiles {
110
			if err := processModelineAndUpdateGlobals(configFile,
111

112
				nodesFromArgs, endpointsFromArgs, false,
113
			); err != nil {
114
				return err
115
			}
116
		}
117
		return nil
118
	}
119

120
	statsCmd.Flags().BoolVarP(&kubernetesFlag, "kubernetes", "k", false, "use the k8s.io containerd namespace")
121

122
	statsCmd.Flags().BoolP("use-cri", "c", false, "use the CRI driver")
123
	statsCmd.Flags().MarkHidden("use-cri") //nolint:errcheck
124

125
	addCommand(statsCmd)
126
}
127

128
var statsCmdFlags struct {
129
	configFiles []string
130
}
131

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.