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.cpp52
1 files changed, 28 insertions, 24 deletions
diff --git a/src/Common/Backends/SystemBackendProc.cpp b/src/Common/Backends/SystemBackendProc.cpp
index 37bfaf3..134998f 100644
--- a/src/Common/Backends/SystemBackendProc.cpp
+++ b/src/Common/Backends/SystemBackendProc.cpp
@@ -28,37 +28,37 @@ namespace Backends {
SystemBackendProc SystemBackendProc::backend;
-SystemBackend::UptimeInfo SystemBackendProc::uptimeInfo() {
- UptimeInfo uptime = {0, 0};
+bool SystemBackendProc::uptimeInfo(const sigc::slot<void, unsigned long, unsigned long> &callback) {
+ unsigned long uptime = 0, idleTime = 0;
uptimeFile.seekg(0, std::ios::beg);
if(!uptimeFile.good())
- return uptime;
+ return false;
float f;
uptimeFile >> f;
if(!uptimeFile.good())
- return uptime;
+ return false;
- uptime.uptime = (unsigned long)f;
+ uptime = (unsigned long)f;
uptimeFile >> f;
- if(!uptimeFile.good())
- return uptime;
+ if(uptimeFile.good())
+ idleTime = (unsigned long)f;
- uptime.idleTime = (unsigned long)f;
+ callback(uptime, idleTime);
- return uptime;
+ return true;
}
-SystemBackend::MemoryInfo SystemBackendProc::memoryInfo() {
- MemoryInfo memInfo = {0, 0, 0, 0};
+bool SystemBackendProc::memoryInfo(const sigc::slot<void, unsigned long, unsigned long, unsigned long, unsigned long> &callback) {
+ unsigned long totalMem = 0, freeMem = 0, totalSwap = 0, freeSwap = 0;
meminfoFile.seekg(0, std::ios::beg);
if(!meminfoFile.good())
- return memInfo;
+ return false;
while(!meminfoFile.eof() && meminfoFile.good()) {
std::string line;
@@ -69,42 +69,46 @@ SystemBackend::MemoryInfo SystemBackendProc::memoryInfo() {
if(std::sscanf(line.c_str(), "%s %lu", name, &value) == 2) {
if(std::strcmp(name, "MemTotal:") == 0)
- memInfo.totalMem = value;
+ totalMem = value;
else if(std::strcmp(name, "MemFree:") == 0)
- memInfo.freeMem = value;
+ freeMem = value;
else if(std::strcmp(name, "SwapTotal:") == 0)
- memInfo.totalSwap = value;
+ totalSwap = value;
else if(std::strcmp(name, "SwapFree:") == 0)
- memInfo.freeSwap = value;
+ freeSwap = value;
}
delete [] name;
- if(memInfo.totalMem && memInfo.freeMem && memInfo.totalSwap && memInfo.freeSwap)
+ if(totalMem && freeMem && totalSwap && freeSwap)
break;
}
+ callback(totalMem, freeMem, totalSwap, freeSwap);
- return memInfo;
+ return true;
}
-SystemBackend::LoadInfo SystemBackendProc::loadInfo() {
- LoadInfo loadInfo = {0, 0, 0, 0, 0};
+bool SystemBackendProc::loadInfo(const sigc::slot<void, unsigned long, unsigned long, float, float, float> &callback) {
+ unsigned long currentLoad = 0, nProcesses = 0;
+ float loadAvg1 = 0, loadAvg5 = 0, loadAvg15 = 0;
loadFile.seekg(0, std::ios::beg);
if(!loadFile.good())
- return loadInfo;
+ return false;
std::string line;
std::getline(loadFile, line);
if(line.empty())
- return loadInfo;
+ return false;
+
+ std::sscanf(line.c_str(), "%f %f %f %lu/%lu", &loadAvg1, &loadAvg5, &loadAvg15, &currentLoad, &nProcesses);
- std::sscanf(line.c_str(), "%f %f %f %lu/%lu", &loadInfo.loadAvg1, &loadInfo.loadAvg5, &loadInfo.loadAvg15, &loadInfo.currentLoad, &loadInfo.nProcesses);
+ callback(currentLoad, nProcesses, loadAvg1, loadAvg5, loadAvg15);
- return loadInfo;
+ return true;
}
}