diff --git a/app/database.py b/app/database.py index bfb2893..477b60a 100644 --- a/app/database.py +++ b/app/database.py @@ -87,6 +87,8 @@ _MIGRATIONS = [ "ALTER TABLE burnin_stages ADD COLUMN bad_blocks INTEGER DEFAULT 0", "ALTER TABLE drives ADD COLUMN smart_attrs TEXT", "ALTER TABLE smart_tests ADD COLUMN raw_output TEXT", + # Stage 8: track last reset time so dashboard burn-in col clears after reset + "ALTER TABLE drives ADD COLUMN last_reset_at TEXT", ] diff --git a/app/routes.py b/app/routes.py index 8d89f08..ddff766 100644 --- a/app/routes.py +++ b/app/routes.py @@ -118,11 +118,17 @@ _DRIVES_QUERY = """ async def _fetch_burnin_by_drive(db: aiosqlite.Connection) -> dict[int, dict]: - """Return latest burn-in job (any state) keyed by drive_id.""" + """Return latest burn-in job (any state) keyed by drive_id. + + Jobs created before the drive's last_reset_at are excluded so the + dashboard burn-in column clears after a reset while history is preserved. + """ cur = await db.execute(""" SELECT bj.* FROM burnin_jobs bj + JOIN drives d ON d.id = bj.drive_id WHERE bj.id IN (SELECT MAX(id) FROM burnin_jobs GROUP BY drive_id) + AND (d.last_reset_at IS NULL OR bj.created_at > d.last_reset_at) """) rows = await cur.fetchall() return {r["drive_id"]: dict(r) for r in rows} @@ -733,8 +739,12 @@ async def reset_drive( WHERE drive_id=?""", (drive_id,), ) - # Clear cached SMART attributes - await db.execute("UPDATE drives SET smart_attrs=NULL WHERE id=?", (drive_id,)) + # Clear SMART attrs cache + stamp reset time (hides prior burn-in from dashboard) + now = datetime.now(timezone.utc).isoformat() + await db.execute( + "UPDATE drives SET smart_attrs=NULL, last_reset_at=? WHERE id=?", + (now, drive_id), + ) # Audit event await db.execute(