Skip to content

Commit 251fdda

Browse files
committed
support values with no total
1 parent 18f4942 commit 251fdda

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

cli/stat.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/elastic/go-sysinfo"
1111
sysinfotypes "github.com/elastic/go-sysinfo/types"
12+
"tailscale.com/types/ptr"
1213

1314
"github.com/coder/coder/cli/clibase"
1415
"github.com/coder/coder/cli/cliui"
@@ -40,21 +41,26 @@ func (*RootCmd) stat() *clibase.Cmd {
4041
},
4142
},
4243
Handler: func(inv *clibase.Invocation) error {
43-
hi, err := sysinfo.Host()
44+
host, err := sysinfo.Host()
4445
if err != nil {
4546
return err
4647
}
4748
sr := statsRow{}
48-
if cs, err := statCPU(hi, sampleInterval); err != nil {
49+
if cs, err := statCPU(host, sampleInterval); err != nil {
4950
return err
5051
} else {
5152
sr.HostCPU = cs
5253
}
53-
if ms, err := statMem(hi); err != nil {
54+
if ms, err := statMem(host); err != nil {
5455
return err
5556
} else {
5657
sr.HostMemory = ms
5758
}
59+
if ds, err := statDisk(host); err != nil {
60+
return err
61+
} else {
62+
sr.Disk = ds
63+
}
5864
out, err := formatter.Format(inv.Context(), []statsRow{sr})
5965
if err != nil {
6066
return err
@@ -81,7 +87,7 @@ func statCPU(hi sysinfotypes.Host, interval time.Duration) (*stat, error) {
8187
if err != nil {
8288
return nil, err
8389
}
84-
s.Total = nproc
90+
s.Total = ptr.To(nproc)
8591
total := c2.Total() - c1.Total()
8692
idle := c2.Idle - c1.Idle
8793
used := total - idle
@@ -98,23 +104,32 @@ func statMem(hi sysinfotypes.Host) (*stat, error) {
98104
if err != nil {
99105
return nil, err
100106
}
101-
s.Total = float64(hm.Total) / 1024 / 1024 / 1024
107+
s.Total = ptr.To(float64(hm.Total) / 1024 / 1024 / 1024)
102108
s.Used = float64(hm.Used) / 1024 / 1024 / 1024
103109
return s, nil
104110
}
105111

112+
func statDisk(hi sysinfotypes.Host) (*stat, error) {
113+
s := &stat{
114+
Unit: "GB",
115+
}
116+
return s, nil
117+
}
118+
106119
type statsRow struct {
107120
HostCPU *stat `json:"host_cpu" table:"host_cpu,default_sort"`
108121
HostMemory *stat `json:"host_memory" table:"host_memory"`
109122
Disk *stat `json:"disk" table:"disk"`
123+
LoadNorm *stat `json:"load_norm" table:"load_norm"`
110124
ContainerCPU *stat `json:"container_cpu" table:"container_cpu"`
111125
ContainerMemory *stat `json:"container_memory" table:"container_memory"`
126+
Uptime *stat `json:"uptime" table:"uptime"`
112127
}
113128

114129
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"`
118133
}
119134

120135
func (s *stat) String() string {
@@ -123,8 +138,10 @@ func (s *stat) String() string {
123138
}
124139
var sb strings.Builder
125140
_, _ = 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+
}
128145
_, _ = sb.WriteString(" ")
129146
if s.Unit != "" {
130147
_, _ = sb.WriteString(s.Unit)

cli/stat_internal_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package cli
33
import (
44
"testing"
55

6+
"tailscale.com/types/ptr"
7+
68
"github.com/stretchr/testify/assert"
79
)
810

@@ -13,11 +15,15 @@ func TestStatString(t *testing.T) {
1315
}{
1416
{
1517
Expected: "1.2/5.7 quatloos",
16-
Stat: stat{Used: 1.234, Total: 5.678, Unit: "quatloos"},
18+
Stat: stat{Used: 1.234, Total: ptr.To(5.678), Unit: "quatloos"},
1719
},
1820
{
1921
Expected: "0.0/0.0 HP",
20-
Stat: stat{Used: 0, Total: 0, Unit: "HP"},
22+
Stat: stat{Used: 0, Total: ptr.To(0.0), Unit: "HP"},
23+
},
24+
{
25+
Expected: "123.0 seconds",
26+
Stat: stat{Used: 123.0, Total: nil, Unit: "seconds"},
2127
},
2228
} {
2329
assert.Equal(t, tt.Expected, tt.Stat.String())

0 commit comments

Comments
 (0)