fwt_software/include/fgc/HostMetrics.h

50 lines
1.5 KiB
C++

#pragma once
#include <string>
namespace fgc::hostmetrics {
// Host (LattePanda / Linux) health reads for the `test host` subsystem. Pure
// parsers are split from the live readers so they unit-test without a real /sys
// or /proc. All readers degrade gracefully (ok=false) rather than throw.
struct ThermalInfo {
bool ok = false;
double max_temp_c = 0.0; // hottest thermal zone
std::string hottest_zone; // e.g. "x86_pkg_temp"
bool throttled = false; // best-effort (false if unknown)
};
struct DiskInfo {
bool ok = false;
std::string path;
double total_gb = 0.0;
double free_gb = 0.0;
double used_pct = 0.0;
};
struct MemInfo {
bool ok = false;
double total_mb = 0.0;
double avail_mb = 0.0;
double swap_used_mb = 0.0;
};
struct LoadInfo {
bool ok = false;
double load1 = 0.0, load5 = 0.0, load15 = 0.0;
int cpus = 0;
};
// ---- live readers ----
ThermalInfo readThermal(); // scans /sys/class/thermal
DiskInfo readDisk(const std::string& path); // statvfs() on the filesystem holding `path`
MemInfo readMeminfo(); // /proc/meminfo
LoadInfo readLoad(); // getloadavg() + nproc
// ---- pure parsers (reused by the readers; exposed for tests) ----
MemInfo parseMeminfo(const std::string& proc_meminfo);
double parseMilliCelsius(const std::string& zone_temp_contents); // "52000\n" -> 52.0
} // namespace fgc::hostmetrics