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  }