diff options
author | Michael Buch <michaelbuch12@gmail.com> | 2019-02-16 01:26:44 +0000 |
---|---|---|
committer | Aaron Marcher <me@drkhsh.at> | 2019-02-16 16:58:34 +0100 |
commit | a1ac203d16c379d7fc05765545af2977a7a3584d (patch) | |
tree | d6a36d775a1fbba58ba17447e9e20bc081923894 /components/ram.c | |
parent | 10bdf01b715dcc994f3fe32a6881d5e0b2613a6c (diff) | |
download | slstatus-a1ac203d16c379d7fc05765545af2977a7a3584d.tar.gz |
Add ram and swap components on FreeBSD
Diffstat (limited to 'components/ram.c')
-rw-r--r-- | components/ram.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/components/ram.c b/components/ram.c index 48144e4..47e6fda 100644 --- 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, NULL, 0) == -1 + || !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, NULL, 0) == -1 + || !len) + return NULL; + + if (sysctlbyname("vm.stats.vm.v_active_count", &active, &len, NULL, 0) == -1 + || !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, NULL, 0) == -1 + || !len) + return NULL; + + return fmt_human(active * getpagesize(), 1024); + } #endif |