diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2014-11-27 20:03:29 -0200 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2014-11-27 20:03:29 -0200 |
commit | 6d92d7f73d3bfc4a4700e841dd955c6ce7b41739 (patch) | |
tree | 7a03411c14529a400c4abc5ceb8fe45f2a029d78 /freebsd | |
parent | 96e03739c41e32c5a0ba13ff3d097358f65bc8f4 (diff) |
Load averages for FreeBSD!
Diffstat (limited to 'freebsd')
-rw-r--r-- | freebsd/Platform.c | 19 | ||||
-rw-r--r-- | freebsd/Platform.h | 2 |
2 files changed, 21 insertions, 0 deletions
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 <sys/types.h> #include <sys/sysctl.h> #include <sys/time.h> +#include <sys/resource.h> +#include <vm/vm_param.h> #include <time.h> /*{ @@ -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 |