HealthProbe
Reads the temperatures and the health of the hardware into a `NodeHealth` (monitor-facts-column §MFD-7c).
In the namespace inventory. Declared in src/libs/libinventory/inventory/HealthProbe.hpp.
Detailed description
It runs on the inventory's sampler thread, the thread that owns every `/proc` and `/sys` read (monitor-async-sampling §MSA-C-5), and only while a health client is attached to the service. It is the only reader of a temperature sensor: the sampler hands it the health fields of its one `nvidia-smi` query instead of reading the GPU twice.
Each source has a minimum interval, so a run every 2 s reads only what is due and keeps the last reading of the rest: an NVMe temperature read is a command to the drive (L5), a DIMM temperature read is an SMBus transaction of about 1 ms, and UDisks refreshes SMART every 10 minutes (L8).
The owner of a reading is normalized for the readers of `NodeHealth`: a drive sensor is owned by its drive (`DriveInfo::device`, "nvme0n1"), a GPU sensor by its GPU (`GpuInfo::name`).