phase: 09_disks_smartctl
**Phase 09 — final verification pass (all 4 task files already in `complete/`; nothing re-implemented)**
- Verified `GET /api/disks/snapshot` live: 3 hosts / 18 whole-`/sys/block` rows, `smartctl_available` three-way, per-row `severity`, API-summed `fleet`; 404 `{"configured": false}` proven *without dialling* (spies on `httpx.AsyncClient.get` + `collectors.fetch_snapshot`).
- Verified `/api/disks/history` live (`disk.temp_c@dev`, unknown names → empty series) + `test_store.py`'s 300 s rollup/prune buckets; `/api/metrics?source=disks` answers the `disks` family.
- Browser against live data: 18 drive cards (never a partition/mount), collapsed per-host `Charts` with `aria-label`, 3 `.stale` grids + one `.banner.info` why-line and **0 `.fail` classes / green `disks` dot** → criteria 3 and 4 hold; new shots `data/logs/09-verify-disks-live-dimmed.png`, `09-verify-overview-live.png` (13 total for the phase).
- Real-hardware criterion: read 4 driveripper drives through `ops`' `sudo -n smartctl -i -A -H` and ran the live output through `host_agent.parse_smart_output` → `sources/disks.parse_disks_snapshot`: `sda` 35 °C / 30 423 h, `nvme1n1` 58 % wear, `nvme5n1` 13 uncorrectable → `alarm_disks: 1`, temps graded `warn`; consistent with the 16 committed fixtures.
- `bash .agents/validate.sh` → **EXIT=0**; `uv run pytest --cov` → **769 passed, 11 skipped, coverage 98.33%** (floor 94); `ruff check src tests agent` clean; `pyright` 0 errors; `node --check` clean; hygiene + dependency advisories clean. `uv run pytest -m live --live` → 10 passed, 1 skipped (agents still predate the SMART pass). Dev server healthy: `/api/health` `ok`, 9/9 sources.
- Docs fixed: AGENTS.md test count 698→769 and coverage 98.2→98.33 %; `disks` added to the event dashboard-name list and to the "every feed renders `Dash.eventText`" sentence; README `POLL_MS_*` row now states `/disks`' deliberate fixed 30 s; new Known gap 4 records the dev-DB `database is locked` writes (reported/recovered per invariant 4, ~590 MB DB / ~70 MB WAL, not reproduced by a controlled 25 s external read txn).
- Deviations: **no live-infra change** — granting the agent user the `disk` group and redeploying `host_agent.py` on driveripper/deskwork stay the documented paired operator action (redeploying without the grant yields 16 permission-denied lines; a sudo-spawning agent would break the confirmed "direct read, no sudo" assumption). Store-lock issue left to its own phase rather than patched speculatively.
- Next pending phase: `10_dev_direct_dial`.
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
# Verbatim smartctl -i -A -H /dev/sdh from driveripper, recorded by
|
||||
# ./scripts/capture-fixtures.sh — Serial/WWN/EUI-64 values are SCRUBBED,
|
||||
# every other byte is what the drive answered. Volatile rows (the
|
||||
# Temperature raws, Local Time) move; the parse tests read shape.
|
||||
smartctl 7.5 2025-04-30 r5714 [x86_64-linux-7.2.11-100.fc43.x86_64] (local build)
|
||||
Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org
|
||||
|
||||
=== START OF INFORMATION SECTION ===
|
||||
Model Family: Seagate BarraCuda Pro
|
||||
Device Model: ST10000DM0004-1ZC101
|
||||
Serial Number: SCRUBBEDSERIAL
|
||||
LU WWN Device Id: SCRUBBEDWWN
|
||||
Firmware Version: DN01
|
||||
User Capacity: 10,000,831,348,736 bytes [10.0 TB]
|
||||
Sector Sizes: 512 bytes logical, 4096 bytes physical
|
||||
Rotation Rate: 7200 rpm
|
||||
Form Factor: 3.5 inches
|
||||
Device is: In smartctl database 7.5/6204
|
||||
ATA Version is: ACS-3 T13/2161-D revision 5
|
||||
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
|
||||
Local Time is: Sat Oct 17 23:55:54 2026 EDT
|
||||
SMART support is: Available - device has SMART capability.
|
||||
SMART support is: Enabled
|
||||
|
||||
=== START OF READ SMART DATA SECTION ===
|
||||
SMART overall-health self-assessment test result: PASSED
|
||||
See vendor-specific Attribute list for marginal Attributes.
|
||||
|
||||
SMART Attributes Data Structure revision number: 10
|
||||
Vendor Specific SMART Attributes with Thresholds:
|
||||
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
|
||||
1 Raw_Read_Error_Rate 0x000f 078 064 044 Pre-fail Always - 65117974
|
||||
3 Spin_Up_Time 0x0003 089 089 000 Pre-fail Always - 0
|
||||
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 246
|
||||
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
|
||||
7 Seek_Error_Rate 0x000f 093 060 045 Pre-fail Always - 1869403165
|
||||
9 Power_On_Hours 0x0032 050 050 000 Old_age Always - 43894h+52m+24.646s
|
||||
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
|
||||
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 246
|
||||
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
|
||||
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
|
||||
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 1 1 2
|
||||
189 High_Fly_Writes 0x003a 001 001 000 Old_age Always - 270
|
||||
190 Airflow_Temperature_Cel 0x0022 067 040 040 Old_age Always In_the_past 33 (Min/Max 31/41)
|
||||
191 G-Sense_Error_Rate 0x0032 095 095 000 Old_age Always - 11928
|
||||
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 81
|
||||
193 Load_Cycle_Count 0x0032 035 035 000 Old_age Always - 131758
|
||||
194 Temperature_Celsius 0x0022 033 060 000 Old_age Always - 33 (0 13 0 0 0)
|
||||
195 Hardware_ECC_Recovered 0x001a 006 001 000 Old_age Always - 65117974
|
||||
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
|
||||
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
|
||||
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
|
||||
200 Pressure_Limit 0x0023 100 100 001 Pre-fail Always - 0
|
||||
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 6541h+31m+23.388s
|
||||
241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 222471819122
|
||||
242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 628009900310
|
||||
|
||||
Reference in New Issue
Block a user