mirror of
https://github.com/lingble/talos.git
synced 2025-12-09 17:15:22 +00:00
feat(osctl): improve output of stats and ps commands (#788)
Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
This commit is contained in:
committed by
Andrew Rynhard
parent
7a5cc7b9f3
commit
17f28d3461
@@ -86,15 +86,15 @@ var lsCmd = &cobra.Command{
|
|||||||
if info.Error != "" {
|
if info.Error != "" {
|
||||||
fmt.Fprintf(os.Stderr, "error reading file %s: %s\n", info.Name, info.Error)
|
fmt.Fprintf(os.Stderr, "error reading file %s: %s\n", info.Name, info.Error)
|
||||||
} else {
|
} else {
|
||||||
name := info.RelativeName
|
display := info.RelativeName
|
||||||
if info.Link != "" {
|
if info.Link != "" {
|
||||||
name += " -> " + info.Link
|
display += " -> " + info.Link
|
||||||
}
|
}
|
||||||
fmt.Fprintf(w, "%s\t%d\t%s\t%s\n",
|
fmt.Fprintf(w, "%s\t%d\t%s\t%s\n",
|
||||||
os.FileMode(info.Mode).String(),
|
os.FileMode(info.Mode).String(),
|
||||||
info.Size,
|
info.Size,
|
||||||
time.Unix(info.Modified, 0).Format("Jan 2 2006"),
|
time.Unix(info.Modified, 0).Format("Jan 2 2006"),
|
||||||
name,
|
display,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
criconstants "github.com/containerd/cri/pkg/constants"
|
criconstants "github.com/containerd/cri/pkg/constants"
|
||||||
@@ -48,10 +50,20 @@ var psCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func processesRender(reply *proto.ProcessesReply) {
|
func processesRender(reply *proto.ProcessesReply) {
|
||||||
|
sort.Slice(reply.Processes,
|
||||||
|
func(i, j int) bool {
|
||||||
|
return strings.Compare(reply.Processes[i].Id, reply.Processes[j].Id) < 0
|
||||||
|
})
|
||||||
|
|
||||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
|
||||||
fmt.Fprintln(w, "NAMESPACE\tID\tIMAGE\tPID\tSTATUS")
|
fmt.Fprintln(w, "NAMESPACE\tID\tIMAGE\tPID\tSTATUS")
|
||||||
for _, p := range reply.Processes {
|
for _, p := range reply.Processes {
|
||||||
fmt.Fprintf(w, "%s\t%s\t%s\t%d\t%s\n", p.Namespace, p.Id, p.Image, p.Pid, p.Status)
|
display := p.Id
|
||||||
|
if p.Id != p.PodId {
|
||||||
|
// container in a sandbox
|
||||||
|
display = "└─ " + display
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "%s\t%s\t%s\t%d\t%s\n", p.Namespace, display, p.Image, p.Pid, p.Status)
|
||||||
}
|
}
|
||||||
helpers.Should(w.Flush())
|
helpers.Should(w.Flush())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
criconstants "github.com/containerd/cri/pkg/constants"
|
criconstants "github.com/containerd/cri/pkg/constants"
|
||||||
@@ -47,10 +49,20 @@ var statsCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func statsRender(reply *proto.StatsReply) {
|
func statsRender(reply *proto.StatsReply) {
|
||||||
|
sort.Slice(reply.Stats,
|
||||||
|
func(i, j int) bool {
|
||||||
|
return strings.Compare(reply.Stats[i].Id, reply.Stats[j].Id) < 0
|
||||||
|
})
|
||||||
|
|
||||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
|
||||||
fmt.Fprintln(w, "NAMESPACE\tID\tMEMORY(MB)\tCPU")
|
fmt.Fprintln(w, "NAMESPACE\tID\tMEMORY(MB)\tCPU")
|
||||||
for _, s := range reply.Stats {
|
for _, s := range reply.Stats {
|
||||||
fmt.Fprintf(w, "%s\t%s\t%.2f\t%d\n", s.Namespace, s.Id, float64(s.MemoryUsage)*1e-6, s.CpuUsage)
|
display := s.Id
|
||||||
|
if s.Id != s.PodId {
|
||||||
|
// container in a sandbox
|
||||||
|
display = "└─ " + display
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "%s\t%s\t%.2f\t%d\n", s.Namespace, display, float64(s.MemoryUsage)*1e-6, s.CpuUsage)
|
||||||
}
|
}
|
||||||
helpers.Should(w.Flush())
|
helpers.Should(w.Flush())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,11 +95,13 @@ func (r *Registrator) Processes(ctx context.Context, in *proto.ProcessesRequest)
|
|||||||
|
|
||||||
processes := []*proto.Process{}
|
processes := []*proto.Process{}
|
||||||
|
|
||||||
for _, containers := range pods {
|
for _, pod := range pods {
|
||||||
for _, container := range containers.Containers {
|
for _, container := range pod.Containers {
|
||||||
process := &proto.Process{
|
process := &proto.Process{
|
||||||
Namespace: in.Namespace,
|
Namespace: in.Namespace,
|
||||||
Id: container.Display,
|
Id: container.Display,
|
||||||
|
PodId: pod.Name,
|
||||||
|
Name: container.Name,
|
||||||
Image: container.Image,
|
Image: container.Image,
|
||||||
Pid: container.Pid,
|
Pid: container.Pid,
|
||||||
Status: strings.ToUpper(string(container.Status.Status)),
|
Status: strings.ToUpper(string(container.Status.Status)),
|
||||||
@@ -134,8 +136,8 @@ func (r *Registrator) Stats(ctx context.Context, in *proto.StatsRequest) (reply
|
|||||||
|
|
||||||
stats := []*proto.Stat{}
|
stats := []*proto.Stat{}
|
||||||
|
|
||||||
for _, containers := range pods {
|
for _, pod := range pods {
|
||||||
for _, container := range containers.Containers {
|
for _, container := range pod.Containers {
|
||||||
if container.Metrics == nil {
|
if container.Metrics == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -163,6 +165,8 @@ func (r *Registrator) Stats(ctx context.Context, in *proto.StatsRequest) (reply
|
|||||||
stat := &proto.Stat{
|
stat := &proto.Stat{
|
||||||
Namespace: in.Namespace,
|
Namespace: in.Namespace,
|
||||||
Id: container.Display,
|
Id: container.Display,
|
||||||
|
PodId: pod.Name,
|
||||||
|
Name: container.Name,
|
||||||
MemoryUsage: used,
|
MemoryUsage: used,
|
||||||
CpuUsage: data.CPU.Usage.Total,
|
CpuUsage: data.CPU.Usage.Total,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ message Process {
|
|||||||
string image = 3;
|
string image = 3;
|
||||||
uint32 pid = 4;
|
uint32 pid = 4;
|
||||||
string status = 5;
|
string status = 5;
|
||||||
|
string pod_id = 6;
|
||||||
|
string name = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The request message containing the containerd namespace.
|
// The request message containing the containerd namespace.
|
||||||
@@ -49,6 +51,8 @@ message Stat {
|
|||||||
string id = 2;
|
string id = 2;
|
||||||
uint64 memory_usage = 4;
|
uint64 memory_usage = 4;
|
||||||
uint64 cpu_usage = 5;
|
uint64 cpu_usage = 5;
|
||||||
|
string pod_id = 6;
|
||||||
|
string name = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The request message containing the process to restart.
|
// The request message containing the process to restart.
|
||||||
@@ -86,7 +90,7 @@ message Route {
|
|||||||
|
|
||||||
// Gateway is the gateway address to which traffic to this destination should be sent
|
// Gateway is the gateway address to which traffic to this destination should be sent
|
||||||
string gateway = 3;
|
string gateway = 3;
|
||||||
|
|
||||||
// Metric is the priority of the route, where lower metrics have higher priorities
|
// Metric is the priority of the route, where lower metrics have higher priorities
|
||||||
uint32 metric = 4;
|
uint32 metric = 4;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user