50 lines
1.5 KiB
C++
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
|