You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
452 B

  1. // +build !windows
  2. package stats
  3. import (
  4. "syscall"
  5. )
  6. type DiskStatus struct {
  7. All uint64 `json:"all"`
  8. Used uint64 `json:"used"`
  9. Free uint64 `json:"free"`
  10. }
  11. func DiskUsage(path string) (disk *DiskStatus) {
  12. disk = &DiskStatus{}
  13. fs := syscall.Statfs_t{}
  14. err := syscall.Statfs(path, &fs)
  15. if err != nil {
  16. return
  17. }
  18. disk.All = fs.Blocks * uint64(fs.Bsize)
  19. disk.Free = fs.Bfree * uint64(fs.Bsize)
  20. disk.Used = disk.All - disk.Free
  21. return
  22. }