From 1fc7b3cabd5cdf26ed11b0ad8fa2b38e4d011f00 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 21 Jan 2016 13:47:11 -0500 Subject: [PATCH] Add a new API call which returns the total memory in use This will be expanded upon later so we can return more of the particulars of where memory is used REST Request: ------------------------------- PUT /sysadm/systeminfo { "action" : "memorypercentage" } REST Response: ------------------------------- { "args": { "memorypercentage": { "memoryused": 42 } } } WebSocket Request: ------------------------------- { "id" : "fooid", "args" : { "action" : "memorypercentage" }, "namespace" : "sysadm", "name" : "systeminfo" } WebSocket Response: ------------------------------- { "args": { "memorypercentage": { "memoryused": 42 } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/library/sysadm-systeminfo.cpp | 14 ++++++++++++++ src/library/sysadm-systeminfo.h | 1 + src/server/WebBackend.cpp | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/library/sysadm-systeminfo.cpp b/src/library/sysadm-systeminfo.cpp index 33c5635..89d56cf 100644 --- a/src/library/sysadm-systeminfo.cpp +++ b/src/library/sysadm-systeminfo.cpp @@ -160,3 +160,17 @@ QJsonObject SysInfo::externalDevicePaths() { // Return the devices / mounts return retObject; } + +// KPM 1-21-2016 +// This needs to beefed up as well, so we return more stats on arc, wired, etc +QJsonObject SysInfo::memoryPercentage() { + QJsonObject retObject; + //SYSCTL: vm.stats.vm.v__count + QStringList info = General::RunCommand("sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_wire_count vm.stats.vm.v_active_count").split("\n"); + if(info.length()<3){ return retObject; } //error in fetching information + //List output: [total, wired, active] + double perc = 100.0* (info[1].toLong()+info[2].toLong())/(info[0].toDouble()); + retObject.insert("memoryused", qRound(perc)); + return retObject; +} + diff --git a/src/library/sysadm-systeminfo.h b/src/library/sysadm-systeminfo.h index 75ed40a..d2c654a 100644 --- a/src/library/sysadm-systeminfo.h +++ b/src/library/sysadm-systeminfo.h @@ -18,6 +18,7 @@ public: static QJsonObject cpuPercentage(); static QJsonObject cpuTemps(); static QJsonObject externalDevicePaths(); + static QJsonObject memoryPercentage(); }; } //end of pcbsd namespace diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index de3c2b8..c5e870a 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -271,6 +271,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemInfoRequest(const QJso ok = true; out->insert("externalmounts", sysadm::SysInfo::externalDevicePaths()); } + if(act=="memorypercentage"){ + ok = true; + out->insert("memorypercentage", sysadm::SysInfo::memoryPercentage()); + } } //end of "action" key usage