1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package tools
import (
"io"
"strconv"
"time"
"github.com/dustin/go-humanize"
"github.com/fatih/color"
"github.com/olekukonko/tablewriter"
)
// WorkerTable renders table with information about rr server workers.
func WorkerTable(writer io.Writer, workers []ProcessState) *tablewriter.Table {
tw := tablewriter.NewWriter(writer)
tw.SetHeader([]string{"PID", "Status", "Execs", "Memory", "Created"})
tw.SetColMinWidth(0, 7)
tw.SetColMinWidth(1, 9)
tw.SetColMinWidth(2, 7)
tw.SetColMinWidth(3, 7)
tw.SetColMinWidth(4, 18)
for key := range workers {
tw.Append([]string{
strconv.Itoa(workers[key].Pid),
renderStatus(workers[key].Status),
renderJobs(workers[key].NumJobs),
humanize.Bytes(workers[key].MemoryUsage),
renderAlive(time.Unix(0, workers[key].Created)),
})
}
return tw
}
func renderStatus(status string) string {
switch status {
case "inactive":
return color.YellowString("inactive")
case "ready":
return color.CyanString("ready")
case "working":
return color.GreenString("working")
case "invalid":
return color.YellowString("invalid")
case "stopped":
return color.RedString("stopped")
case "errored":
return color.RedString("errored")
}
return status
}
func renderJobs(number uint64) string {
// TODO overflow
return humanize.Comma(int64(number))
}
func renderAlive(t time.Time) string {
return humanize.RelTime(t, time.Now(), "ago", "")
}
|