From 54c74923eeb15d695a3cd5a47e3c5bb8c3eb336c Mon Sep 17 00:00:00 2001 From: Dominik Honnef Date: Mon, 26 Dec 2016 22:50:20 +0100 Subject: [PATCH] Implement loadavg on FreeBSD without cgo The code may also work for other BSDs, but I don't have access to those for testing. --- collector/loadavg_freebsd.go | 27 +++++++++++++++++++++++++++ collector/loadavg_unix.go | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 collector/loadavg_freebsd.go diff --git a/collector/loadavg_freebsd.go b/collector/loadavg_freebsd.go new file mode 100644 index 00000000..b490513f --- /dev/null +++ b/collector/loadavg_freebsd.go @@ -0,0 +1,27 @@ +// +build !noloadavg + +package collector + +import ( + "unsafe" + + "golang.org/x/sys/unix" +) + +func getLoad() ([]float64, error) { + type loadavg struct { + load [3]uint32 + scale int + } + b, err := unix.SysctlRaw("vm.loadavg") + if err != nil { + return nil, err + } + load := *(*loadavg)(unsafe.Pointer((&b[0]))) + scale := float64(load.scale) + return []float64{ + float64(load.load[0]) / scale, + float64(load.load[1]) / scale, + float64(load.load[2]) / scale, + }, nil +} diff --git a/collector/loadavg_unix.go b/collector/loadavg_unix.go index f121a657..7641ceaf 100644 --- a/collector/loadavg_unix.go +++ b/collector/loadavg_unix.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build darwin dragonfly freebsd netbsd openbsd solaris +// +build darwin dragonfly netbsd openbsd solaris // +build !noloadavg package collector