aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/elastic/gosigar/sigar_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/elastic/gosigar/sigar_unix.go')
-rw-r--r--vendor/github.com/elastic/gosigar/sigar_unix.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/vendor/github.com/elastic/gosigar/sigar_unix.go b/vendor/github.com/elastic/gosigar/sigar_unix.go
new file mode 100644
index 000000000..3f3a9f7ff
--- /dev/null
+++ b/vendor/github.com/elastic/gosigar/sigar_unix.go
@@ -0,0 +1,69 @@
+// 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())
+}