1package main
2
3import (
4 "fmt"
5 "os"
6 "github.com/jedib0t/go-pretty/v6/table"
7 "golang.org/x/sys/unix"
8)
9
10func main() {
11 var stat unix.Statfs_t
12 mountPoint := "/"
13 err := unix.Statfs(mountPoint, &stat)
14 if err != nil {
15 if err != os.ErrPermission {
16 fmt.Printf("%s: %s", mountPoint, err)
17 }
18 stat = unix.Statfs_t{}
19 }
20
21 total := uint64(stat.Blocks) * uint64(stat.Bsize)
22 free := uint64(stat.Bavail) * uint64(stat.Bsize)
23 used := (uint64(stat.Blocks) - uint64(stat.Bfree)) * uint64(stat.Bsize)
24
25 fsType, ok := fsTypeMap[int64(stat.Type)]
26 if !ok {
27 fsType = "unknown"
28 }
29 details := DiskDetails{
30 Type: fsType,
31 Total: sizeToString(total),
32 Used: sizeToString(used),
33 Free: sizeToString(free),
34 }
35
36 tab := table.NewWriter()
37 headers := table.Row{"Mount", "Type", "Total", "Free", "Used"}
38 tab.AppendHeader(headers)
39 row := table.Row{mountPoint, details.Type, details.Total, details.Free, details.Used}
40 tab.AppendRow(row)
41 tab.SetStyle(table.StyleRounded)
42 fmt.Println(tab.Render())
43}