Smallcase folders part 1

This commit is contained in:
2025-12-29 13:39:40 +00:00
parent ae48f96fe8
commit 8bef59f793
84 changed files with 40 additions and 35 deletions
+101
View File
@@ -0,0 +1,101 @@
#include "Metrics/Host.h"
#include <stdexcept>
#include <cstring>
#include <arpa/inet.h>
#include "Network/Common/Buffer.h"
namespace metrics
{
// ---- Вспомогательные функции для float <-> uint32_t ----
static uint32_t floatToNetwork(float f)
{
uint32_t tmp;
static_assert(sizeof(tmp) == sizeof(f), "Size mismatch");
std::memcpy(&tmp, &f, sizeof(f));
return htonl(tmp);
}
static float networkToFloat(uint32_t n)
{
uint32_t tmp = ntohl(n);
float f;
std::memcpy(&f, &tmp, sizeof(f));
return f;
}
// ---- Сериализация ----
std::vector<uint8_t> Host::serialize() const
{
network::Buffer buf;
buf.writeUint8(1); // version
buf.writeString(hostname);
// CPU
buf.writeFloat(cpu.totalLoad);
buf.writeUint8(static_cast<uint8_t>(cpu.coreLoads.size()));
for (float f : cpu.coreLoads)
buf.writeFloat(f);
// Memory
buf.writeFloat(memory.mem_used);
buf.writeFloat(memory.mem_total);
buf.writeFloat(memory.swap_used);
buf.writeFloat(memory.swap_total);
// Disks
buf.writeUint8(static_cast<uint8_t>(disks.size()));
for (const auto &d : disks)
{
buf.writeString(d.name);
buf.writeFloat(d.used);
buf.writeFloat(d.total);
}
return buf.data();
}
// ---- Десериализация ----
Host Host::deserialize(const std::vector<uint8_t> &data)
{
Host h;
network::Buffer buf(const_cast<std::vector<uint8_t> &>(data));
uint8_t version = buf.readUint8();
if (version != 1)
throw std::runtime_error("Unsupported protocol version");
h.hostname = buf.readString();
// CPU
h.cpu.totalLoad = buf.readFloat();
uint8_t numCpu = buf.readUint8();
h.cpu.coreLoads.clear();
h.cpu.coreLoads.reserve(numCpu);
for (uint8_t i = 0; i < numCpu; ++i)
h.cpu.coreLoads.push_back(buf.readFloat());
// Memory
h.memory.mem_used = buf.readFloat();
h.memory.mem_total = buf.readFloat();
h.memory.swap_used = buf.readFloat();
h.memory.swap_total = buf.readFloat();
// Disks
uint8_t numDisks = buf.readUint8();
h.disks.clear();
h.disks.reserve(numDisks);
for (uint8_t i = 0; i < numDisks; ++i)
{
std::string name = buf.readString();
float used = buf.readFloat();
float total = buf.readFloat();
h.disks.push_back({name, used, total});
}
return h;
}
} // namespace metrics