summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2014-11-27 20:03:29 -0200
committerHisham Muhammad <hisham@gobolinux.org>2014-11-27 20:03:29 -0200
commit6d92d7f73d3bfc4a4700e841dd955c6ce7b41739 (patch)
tree7a03411c14529a400c4abc5ceb8fe45f2a029d78 /freebsd
parent96e03739c41e32c5a0ba13ff3d097358f65bc8f4 (diff)
Load averages for FreeBSD!
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/Platform.c19
-rw-r--r--freebsd/Platform.h2
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

© 2014-2024 Faster IT GmbH | imprint | privacy policy