From 28712f22b1a832018915f7721b394fb693569132 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 27 Nov 2014 17:44:55 -0200 Subject: [PATCH] Reading first bits of data! --- freebsd/FreeBSDProcessList.c | 58 +++++++++++++++++++++++++++++++----- freebsd/FreeBSDProcessList.h | 10 ++++++- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/freebsd/FreeBSDProcessList.c b/freebsd/FreeBSDProcessList.c index 275c1082..c75fb10f 100644 --- a/freebsd/FreeBSDProcessList.c +++ b/freebsd/FreeBSDProcessList.c @@ -1,39 +1,81 @@ /* -htop - UnsupportedProcessList.c +htop - FreeBSDProcessList.c (C) 2014 Hisham H. Muhammad Released under the GNU GPL, see the COPYING file in the source distribution for its full text. */ #include "ProcessList.h" +#include "FreeBSDProcessList.h" +#include #include +#include #include +#include /*{ +#include + +typedef struct FreeBSDProcessList_ { + ProcessList super; + kvm_t* kd; +} FreeBSDProcessList; + }*/ +static int MIB_vm_stats_vm_v_wire_count[4]; +static int MIB_hw_physmem[2]; + ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) { - ProcessList* this = calloc(1, sizeof(ProcessList)); - ProcessList_init(this, usersTable, pidWhiteList); + FreeBSDProcessList* this = calloc(1, sizeof(FreeBSDProcessList)); + ProcessList* pl = (ProcessList*) this; + ProcessList_init((ProcessList*)this, usersTable, pidWhiteList); int cpus = 1; size_t sizeof_cpus = sizeof(cpus); int err = sysctlbyname("hw.ncpu", &cpus, &sizeof_cpus, NULL, 0); if (err) cpus = 1; - this->cpuCount = MAX(cpus, 1); - this->cpus = realloc(this->cpus, cpus * sizeof(CPUData)); + pl->cpuCount = MAX(cpus, 1); + pl->cpus = realloc(pl->cpus, cpus * sizeof(CPUData)); for (int i = 0; i < cpus; i++) { - this->cpus[i].totalTime = 1; - this->cpus[i].totalPeriod = 1; + pl->cpus[i].totalTime = 1; + pl->cpus[i].totalPeriod = 1; } + + size_t len = 4; + sysctlnametomib("vm.stats.vm.v_wire_count", MIB_vm_stats_vm_v_wire_count, &len); + len = 2; + sysctlnametomib("hw.physmem", MIB_hw_physmem, &len); - return this; + return (ProcessList*) this; +} + +static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) { + const FreeBSDProcessList* fpl = (FreeBSDProcessList*) pl; + + unsigned long long int swapFree = 0; + size_t len = sizeof(pl->totalMem); + sysctl(MIB_hw_physmem, 2, &(pl->totalMem), &len, NULL, 0); + pl->totalMem /= 1024; + sysctl(MIB_vm_stats_vm_v_wire_count, 4, &(pl->usedMem), &len, NULL, 0); + pl->usedMem *= PAGE_SIZE / 1024; + pl->freeMem = pl->totalMem - pl->usedMem; + + pl->sharedMem = 0; + pl->buffersMem = 0; + pl->cachedMem = 0; + pl->totalSwap = 0; + swapFree = 0; + pl->usedSwap = pl->totalSwap - swapFree; } void ProcessList_scan(ProcessList* this) { (void) this; + + FreeBSDProcessList_scanMemoryInfo(this); + // stub! } diff --git a/freebsd/FreeBSDProcessList.h b/freebsd/FreeBSDProcessList.h index ed9a7a36..9389e3aa 100644 --- a/freebsd/FreeBSDProcessList.h +++ b/freebsd/FreeBSDProcessList.h @@ -3,13 +3,21 @@ #ifndef HEADER_FreeBSDProcessList #define HEADER_FreeBSDProcessList /* -htop - UnsupportedProcessList.h +htop - FreeBSDProcessList.h (C) 2014 Hisham H. Muhammad Released under the GNU GPL, see the COPYING file in the source distribution for its full text. */ +#include + +typedef struct FreeBSDProcessList_ { + ProcessList super; + kvm_t* kd; +} FreeBSDProcessList; + + ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList);