diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/print_cpu_usage.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/print_cpu_usage.c b/src/print_cpu_usage.c index 7fdd11c..7113eae 100644 --- a/src/print_cpu_usage.c +++ b/src/print_cpu_usage.c @@ -6,7 +6,8 @@ #include <yajl/yajl_gen.h> #include <yajl/yajl_version.h> -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__OpenBSD__) +#include <sys/param.h> #include <sys/types.h> #include <sys/sysctl.h> #include <sys/dkstat.h> @@ -42,12 +43,26 @@ void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) { diff_usage = (1000 * (diff_total - diff_idle)/diff_total + 5)/10; prev_total = curr_total; prev_idle = curr_idle; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + +#if defined(__FreeBSD__) size_t size; long cp_time[CPUSTATES]; size = sizeof cp_time; if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0) goto error; +#else + /* This information is taken from the boot cpu, any other cpus are currently ignored. */ + long cp_time[CPUSTATES]; + int mib[2]; + size_t size = sizeof(cp_time); + + mib[0] = CTL_KERN; + mib[1] = KERN_CPTIME; + + if (sysctl(mib, 2, cp_time, &size, NULL, 0)) + goto error; +#endif curr_user = cp_time[CP_USER]; curr_nice = cp_time[CP_NICE]; |