12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright (c) 2012 VMware, Inc.
- // +build darwin freebsd linux
- package gosigar
- import (
- "syscall"
- "time"
- "golang.org/x/sys/unix"
- )
- func (self *FileSystemUsage) Get(path string) error {
- stat := syscall.Statfs_t{}
- err := syscall.Statfs(path, &stat)
- if err != nil {
- return err
- }
- self.Total = uint64(stat.Blocks) * uint64(stat.Bsize)
- self.Free = uint64(stat.Bfree) * uint64(stat.Bsize)
- self.Avail = uint64(stat.Bavail) * uint64(stat.Bsize)
- self.Used = self.Total - self.Free
- self.Files = stat.Files
- self.FreeFiles = uint64(stat.Ffree)
- return nil
- }
- func (r *Rusage) Get(who int) error {
- ru, err := getResourceUsage(who)
- if err != nil {
- return err
- }
- uTime := convertRtimeToDur(ru.Utime)
- sTime := convertRtimeToDur(ru.Stime)
- r.Utime = uTime
- r.Stime = sTime
- r.Maxrss = int64(ru.Maxrss)
- r.Ixrss = int64(ru.Ixrss)
- r.Idrss = int64(ru.Idrss)
- r.Isrss = int64(ru.Isrss)
- r.Minflt = int64(ru.Minflt)
- r.Majflt = int64(ru.Majflt)
- r.Nswap = int64(ru.Nswap)
- r.Inblock = int64(ru.Inblock)
- r.Oublock = int64(ru.Oublock)
- r.Msgsnd = int64(ru.Msgsnd)
- r.Msgrcv = int64(ru.Msgrcv)
- r.Nsignals = int64(ru.Nsignals)
- r.Nvcsw = int64(ru.Nvcsw)
- r.Nivcsw = int64(ru.Nivcsw)
- return nil
- }
- func getResourceUsage(who int) (unix.Rusage, error) {
- r := unix.Rusage{}
- err := unix.Getrusage(who, &r)
- return r, err
- }
- func convertRtimeToDur(t unix.Timeval) time.Duration {
- return time.Duration(t.Nano())
- }
|