From 6d92d7f73d3bfc4a4700e841dd955c6ce7b41739 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 27 Nov 2014 20:03:29 -0200 Subject: [PATCH] Load averages for FreeBSD! --- freebsd/Platform.c | 19 +++++++++++++++++++ freebsd/Platform.h | 2 ++ unsupported/Platform.h | 2 ++ 3 files changed, 23 insertions(+) diff --git a/freebsd/Platform.c b/freebsd/Platform.c index b004b298..694e2429 100644 --- a/freebsd/Platform.c +++ b/freebsd/Platform.c @@ -20,6 +20,8 @@ in the source distribution for its full text. #include #include #include +#include +#include #include /*{ @@ -64,3 +66,20 @@ int Platform_getUptime() { return (int) difftime(currTime.tv_sec, bootTime.tv_sec); } + +void Platform_getLoadAverage(double* one, double* five, double* fifteen) { + struct loadavg loadAverage; + int mib[2] = { CTL_VM, VM_LOADAVG }; + size_t size = sizeof(loadAverage); + + int err = sysctl(mib, 2, &loadAverage, &size, NULL, 0); + if (err) { + *one = 0; + *five = 0; + *fifteen = 0; + return; + } + *one = (double) loadAverage.ldavg[0] / loadAverage.fscale; + *five = (double) loadAverage.ldavg[1] / loadAverage.fscale; + *fifteen = (double) loadAverage.ldavg[2] / loadAverage.fscale; +} diff --git a/freebsd/Platform.h b/freebsd/Platform.h index 7435f631..86601475 100644 --- a/freebsd/Platform.h +++ b/freebsd/Platform.h @@ -17,4 +17,6 @@ extern MeterClass* Platform_meterTypes[]; int Platform_getUptime(); +void Platform_getLoadAverage(double* one, double* five, double* fifteen); + #endif diff --git a/unsupported/Platform.h b/unsupported/Platform.h index 026c45fb..2476d601 100644 --- a/unsupported/Platform.h +++ b/unsupported/Platform.h @@ -17,4 +17,6 @@ extern MeterClass* Platform_meterTypes[]; int Platform_getUptime(); +void Platform_getLoadAverage(double* one, double* five, double* fifteen); + #endif