main
44ceea7 ยท 1 month ago 7 commits
 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}