summaryrefslogtreecommitdiffstats
path: root/src/modules/SystemBackendProc/SystemBackendProc.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-05-21 01:42:33 +0200
committerMatthias Schiffer <matthias@gamezock.de>2009-05-21 01:42:33 +0200
commit73667d1102735c42cf385442aeb2a1735bb67d6a (patch)
treef0044dc9324ab0c15e63926bb22910d34a684b46 /src/modules/SystemBackendProc/SystemBackendProc.cpp
parent9c076d2649ff8c6997c2dec1e1ef4f7359d404ec (diff)
downloadmad-73667d1102735c42cf385442aeb2a1735bb67d6a.tar
mad-73667d1102735c42cf385442aeb2a1735bb67d6a.zip
SystemBackend-Interface ueberarbeitet
Diffstat (limited to 'src/modules/SystemBackendProc/SystemBackendProc.cpp')
-rw-r--r--src/modules/SystemBackendProc/SystemBackendProc.cpp75
1 files changed, 47 insertions, 28 deletions
diff --git a/src/modules/SystemBackendProc/SystemBackendProc.cpp b/src/modules/SystemBackendProc/SystemBackendProc.cpp
index d238e07..1888227 100644
--- a/src/modules/SystemBackendProc/SystemBackendProc.cpp
+++ b/src/modules/SystemBackendProc/SystemBackendProc.cpp
@@ -24,15 +24,13 @@
#include <cstdio>
#include <cstring>
-#include <boost/bind.hpp>
-
namespace Mad {
namespace Modules {
-SystemBackendProc *SystemBackendProc::backend = 0;
+boost::shared_ptr<SystemBackendProc> SystemBackendProc::backend;
-bool SystemBackendProc::getUptimeInfo(const boost::function2<void, unsigned long, unsigned long> &callback) {
- unsigned long uptime = 0, idleTime = 0;
+bool SystemBackendProc::getUptimeInfo(unsigned long *uptime, unsigned long *idleTime) {
+ Net::ThreadManager::get()->detach();
uptimeFile.seekg(0, std::ios::beg);
@@ -44,19 +42,27 @@ bool SystemBackendProc::getUptimeInfo(const boost::function2<void, unsigned long
if(!uptimeFile.good())
return false;
- uptime = (unsigned long)f;
+ if(uptime)
+ *uptime = (unsigned long)f;
uptimeFile >> f;
- if(uptimeFile.good())
- idleTime = (unsigned long)f;
-
- Net::ThreadManager::get()->pushWork(boost::bind(callback, uptime, idleTime));
+ if(uptimeFile.good() && idleTime)
+ *idleTime = (unsigned long)f;
return true;
}
-bool SystemBackendProc::getMemoryInfo(const boost::function4<void, unsigned long, unsigned long, unsigned long, unsigned long> &callback) {
- unsigned long totalMem = 0, freeMem = 0, totalSwap = 0, freeSwap = 0;
+bool SystemBackendProc::getMemoryInfo(unsigned long *totalMem, unsigned long *freeMem, unsigned long *totalSwap, unsigned long *freeSwap) {
+ Net::ThreadManager::get()->detach();
+
+ if(totalMem)
+ *totalMem = 0;
+ if(freeMem)
+ *freeMem = 0;
+ if(totalSwap)
+ *totalSwap = 0;
+ if(freeSwap)
+ *freeSwap = 0;
meminfoFile.seekg(0, std::ios::beg);
@@ -71,30 +77,30 @@ bool SystemBackendProc::getMemoryInfo(const boost::function4<void, unsigned long
unsigned long value;
if(std::sscanf(line.c_str(), "%s %lu", name, &value) == 2) {
- if(std::strcmp(name, "MemTotal:") == 0)
- totalMem = value;
- else if(std::strcmp(name, "MemFree:") == 0)
- freeMem = value;
- else if(std::strcmp(name, "SwapTotal:") == 0)
- totalSwap = value;
- else if(std::strcmp(name, "SwapFree:") == 0)
- freeSwap = value;
+ if(std::strcmp(name, "MemTotal:") == 0 && totalMem)
+ *totalMem = value;
+ else if(std::strcmp(name, "MemFree:") == 0 && freeMem)
+ *freeMem = value;
+ else if(std::strcmp(name, "SwapTotal:") == 0 && totalSwap)
+ *totalSwap = value;
+ else if(std::strcmp(name, "SwapFree:" ) == 0 && freeSwap)
+ *freeSwap = value;
}
delete [] name;
- if(totalMem && freeMem && totalSwap && freeSwap)
+ if((!totalMem || *totalMem) && (!freeMem || *freeMem) && (!totalSwap || *totalSwap) && (!freeSwap || *freeSwap))
break;
}
- Net::ThreadManager::get()->pushWork(boost::bind(callback, totalMem, freeMem, totalSwap, freeSwap));
-
return true;
}
-bool SystemBackendProc::getLoadInfo(const boost::function5<void, unsigned long, unsigned long, float, float, float> &callback) {
- unsigned long currentLoad = 0, nProcesses = 0;
- float loadAvg1 = 0, loadAvg5 = 0, loadAvg15 = 0;
+bool SystemBackendProc::getLoadInfo(unsigned long *currentLoad, unsigned long *nProcesses, float *loadAvg1, float *loadAvg5, float *loadAvg15) {
+ Net::ThreadManager::get()->detach();
+
+ unsigned long currentLoadValue = 0, nProcessesValue = 0;
+ float loadAvg1Value = 0, loadAvg5Value = 0, loadAvg15Value = 0;
loadFile.seekg(0, std::ios::beg);
@@ -107,9 +113,22 @@ bool SystemBackendProc::getLoadInfo(const boost::function5<void, unsigned long,
if(line.empty())
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", &loadAvg1Value, &loadAvg5Value, &loadAvg15Value, &currentLoadValue, &nProcessesValue);
+
+ if(currentLoad)
+ *currentLoad = currentLoadValue;
+
+ if(nProcesses)
+ *nProcesses = nProcessesValue;
+
+ if(loadAvg1)
+ *loadAvg1 = loadAvg1Value;
+
+ if(loadAvg5)
+ *loadAvg5 = loadAvg5Value;
- Net::ThreadManager::get()->pushWork(boost::bind(callback, currentLoad, nProcesses, loadAvg1, loadAvg5, loadAvg15));
+ if(loadAvg15)
+ *loadAvg15 = loadAvg15Value;
return true;
}