ohmu
·
2026-10-15
1#include "detection/loadavg/loadavg.h"
2#include "common/debug.h"
3
4#include <errno.h>
5#include <string.h>
6#include <sys/sysctl.h>
7
8#if __FreeBSD__ || __OpenBSD__ || __NetBSD__
9 #include <sys/types.h>
10 #include <sys/resource.h>
11 #if __FreeBSD__
12 #include <vm/vm_param.h>
13 #endif
14#endif
15
16const char* ffDetectLoadavg(double result[3]) {
17 struct loadavg load;
18 size_t size = sizeof(load);
19 if (sysctl((int[]) { CTL_VM, VM_LOADAVG }, 2, &load, &size, nullptr, 0) < 0) {
20 FF_DEBUG("sysctl({CTL_VM, VM_LOADAVG}) failed: %s", strerror(errno));
21 return "sysctl({CTL_VM, VM_LOADAVG}) failed";
22 }
23 for (int i = 0; i < 3; i++) {
24 result[i] = (double) load.ldavg[i] / (double) load.fscale;
25 }
26 return nullptr;
27}