mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-14 08:10:26 +00:00
b254d0f19d
Physical disks reported by a host agent carry no Proxmox scope, so tightening matchesPhysicalDiskNode to require an instance on both sides dropped every agent-reported disk off the Proxmox node it lives on. The Physical Disks node filter rendered no options at all, grouping lost the node, and metric target resolution could not find it. Match on node name when the disk side has no instance evidence, and keep rejecting a Proxmox-scoped disk against a node outside that instance, so cluster isolation still holds in the direction that motivated the change. Wearout had two competing readings of 0. The presentation layer treated it as no endurance remaining while the alert path treated it as absent and stayed silent, so a disk could read critical in the UI and never alert. Two sources also published 0 for a disk that reported nothing: PhysicalDiskView.Wearout returned the struct zero value on a nil view, as did the nil-view branch of physicalDiskFromReadStateView. Both now return the documented -1 sentinel. storagehealth.WearoutReported is the single authority for whether a reading is evidence at all: -1 is absent, 0 is real only from a device that reports endurance, and rotational disks never do. Risk assessment, alerting, and the frontend all gate on it rather than each reinventing the boundary. Verified: full frontend suite 1061 files / 19402 tests, eslint, theme and canonical-platform audits, tsc, go build ./..., and internal/alerts, internal/monitoring, internal/storagehealth, internal/unifiedresources.