Add all core temperatures

This commit is contained in:
2025-12-29 16:59:57 +00:00
parent 0f4cb0eaaf
commit cdee678a02
5 changed files with 48 additions and 13 deletions
+24 -8
View File
@@ -101,10 +101,10 @@ namespace metrics
return out; return out;
} }
std::vector<float> Collector::readCpuCoreTemps() std::vector<CpuTemperature> Collector::readCpuCoreTemps()
{ {
std::vector<float> physTemps; std::vector<CpuTemperature> physical;
std::vector<float> logicTemps(logicalToPhysical.size()); std::vector<CpuTemperature> logical(logicalToPhysical.size());
for (const auto &hwmon : std::filesystem::directory_iterator("/sys/class/hwmon")) for (const auto &hwmon : std::filesystem::directory_iterator("/sys/class/hwmon"))
{ {
@@ -121,25 +121,41 @@ namespace metrics
for (const auto &f : std::filesystem::directory_iterator(hwmon)) for (const auto &f : std::filesystem::directory_iterator(hwmon))
{ {
std::string fname = f.path().filename(); std::string fname = f.path().filename();
CpuTemperature temperature;
if (fname.find("temp") == 0 && fname.find("_input") != std::string::npos) if (fname.find("temp") == 0 && fname.find("_input") != std::string::npos)
{ {
int millideg = 0; int millideg = 0;
std::ifstream tempFile(f.path()); std::ifstream tempFile(f.path());
tempFile >> millideg; tempFile >> millideg;
physTemps.push_back(millideg / 1000.0f); // °C temperature.current = millideg / 1000.0f; // °C
} }
if (fname.find("temp") == 0 && fname.find("_max") != std::string::npos)
{
int millideg = 0;
std::ifstream tempFile(f.path());
tempFile >> millideg;
temperature.max = millideg / 1000.0f; // °C
}
if (fname.find("temp") == 0 && fname.find("_crit") != std::string::npos)
{
int millideg = 0;
std::ifstream tempFile(f.path());
tempFile >> millideg;
temperature.critical = millideg / 1000.0f; // °C
}
physical.push_back(temperature);
} }
for (size_t i = 0; i < logicalToPhysical.size(); ++i) for (size_t i = 0; i < logicalToPhysical.size(); ++i)
{ {
int phys = logicalToPhysical[i]; int phys = logicalToPhysical[i];
if (phys >= static_cast<int>(physTemps.size())) if (phys >= static_cast<int>(physical.size()))
phys = physTemps.size() - 1; // safety phys = physical.size() - 1; // safety
logicTemps[i] = physTemps[phys]; logical[i] = physical[phys];
} }
} }
return logicTemps; return logical;
} }
float Collector::cpuLoad(const Collector::CpuTimes &prev, float Collector::cpuLoad(const Collector::CpuTimes &prev,
+2 -1
View File
@@ -2,6 +2,7 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include "metrics/Host.h" #include "metrics/Host.h"
#include "metrics/CpuTemperature.h"
namespace metrics namespace metrics
{ {
@@ -27,7 +28,7 @@ namespace metrics
std::pair<CpuTimes, std::vector<CpuTimes>> readCpuTimes(); std::pair<CpuTimes, std::vector<CpuTimes>> readCpuTimes();
const std::vector<std::vector<std::string>> disks; const std::vector<std::vector<std::string>> disks;
float cpuLoad(const CpuTimes &prev, const CpuTimes &cur); float cpuLoad(const CpuTimes &prev, const CpuTimes &cur);
std::vector<float> readCpuCoreTemps(); std::vector<CpuTemperature> readCpuCoreTemps();
Memory readMemory(); Memory readMemory();
Disk readDisk(const std::vector<std::string> &disk = {"R", "/"}); Disk readDisk(const std::vector<std::string> &disk = {"R", "/"});
void readLoad(float &l1, float &l5, float &l15); void readLoad(float &l1, float &l5, float &l15);
+3 -1
View File
@@ -1,12 +1,14 @@
#pragma once #pragma once
#include <vector> #include <vector>
#include "metrics/CpuTemperature.h"
namespace metrics namespace metrics
{ {
struct Cpu struct Cpu
{ {
float totalLoad; float totalLoad;
std::vector<float> coreLoads; // длина = num_cores std::vector<float> coreLoads; // длина = num_cores
std::vector<float> coreTemps; std::vector<CpuTemperature> coreTemps;
}; };
} // namespace metrics } // namespace metrics
+12
View File
@@ -0,0 +1,12 @@
#pragma once
#include <vector>
namespace metrics
{
struct CpuTemperature
{
float current;
float max;
float critical;
};
} // namespace metrics
+7 -3
View File
@@ -39,8 +39,12 @@ namespace metrics
buf.writeUint8(static_cast<uint8_t>(cpu.coreLoads.size())); buf.writeUint8(static_cast<uint8_t>(cpu.coreLoads.size()));
for (float f : cpu.coreLoads) for (float f : cpu.coreLoads)
buf.writeFloat(f); buf.writeFloat(f);
for (float f : cpu.coreTemps) for (const auto &f : cpu.coreTemps)
buf.writeFloat(f); {
buf.writeFloat(f.current);
buf.writeFloat(f.max);
buf.writeFloat(f.critical);
}
// Memory // Memory
buf.writeUint64(memory.memory.used); buf.writeUint64(memory.memory.used);
@@ -86,7 +90,7 @@ namespace metrics
h.cpu.coreTemps.clear(); h.cpu.coreTemps.clear();
h.cpu.coreTemps.reserve(numCpu); h.cpu.coreTemps.reserve(numCpu);
for (uint8_t i = 0; i < numCpu; ++i) for (uint8_t i = 0; i < numCpu; ++i)
h.cpu.coreTemps.push_back(buf.readFloat()); h.cpu.coreTemps.push_back({buf.readFloat(), buf.readFloat(), buf.readFloat()});
// Memory // Memory
h.memory.memory.used = buf.readUint64(); h.memory.memory.used = buf.readUint64();