From 120d15059425b522db464e6f3f857bee4a781cce Mon Sep 17 00:00:00 2001 From: Michael Buch Date: Tue, 5 Feb 2019 02:44:37 +0000 Subject: Add support for cpu and uptime components on FreeBSD --- components/cpu.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'components/cpu.c') diff --git a/components/cpu.c b/components/cpu.c index d4f8064..9a021d5 100644 --- a/components/cpu.c +++ b/components/cpu.c @@ -93,6 +93,56 @@ return NULL; } + return bprintf("%d", 100 * + ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + + a[CP_INTR]) - + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + + b[CP_INTR])) / + ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + + a[CP_INTR] + a[CP_IDLE]) - + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + + b[CP_INTR] + b[CP_IDLE]))); + } +#elif defined(__FreeBSD__) + #include + #include + #include + + const char * + cpu_freq(void) + { + int freq; + size_t size; + + size = sizeof(freq); + /* in MHz */ + if (sysctlbyname("hw.clockrate", &freq, &size, NULL, 0) == -1 + || !size) { + warn("sysctlbyname 'hw.clockrate':"); + return NULL; + } + + return fmt_human(freq * 1E6, 1000); + } + + const char * + cpu_perc(void) + { + size_t size; + static long a[CPUSTATES]; + long b[CPUSTATES]; + + size = sizeof(a); + memcpy(b, a, sizeof(b)); + if (sysctlbyname("kern.cp_time", &a, &size, NULL, 0) == -1 + || !size) { + warn("sysctlbyname 'kern.cp_time':"); + return NULL; + } + if (b[0] == 0) { + return NULL; + } + return bprintf("%d", 100 * ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR]) - -- cgit v1.2.3