sigar_unix.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright (c) 2012 VMware, Inc.
  2. // +build darwin freebsd linux
  3. package gosigar
  4. import (
  5. "syscall"
  6. "time"
  7. "golang.org/x/sys/unix"
  8. )
  9. func (self *FileSystemUsage) Get(path string) error {
  10. stat := syscall.Statfs_t{}
  11. err := syscall.Statfs(path, &stat)
  12. if err != nil {
  13. return err
  14. }
  15. self.Total = uint64(stat.Blocks) * uint64(stat.Bsize)
  16. self.Free = uint64(stat.Bfree) * uint64(stat.Bsize)
  17. self.Avail = uint64(stat.Bavail) * uint64(stat.Bsize)
  18. self.Used = self.Total - self.Free
  19. self.Files = stat.Files
  20. self.FreeFiles = uint64(stat.Ffree)
  21. return nil
  22. }
  23. func (r *Rusage) Get(who int) error {
  24. ru, err := getResourceUsage(who)
  25. if err != nil {
  26. return err
  27. }
  28. uTime := convertRtimeToDur(ru.Utime)
  29. sTime := convertRtimeToDur(ru.Stime)
  30. r.Utime = uTime
  31. r.Stime = sTime
  32. r.Maxrss = int64(ru.Maxrss)
  33. r.Ixrss = int64(ru.Ixrss)
  34. r.Idrss = int64(ru.Idrss)
  35. r.Isrss = int64(ru.Isrss)
  36. r.Minflt = int64(ru.Minflt)
  37. r.Majflt = int64(ru.Majflt)
  38. r.Nswap = int64(ru.Nswap)
  39. r.Inblock = int64(ru.Inblock)
  40. r.Oublock = int64(ru.Oublock)
  41. r.Msgsnd = int64(ru.Msgsnd)
  42. r.Msgrcv = int64(ru.Msgrcv)
  43. r.Nsignals = int64(ru.Nsignals)
  44. r.Nvcsw = int64(ru.Nvcsw)
  45. r.Nivcsw = int64(ru.Nivcsw)
  46. return nil
  47. }
  48. func getResourceUsage(who int) (unix.Rusage, error) {
  49. r := unix.Rusage{}
  50. err := unix.Getrusage(who, &r)
  51. return r, err
  52. }
  53. func convertRtimeToDur(t unix.Timeval) time.Duration {
  54. return time.Duration(t.Nano())
  55. }