diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2008-09-20 11:59:36 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2008-09-20 11:59:36 +0200 |
commit | 89551ddfc2879530981eba3db9ab857b88409ad8 (patch) | |
tree | b0fa2c3d84201a3bce8d46c002a2e506a95f1c24 /src/Net/Packets/HostStatusPacket.cpp | |
parent | 5286ffcb30e3005569199c45bca38dfbf346cec3 (diff) | |
download | mad-89551ddfc2879530981eba3db9ab857b88409ad8.tar mad-89551ddfc2879530981eba3db9ab857b88409ad8.zip |
Lese /proc/loadavg f?r weitere Statusinformationen aus
Diffstat (limited to 'src/Net/Packets/HostStatusPacket.cpp')
-rw-r--r-- | src/Net/Packets/HostStatusPacket.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/Net/Packets/HostStatusPacket.cpp b/src/Net/Packets/HostStatusPacket.cpp index 3e50cd6..f998c2c 100644 --- a/src/Net/Packets/HostStatusPacket.cpp +++ b/src/Net/Packets/HostStatusPacket.cpp @@ -19,16 +19,24 @@ #include "HostStatusPacket.h" +#include <cstdio> +#include <cstring> +#include <string> + namespace Mad { namespace Net { namespace Packets { HostStatusPacket::HostStatusPacket(Type type, uint16_t requestId, uint32_t uptime, uint32_t idleTime, - uint32_t totalMem, uint32_t freeMem, uint32_t totalSwap, uint32_t freeSwap) -: Packet(type, requestId) + uint32_t totalMem, uint32_t freeMem, uint32_t totalSwap, uint32_t freeSwap, + uint32_t currentLoad, uint32_t nProcesses, float loadAvg1val, float loadAvg5val, float loadAvg15val) +: Packet(type, requestId), loadAvg1(loadAvg1val), loadAvg5(loadAvg5val), loadAvg15(loadAvg15val) { - setLength(sizeof(CoreStatusData)); + char buf[20]; + std::snprintf(buf, sizeof(buf), "%.2f %.2f %.2f", loadAvg1, loadAvg5, loadAvg15); + + setLength(sizeof(CoreStatusData) + strlen(buf)); coreStatusData = (CoreStatusData*)&rawData->data; coreStatusData->uptime = htonl(uptime); @@ -38,17 +46,30 @@ HostStatusPacket::HostStatusPacket(Type type, uint16_t requestId, uint32_t uptim coreStatusData->freeMem = htonl(freeMem); coreStatusData->totalSwap = htonl(totalSwap); coreStatusData->freeSwap = htonl(freeSwap); + + coreStatusData->currentLoad = htonl(currentLoad); + coreStatusData->nProcesses = htonl(nProcesses); + + std::memcpy(coreStatusData->charData, buf, strlen(buf)); } HostStatusPacket& HostStatusPacket::operator=(const Packet &p) { Packet::operator=(p); - - setLength(sizeof(CoreStatusData)); + if(getLength() < sizeof(CoreStatusData)) + setLength(sizeof(CoreStatusData)); coreStatusData = (CoreStatusData*)&rawData->data; + parsePacket(); + return *this; } +void HostStatusPacket::parsePacket() { + coreStatusData = (CoreStatusData*)&rawData->data; + + std::sscanf(std::string((char*)coreStatusData->charData, getLength()-sizeof(coreStatusData)).c_str(), "%f %f %f", &loadAvg1, &loadAvg5, &loadAvg15); +} + } } } |