summaryrefslogtreecommitdiffstats
path: root/src/Net/Packets/HostStatusPacket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/Packets/HostStatusPacket.cpp')
-rw-r--r--src/Net/Packets/HostStatusPacket.cpp31
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);
+}
+
}
}
}