summaryrefslogtreecommitdiffstats
path: root/src/Common/Backends/SystemBackendProc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Backends/SystemBackendProc.cpp')
-rw-r--r--src/Common/Backends/SystemBackendProc.cpp49
1 files changed, 45 insertions, 4 deletions
diff --git a/src/Common/Backends/SystemBackendProc.cpp b/src/Common/Backends/SystemBackendProc.cpp
index d33fbf3..7e9fcbd 100644
--- a/src/Common/Backends/SystemBackendProc.cpp
+++ b/src/Common/Backends/SystemBackendProc.cpp
@@ -18,14 +18,18 @@
*/
#include "SystemBackendProc.h"
+
#include <fstream>
+#include <pcrecpp.h>
+
+#include <iostream>
namespace Mad {
namespace Common {
namespace Backends {
-SystemBackendProc::Uptime SystemBackendProc::getUptime() const {
- Uptime uptime = {0, 0};
+SystemBackend::UptimeInfo SystemBackendProc::getUptimeInfo() const {
+ UptimeInfo uptime = {0, 0};
std::ifstream file("/proc/uptime");
@@ -37,17 +41,54 @@ SystemBackendProc::Uptime SystemBackendProc::getUptime() const {
if(!file.good())
return uptime;
- uptime.uptime = (uint32_t)f;
+ uptime.uptime = (unsigned long)f;
file >> f;
if(!file.good())
return uptime;
- uptime.idleTime = (uint32_t)f;
+ uptime.idleTime = (unsigned long)f;
return uptime;
}
+SystemBackend::MemoryInfo SystemBackendProc::getMemoryInfo() const {
+ MemoryInfo memInfo = {0, 0, 0, 0};
+
+ std::ifstream file("/proc/meminfo");
+
+ if(!file.good())
+ return memInfo;
+
+ pcrecpp::RE re("(.+):\\s*(\\d+).*");
+
+ while(!file.eof() && file.good()) {
+ std::string line;
+ std::getline(file, line);
+
+ std::string name;
+ unsigned long value;
+
+ if(!re.FullMatch(line, &name, &value))
+ continue;
+
+ if(name == "MemTotal")
+ memInfo.totalMem = value;
+ else if(name == "MemFree")
+ memInfo.freeMem = value;
+ else if(name == "SwapTotal")
+ memInfo.totalSwap = value;
+ else if(name == "SwapFree")
+ memInfo.freeSwap = value;
+
+ if(memInfo.totalMem && memInfo.freeMem && memInfo.totalSwap && memInfo.freeSwap)
+ break;
+ }
+
+
+ return memInfo;
+}
+
}
}
}