The dispatch selecting the thresholds only probed the critical level, so a
configuration defining careful and/or warning without critical was silently
discarded and the system thresholds were used instead. This affected both the
per sensor (#2058) and the per type (#3049) forms.
AMD k10temp reports no high/critical for Tctl on many boards, so the fallback
returned DEFAULT and the temperature was never highlighted, whatever the user
configured.
Check every criticality level instead, so the documented precedence (specific
sensor, then sensor type, then system) applies as soon as one threshold is set.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The outer loop over network interfaces had no break, so ip_address was
overwritten by every subsequent up/non-loopback interface with a
matching address family. On hosts with Docker, this meant the bridge
IP (e.g. 172.18.0.1) was returned instead of the actual LAN address,
because virtual interfaces can sort after the real one in dict order.
Add a break once a match is found so the function returns the first
qualifying interface, plus regression tests covering the Docker case,
loopback/down-interface skipping, and the no-match case.
Fixes#3617
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015NJfi2d6yvmmDzvPmm4eof
Replace the long chain of per-column if blocks with a table-driven
approach: _header_columns returns the ordered column spec and
_msg_curse_header iterates it. The Irix-mode CPU label logic moves to
a dedicated _cpu_header_msg helper.
Cyclomatic complexity: 27 (D) -> 7 (B) per radon, with helpers at A.
No behaviour change: output verified identical to the previous
implementation across 840 combinations of sort key, Irix mode, core
count, standalone/cursor flags and disabled stats.
Related to #3460
On Jetson (Tegra) the integrated GPU is enumerated by NVML
(nvidia-l4t-nvml) and reports its name (e.g. "Orin (nvgpu)"), but the
per-metric NVML queries return NVML_ERROR_NOT_SUPPORTED, so the GPU
plugin only ever showed N/A for proc/mem/temperature.
Add a Tegra sysfs backend (glances/plugins/gpu/cards/tegra.py) and wire
it into the NVIDIA card as a per-metric fallback: when NVML returns None
for a device detected as Tegra (name contains "nvgpu", or the Tegra GPU
sysfs node exists), read:
- proc: /sys/devices/platform/gpu.0/load (per-mille -> percent)
- temperature: the gpu-thermal /sys/class/thermal zone (milli-C -> C)
Memory stays N/A by design: the Tegra GPU shares system RAM, already
reported by the MEM plugin. Scales verified against tegrastats
(GR3D_FREQ and gpu@).
Adds unit tests with committed sysfs fixtures, a NEWS.rst entry and a
docs note.
Verified on JetPack 6.2.1 (L4T R36.4.7) and JetPack 7.2 (L4T R39.2):
identical sysfs node layout and gpu-thermal zone selection on both, with
temperature cross-checked against tegrastats on each.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>