9
9
10
10
"github.com/elastic/go-sysinfo"
11
11
sysinfotypes "github.com/elastic/go-sysinfo/types"
12
+ "tailscale.com/types/ptr"
12
13
13
14
"github.com/coder/coder/cli/clibase"
14
15
"github.com/coder/coder/cli/cliui"
@@ -40,21 +41,26 @@ func (*RootCmd) stat() *clibase.Cmd {
40
41
},
41
42
},
42
43
Handler : func (inv * clibase.Invocation ) error {
43
- hi , err := sysinfo .Host ()
44
+ host , err := sysinfo .Host ()
44
45
if err != nil {
45
46
return err
46
47
}
47
48
sr := statsRow {}
48
- if cs , err := statCPU (hi , sampleInterval ); err != nil {
49
+ if cs , err := statCPU (host , sampleInterval ); err != nil {
49
50
return err
50
51
} else {
51
52
sr .HostCPU = cs
52
53
}
53
- if ms , err := statMem (hi ); err != nil {
54
+ if ms , err := statMem (host ); err != nil {
54
55
return err
55
56
} else {
56
57
sr .HostMemory = ms
57
58
}
59
+ if ds , err := statDisk (host ); err != nil {
60
+ return err
61
+ } else {
62
+ sr .Disk = ds
63
+ }
58
64
out , err := formatter .Format (inv .Context (), []statsRow {sr })
59
65
if err != nil {
60
66
return err
@@ -81,7 +87,7 @@ func statCPU(hi sysinfotypes.Host, interval time.Duration) (*stat, error) {
81
87
if err != nil {
82
88
return nil , err
83
89
}
84
- s .Total = nproc
90
+ s .Total = ptr . To ( nproc )
85
91
total := c2 .Total () - c1 .Total ()
86
92
idle := c2 .Idle - c1 .Idle
87
93
used := total - idle
@@ -98,23 +104,32 @@ func statMem(hi sysinfotypes.Host) (*stat, error) {
98
104
if err != nil {
99
105
return nil , err
100
106
}
101
- s .Total = float64 (hm .Total ) / 1024 / 1024 / 1024
107
+ s .Total = ptr . To ( float64 (hm .Total ) / 1024 / 1024 / 1024 )
102
108
s .Used = float64 (hm .Used ) / 1024 / 1024 / 1024
103
109
return s , nil
104
110
}
105
111
112
+ func statDisk (hi sysinfotypes.Host ) (* stat , error ) {
113
+ s := & stat {
114
+ Unit : "GB" ,
115
+ }
116
+ return s , nil
117
+ }
118
+
106
119
type statsRow struct {
107
120
HostCPU * stat `json:"host_cpu" table:"host_cpu,default_sort"`
108
121
HostMemory * stat `json:"host_memory" table:"host_memory"`
109
122
Disk * stat `json:"disk" table:"disk"`
123
+ LoadNorm * stat `json:"load_norm" table:"load_norm"`
110
124
ContainerCPU * stat `json:"container_cpu" table:"container_cpu"`
111
125
ContainerMemory * stat `json:"container_memory" table:"container_memory"`
126
+ Uptime * stat `json:"uptime" table:"uptime"`
112
127
}
113
128
114
129
type stat struct {
115
- Total float64 `json:"total"`
116
- Unit string `json:"unit"`
117
- Used float64 `json:"used"`
130
+ Total * float64 `json:"total"`
131
+ Unit string `json:"unit"`
132
+ Used float64 `json:"used"`
118
133
}
119
134
120
135
func (s * stat ) String () string {
@@ -123,8 +138,10 @@ func (s *stat) String() string {
123
138
}
124
139
var sb strings.Builder
125
140
_ , _ = sb .WriteString (strconv .FormatFloat (s .Used , 'f' , 1 , 64 ))
126
- _ , _ = sb .WriteString ("/" )
127
- _ , _ = sb .WriteString (strconv .FormatFloat (s .Total , 'f' , 1 , 64 ))
141
+ if s .Total != (* float64 )(nil ) {
142
+ _ , _ = sb .WriteString ("/" )
143
+ _ , _ = sb .WriteString (strconv .FormatFloat (* s .Total , 'f' , 1 , 64 ))
144
+ }
128
145
_ , _ = sb .WriteString (" " )
129
146
if s .Unit != "" {
130
147
_ , _ = sb .WriteString (s .Unit )
0 commit comments