Fix memory collector

This commit is contained in:
2025-12-30 16:19:39 +00:00
parent d483a74582
commit 0551660222
+27 -7
View File
@@ -10,6 +10,8 @@
#include <cstring>
#include <algorithm>
#include <iostream>
namespace metrics
{
@@ -203,14 +205,27 @@ namespace metrics
Memory Collector::readMemory()
{
std::ifstream f("/proc/meminfo");
std::string key;
uint64_t value;
std::string unit;
if (!f)
return {};
uint64_t mem_total = 0, mem_available = 0, swap_total = 0, swap_available = 0, hugepages_total = 0, hugepages_available = 0, hugepages_size = 0;
uint64_t mem_total = 0;
uint64_t mem_available = 0;
uint64_t swap_total = 0;
uint64_t swap_available = 0;
uint64_t hugepages_total = 0;
uint64_t hugepages_available = 0;
uint64_t hugepages_size = 0;
while (f >> key >> value >> unit)
std::string line;
while (std::getline(f, line))
{
std::istringstream iss(line);
std::string key;
uint64_t value = 0;
std::string unit;
iss >> key >> value >> unit; // unit может отсутствовать
if (key == "MemTotal:")
mem_total = value * 1024;
else if (key == "MemAvailable:")
@@ -224,19 +239,24 @@ namespace metrics
else if (key == "HugePages_Free:")
hugepages_available = value;
else if (key == "Hugepagesize:")
hugepages_size = value;
hugepages_size = value * 1024; // kB → bytes
}
Memory memory;
memory.memory.total = mem_total;
memory.memory.available = mem_available;
memory.memory.used = mem_total - mem_available;
memory.swap.total = swap_total;
memory.swap.available = swap_available;
memory.swap.used = swap_total - swap_available;
memory.hugepages.total = hugepages_total * hugepages_size;
memory.hugepages.available = hugepages_available * hugepages_size;
memory.hugepages.used = hugepages_total - hugepages_available;
memory.hugepages.used =
memory.hugepages.total - memory.hugepages.available;
return memory;
}