summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestHandlers/StatusRequestHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/RequestHandlers/StatusRequestHandler.cpp')
-rw-r--r--src/Common/RequestHandlers/StatusRequestHandler.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/Common/RequestHandlers/StatusRequestHandler.cpp b/src/Common/RequestHandlers/StatusRequestHandler.cpp
index dbdf9e1..8494fee 100644
--- a/src/Common/RequestHandlers/StatusRequestHandler.cpp
+++ b/src/Common/RequestHandlers/StatusRequestHandler.cpp
@@ -28,10 +28,10 @@ namespace Mad {
namespace Common {
namespace RequestHandlers {
-void StatusRequestHandler::handlePacket(Net::Connection *connection, const Net::Packet &packet) {
+void StatusRequestHandler::handlePacket(Net::Connection *con, const Net::Packet &packet) {
if(packet.getType() != Net::Packet::STATUS) {
Logger::log(Logger::ERROR, "Received an unexpected packet.");
- connection->send(Net::Packets::ErrorPacket(Net::Packet::ERROR, packet.getRequestId(), Exception(Exception::UNEXPECTED_PACKET)));
+ con->send(Net::Packets::ErrorPacket(Net::Packet::ERROR, packet.getRequestId(), Exception(Exception::UNEXPECTED_PACKET)));
signalFinished().emit();
return;
@@ -39,12 +39,27 @@ void StatusRequestHandler::handlePacket(Net::Connection *connection, const Net::
// TODO Require authentication
- SystemBackend::UptimeInfo uptimeInfo = SystemBackend::getUptimeInfo();
- SystemBackend::MemoryInfo memInfo = SystemBackend::getMemoryInfo();
- SystemBackend::LoadInfo loadInfo = SystemBackend::getLoadInfo();
+ connection = con;
+ requestId = packet.getRequestId();
- connection->send(Net::Packets::HostStatusPacket(Net::Packet::OK, packet.getRequestId(), uptimeInfo.uptime, uptimeInfo.idleTime,
- memInfo.totalMem, memInfo.freeMem, memInfo.totalSwap, memInfo.freeSwap, loadInfo.currentLoad, loadInfo.nProcesses, loadInfo.loadAvg1, loadInfo.loadAvg5, loadInfo.loadAvg15));
+ if(!SystemBackend::getUptimeInfo(sigc::mem_fun(this, &StatusRequestHandler::uptimeHandler)))
+ needUptime = false;
+ if(!SystemBackend::getMemoryInfo(sigc::mem_fun(this, &StatusRequestHandler::memoryHandler)))
+ needMemory = false;
+ if(!SystemBackend::getLoadInfo(sigc::mem_fun(this, &StatusRequestHandler::loadHandler)))
+ needLoad = false;
+
+ send();
+}
+
+void StatusRequestHandler::send() {
+ if(needUptime || needMemory || needLoad || sent)
+ return;
+
+ connection->send(Net::Packets::HostStatusPacket(Net::Packet::OK, requestId, uptime, idleTime,
+ totalMem, freeMem, totalSwap, freeSwap, currentLoad, nProcesses, loadAvg1, loadAvg5, loadAvg15));
+
+ sent = true;
signalFinished().emit();
}