wrolpi/controller
lrnselfreliance dac849f9f6
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Controller Tests / controller-tests (push) Has been cancelled
Jest Tests / jest-tests (push) Has been cancelled
Surface coarse SMART health for USB-bridge drives (#498)
* Surface coarse SMART health for USB-bridge drives

USB enclosures that reject ATA pass-through (e.g. Seagate Expansion) are
invisible to pySMART/DeviceList, so the drive shows no SMART at all on the
Controller page. Fall back to smartctl over the SCSI transport, which many
such bridges still answer, to report a coarse PASS/FAIL health plus drive
identity (model/serial/capacity).

The health (-d scsi -H) and identity (-d scsi -i) reads are issued as
separate calls: combining them makes smartctl suppress the health line when
the identity read reports "SMART support is: Unavailable" (which these
bridges do). The entry is marked smart_limited (labelled "(limited)" in both
UIs) so a green PASS is not mistaken for full monitoring — these drives
expose no attributes or temperature, and some bridges report "OK" statically.

* Harden SCSI health fallback (Greptile review)

- _scsi_health: treat any unrecognised status (e.g. "UNKNOWN", "N/A") as
  unreadable (None) instead of a false FAIL. Only "OK" -> PASS and "FAIL*"
  -> FAIL; anything else omits the drive rather than showing a red FAIL that
  contradicts the smart_limited disclaimer.
- get_all_smart_status: isolate the SCSI supplement loop in its own
  try/except so an error there cannot discard the pySMART results already
  collected.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 09:05:06 -06:00
..
api Controller can unmount foreign mounts; protect the primary drive. 2026-06-11 19:46:30 -06:00
lib Surface coarse SMART health for USB-bridge drives (#498) 2026-06-26 09:05:06 -06:00
templates Surface coarse SMART health for USB-bridge drives (#498) 2026-06-26 09:05:06 -06:00
test Surface coarse SMART health for USB-bridge drives (#498) 2026-06-26 09:05:06 -06:00
__init__.py Creating Controller service which will control WROLPi services, admin, SMART, disks, and status. nginx will fallback to Controller UI when React UI is unavailable (such as during upgrades). 2025-12-15 15:48:40 -07:00
conftest.py Warn in the navbar when a hard drive runs hot (#470) 2026-06-11 19:46:33 -06:00
defaults.py Removing Controller link in favor of the button in services. 2026-04-09 15:03:28 -06:00
main.py Fetching processes from PROCFS_PATH in docker container. 2026-05-30 15:59:14 -06:00
requirements.txt Bump controller pydantic requirement to >=2.13.4 (dependabot #463). 2026-06-11 19:46:33 -06:00
serve.py Migrating Controller from port 8087 to 80 so that it is more discoverable. Reformatting Controller dashboard to make header at the top. Reformatting navigation bar to handle the new links which prevented Admin from being visible in some screens. 2026-04-09 15:01:05 -06:00