diff --git a/src/metrics/Collector.cpp b/src/metrics/Collector.cpp index 22ed9af..0aeea4d 100644 --- a/src/metrics/Collector.cpp +++ b/src/metrics/Collector.cpp @@ -101,10 +101,10 @@ namespace metrics return out; } - std::vector Collector::readCpuCoreTemps() + std::vector Collector::readCpuCoreTemps() { - std::vector physTemps; - std::vector logicTemps(logicalToPhysical.size()); + std::vector physical; + std::vector logical(logicalToPhysical.size()); 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)) { std::string fname = f.path().filename(); + CpuTemperature temperature; if (fname.find("temp") == 0 && fname.find("_input") != std::string::npos) { int millideg = 0; std::ifstream tempFile(f.path()); 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) { int phys = logicalToPhysical[i]; - if (phys >= static_cast(physTemps.size())) - phys = physTemps.size() - 1; // safety - logicTemps[i] = physTemps[phys]; + if (phys >= static_cast(physical.size())) + phys = physical.size() - 1; // safety + logical[i] = physical[phys]; } } - return logicTemps; + return logical; } float Collector::cpuLoad(const Collector::CpuTimes &prev, diff --git a/src/metrics/Collector.h b/src/metrics/Collector.h index f16404a..63caa1a 100644 --- a/src/metrics/Collector.h +++ b/src/metrics/Collector.h @@ -2,6 +2,7 @@ #include #include #include "metrics/Host.h" +#include "metrics/CpuTemperature.h" namespace metrics { @@ -27,7 +28,7 @@ namespace metrics std::pair> readCpuTimes(); const std::vector> disks; float cpuLoad(const CpuTimes &prev, const CpuTimes &cur); - std::vector readCpuCoreTemps(); + std::vector readCpuCoreTemps(); Memory readMemory(); Disk readDisk(const std::vector &disk = {"R", "/"}); void readLoad(float &l1, float &l5, float &l15); diff --git a/src/metrics/Cpu.h b/src/metrics/Cpu.h index 93e59b6..376c830 100644 --- a/src/metrics/Cpu.h +++ b/src/metrics/Cpu.h @@ -1,12 +1,14 @@ #pragma once #include +#include "metrics/CpuTemperature.h" + namespace metrics { struct Cpu { float totalLoad; std::vector coreLoads; // длина = num_cores - std::vector coreTemps; + std::vector coreTemps; }; } // namespace metrics \ No newline at end of file diff --git a/src/metrics/CpuTemperature.h b/src/metrics/CpuTemperature.h new file mode 100644 index 0000000..91fba0f --- /dev/null +++ b/src/metrics/CpuTemperature.h @@ -0,0 +1,12 @@ +#pragma once +#include + +namespace metrics +{ + struct CpuTemperature + { + float current; + float max; + float critical; + }; +} // namespace metrics \ No newline at end of file diff --git a/src/metrics/Host.cpp b/src/metrics/Host.cpp index fad836f..ed8ca46 100644 --- a/src/metrics/Host.cpp +++ b/src/metrics/Host.cpp @@ -39,8 +39,12 @@ namespace metrics buf.writeUint8(static_cast(cpu.coreLoads.size())); for (float f : cpu.coreLoads) buf.writeFloat(f); - for (float f : cpu.coreTemps) - buf.writeFloat(f); + for (const auto &f : cpu.coreTemps) + { + buf.writeFloat(f.current); + buf.writeFloat(f.max); + buf.writeFloat(f.critical); + } // Memory buf.writeUint64(memory.memory.used); @@ -86,7 +90,7 @@ namespace metrics h.cpu.coreTemps.clear(); h.cpu.coreTemps.reserve(numCpu); 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 h.memory.memory.used = buf.readUint64();