diff options
Diffstat (limited to 'src/Common/RequestHandlers/StatusRequestHandler.cpp')
-rw-r--r-- | src/Common/RequestHandlers/StatusRequestHandler.cpp | 29 |
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(); } |