Add ram and swap components on FreeBSD - slstatus - status monitor | |
git clone git://git.suckless.org/slstatus | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a1ac203d16c379d7fc05765545af2977a7a3584d | |
parent 10bdf01b715dcc994f3fe32a6881d5e0b2613a6c | |
Author: Michael Buch <[email protected]> | |
Date: Sat, 16 Feb 2019 01:26:44 +0000 | |
Add ram and swap components on FreeBSD | |
Diffstat: | |
M components/ram.c | 63 +++++++++++++++++++++++++++++… | |
M components/swap.c | 84 +++++++++++++++++++++++++++++… | |
2 files changed, 147 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/components/ram.c b/components/ram.c | |
@@ -156,4 +156,67 @@ | |
return NULL; | |
} | |
+#elif defined(__FreeBSD__) | |
+ #include <sys/sysctl.h> | |
+ #include <sys/vmmeter.h> | |
+ #include <unistd.h> | |
+ #include <vm/vm_param.h> | |
+ | |
+ const char * | |
+ ram_free(void) { | |
+ struct vmtotal vm_stats; | |
+ int mib[] = {CTL_VM, VM_TOTAL}; | |
+ size_t len; | |
+ | |
+ len = sizeof(struct vmtotal); | |
+ if (sysctl(mib, 2, &vm_stats, &len, NULL, 0) == -1 | |
+ || !len) | |
+ return NULL; | |
+ | |
+ return fmt_human(vm_stats.t_free * getpagesize(), 1024); | |
+ } | |
+ | |
+ const char * | |
+ ram_total(void) { | |
+ long npages; | |
+ size_t len; | |
+ | |
+ len = sizeof(npages); | |
+ if (sysctlbyname("vm.stats.vm.v_page_count", &npages, &len, NU… | |
+ || !len) | |
+ return NULL; | |
+ | |
+ return fmt_human(npages * getpagesize(), 1024); | |
+ } | |
+ | |
+ const char * | |
+ ram_perc(void) { | |
+ long npages; | |
+ long active; | |
+ size_t len; | |
+ | |
+ len = sizeof(npages); | |
+ if (sysctlbyname("vm.stats.vm.v_page_count", &npages, &len, NU… | |
+ || !len) | |
+ return NULL; | |
+ | |
+ if (sysctlbyname("vm.stats.vm.v_active_count", &active, &len, … | |
+ || !len) | |
+ return NULL; | |
+ | |
+ return bprintf("%d", active * 100 / npages); | |
+ } | |
+ | |
+ const char * | |
+ ram_used(void) { | |
+ long active; | |
+ size_t len; | |
+ | |
+ len = sizeof(active); | |
+ if (sysctlbyname("vm.stats.vm.v_active_count", &active, &len, … | |
+ || !len) | |
+ return NULL; | |
+ | |
+ return fmt_human(active * getpagesize(), 1024); | |
+ } | |
#endif | |
diff --git a/components/swap.c b/components/swap.c | |
@@ -197,4 +197,88 @@ | |
return fmt_human(used * 1024, 1024); | |
} | |
+#elif defined(__FreeBSD__) | |
+ #include <stdlib.h> | |
+ #include <sys/types.h> | |
+ #include <fcntl.h> | |
+ #include <unistd.h> | |
+ #include <kvm.h> | |
+ | |
+ static int getswapinfo(struct kvm_swap *swap_info, size_t size) | |
+ { | |
+ kvm_t *kd; | |
+ | |
+ kd = kvm_openfiles(NULL, "/dev/null", NULL, 0, NULL); | |
+ if(kd == NULL) { | |
+ warn("kvm_openfiles '/dev/null':"); | |
+ return 0; | |
+ } | |
+ | |
+ if(kvm_getswapinfo(kd, swap_info, size, 0 /* Unused flags */) … | |
+ warn("kvm_getswapinfo:"); | |
+ kvm_close(kd); | |
+ return 0; | |
+ } | |
+ | |
+ kvm_close(kd); | |
+ return 1; | |
+ } | |
+ | |
+ const char * | |
+ swap_free(void) | |
+ { | |
+ struct kvm_swap swap_info[1]; | |
+ long used, total; | |
+ | |
+ if(!getswapinfo(swap_info, 1)) | |
+ return NULL; | |
+ | |
+ total = swap_info[0].ksw_total; | |
+ used = swap_info[0].ksw_used; | |
+ | |
+ return fmt_human((total - used) * getpagesize(), 1024); | |
+ } | |
+ | |
+ const char * | |
+ swap_perc(void) | |
+ { | |
+ struct kvm_swap swap_info[1]; | |
+ long used, total; | |
+ | |
+ if(!getswapinfo(swap_info, 1)) | |
+ return NULL; | |
+ | |
+ total = swap_info[0].ksw_total; | |
+ used = swap_info[0].ksw_used; | |
+ | |
+ return bprintf("%d", used * 100 / total); | |
+ } | |
+ | |
+ const char * | |
+ swap_total(void) | |
+ { | |
+ struct kvm_swap swap_info[1]; | |
+ long total; | |
+ | |
+ if(!getswapinfo(swap_info, 1)) | |
+ return NULL; | |
+ | |
+ total = swap_info[0].ksw_total; | |
+ | |
+ return fmt_human(total * getpagesize(), 1024); | |
+ } | |
+ | |
+ const char * | |
+ swap_used(void) | |
+ { | |
+ struct kvm_swap swap_info[1]; | |
+ long used; | |
+ | |
+ if(!getswapinfo(swap_info, 1)) | |
+ return NULL; | |
+ | |
+ used = swap_info[0].ksw_used; | |
+ | |
+ return fmt_human(used * getpagesize(), 1024); | |
+ } | |
#endif |