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