From e3f496f4fe5ca7d783daddb53b9763361b273cee Mon Sep 17 00:00:00 2001 From: WAKAYAMA shirou Date: Tue, 22 Apr 2014 11:58:03 +0900 Subject: [PATCH] syscall.SysInfo not exists in FreeBSD. use sysctl instead. --- common_freebsd.go | 20 ++++++++++++++++++++ mem_freebsd.go | 15 +++++++++++++++ mem_linux.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ mem_unix.go | 51 --------------------------------------------------- 4 files changed, 86 insertions(+), 51 deletions(-) create mode 100644 common_freebsd.go create mode 100644 mem_freebsd.go create mode 100644 mem_linux.go delete mode 100644 mem_unix.go diff --git a/common_freebsd.go b/common_freebsd.go new file mode 100644 index 0000000..bf01f93 --- /dev/null +++ b/common_freebsd.go @@ -0,0 +1,20 @@ +// +build freebsd + +package gopsutil + +import ( + "os/exec" + "strings" +) + +func do_sysctrl(mib string) ([]string, error){ + out, err := exec.Command("/sbin/sysctl", "-n", mib).Output() + if err != nil { + return []string{}, err + } + v := strings.Replace(string(out), "{ ", "", 1) + v = strings.Replace(string(v), " }", "", 1) + values := strings.Fields(string(v)) + + return values, nil +} diff --git a/mem_freebsd.go b/mem_freebsd.go new file mode 100644 index 0000000..0c39216 --- /dev/null +++ b/mem_freebsd.go @@ -0,0 +1,15 @@ +// +build freebsd + +package gopsutil + +func Virtual_memory() (Virtual_memoryStat, error) { + ret := Virtual_memoryStat{} + + return ret, nil +} + +func Swap_memory() (Swap_memoryStat, error) { + ret := Swap_memoryStat{} + + return ret, nil +} diff --git a/mem_linux.go b/mem_linux.go new file mode 100644 index 0000000..a85605b --- /dev/null +++ b/mem_linux.go @@ -0,0 +1,51 @@ +// +build freebsd linux + +package gopsutil + +import ( + "syscall" +) + +func Virtual_memory() (Virtual_memoryStat, error) { + ret := Virtual_memoryStat{} + sysinfo := &syscall.Sysinfo_t{} + + if err := syscall.Sysinfo(sysinfo); err != nil { + return ret, err + } + ret.Total = uint64(sysinfo.Totalram) + ret.Free = uint64(sysinfo.Freeram) + ret.Shared = uint64(sysinfo.Sharedram) + ret.Buffers = uint64(sysinfo.Bufferram) + + ret.Used = ret.Total - ret.Free + + // TODO: platform independent + ret.Available = ret.Free + ret.Buffers + ret.Cached + + ret.Used = ret.Total - ret.Free + ret.UsedPercent = float64(ret.Total-ret.Available) / float64(ret.Total) * 100.0 + + /* + kern := buffers + cached + ret.ActualFree = ret.Free + kern + ret.ActualUsed = ret.Used - kern + */ + + return ret, nil +} + +func Swap_memory() (Swap_memoryStat, error) { + ret := Swap_memoryStat{} + sysinfo := &syscall.Sysinfo_t{} + + if err := syscall.Sysinfo(sysinfo); err != nil { + return ret, err + } + ret.Total = sysinfo.Totalswap + ret.Free = sysinfo.Freeswap + ret.Used = ret.Total - ret.Free + ret.UsedPercent = float64(ret.Total-ret.Free) / float64(ret.Total) * 100.0 + + return ret, nil +} diff --git a/mem_unix.go b/mem_unix.go deleted file mode 100644 index a85605b..0000000 --- a/mem_unix.go +++ /dev/null @@ -1,51 +0,0 @@ -// +build freebsd linux - -package gopsutil - -import ( - "syscall" -) - -func Virtual_memory() (Virtual_memoryStat, error) { - ret := Virtual_memoryStat{} - sysinfo := &syscall.Sysinfo_t{} - - if err := syscall.Sysinfo(sysinfo); err != nil { - return ret, err - } - ret.Total = uint64(sysinfo.Totalram) - ret.Free = uint64(sysinfo.Freeram) - ret.Shared = uint64(sysinfo.Sharedram) - ret.Buffers = uint64(sysinfo.Bufferram) - - ret.Used = ret.Total - ret.Free - - // TODO: platform independent - ret.Available = ret.Free + ret.Buffers + ret.Cached - - ret.Used = ret.Total - ret.Free - ret.UsedPercent = float64(ret.Total-ret.Available) / float64(ret.Total) * 100.0 - - /* - kern := buffers + cached - ret.ActualFree = ret.Free + kern - ret.ActualUsed = ret.Used - kern - */ - - return ret, nil -} - -func Swap_memory() (Swap_memoryStat, error) { - ret := Swap_memoryStat{} - sysinfo := &syscall.Sysinfo_t{} - - if err := syscall.Sysinfo(sysinfo); err != nil { - return ret, err - } - ret.Total = sysinfo.Totalswap - ret.Free = sysinfo.Freeswap - ret.Used = ret.Total - ret.Free - ret.UsedPercent = float64(ret.Total-ret.Free) / float64(ret.Total) * 100.0 - - return ret, nil -}