Introduction
Introduction Statistics Contact Development Disclaimer Help
Add support for cpu and uptime components on FreeBSD - slstatus - status monitor
git clone git://git.suckless.org/slstatus
Log
Files
Refs
README
LICENSE
---
commit 120d15059425b522db464e6f3f857bee4a781cce
parent ec306623df7321a4e6ec11f70b6152a2e614d1ed
Author: Michael Buch <[email protected]>
Date: Tue, 5 Feb 2019 02:44:37 +0000
Add support for cpu and uptime components on FreeBSD
Diffstat:
M components/cpu.c | 50 +++++++++++++++++++++++++++++…
M components/uptime.c | 14 ++++++++++++--
2 files changed, 62 insertions(+), 2 deletions(-)
---
diff --git a/components/cpu.c b/components/cpu.c
@@ -103,4 +103,54 @@
(b[CP_USER] + b[CP_NICE] + b[CP_SYS] +
b[CP_INTR] + b[CP_IDLE])));
}
+#elif defined(__FreeBSD__)
+ #include <sys/param.h>
+ #include <sys/sysctl.h>
+ #include <devstat.h>
+
+ 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]) -
+ (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])));
+ }
#endif
diff --git a/components/uptime.c b/components/uptime.c
@@ -5,14 +5,24 @@
#include "../util.h"
+#if defined(CLOCK_BOOTTIME)
+ #define UPTIME_FLAG CLOCK_BOOTTIME
+#elif defined(CLOCK_UPTIME)
+ #define UPTIME_FLAG CLOCK_UPTIME
+#else
+ #define UPTIME_FLAG CLOCK_MONOTONIC
+#endif
+
const char *
uptime(void)
{
+ char warn_buf[256];
uintmax_t h, m;
struct timespec uptime;
- if (clock_gettime(CLOCK_BOOTTIME, &uptime) < 0) {
- warn("clock_gettime 'CLOCK_BOOTTIME'");
+ if (clock_gettime(UPTIME_FLAG, &uptime) < 0) {
+ snprintf(warn_buf, 256, "clock_gettime %d", UPTIME_FLAG);
+ warn(warn_buf);
return NULL;
}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.