//go:build linux package metrics import ( "strings" "syscall" ) func ReadDiskUsage(path string) (DiskUsage, error) { p := strings.TrimSpace(path) if p == "" { p = "/" } var st syscall.Statfs_t if err := syscall.Statfs(p, &st); err != nil { return DiskUsage{Path: p}, err } total := st.Blocks * uint64(st.Bsize) free := st.Bavail * uint64(st.Bsize) used := total - free usedPct := 0.0 if total > 0 { usedPct = float64(used) / float64(total) * 100 } return DiskUsage{ Path: p, TotalBytes: total, FreeBytes: free, UsedBytes: used, UsedPct: usedPct, }, nil }