imaging dashboard: add Clear all button + endpoint
New /imaging/delete_all endpoint wipes every per-bay JSON in IMAGING_DIR via imaging_status.delete_all_sessions(). Template adds "Clear all" outline-danger button next to the count badge, gated on sessions list non-empty, with confirm() prompt naming the count. Deployed via scp + systemctl restart pxe-webapp on 172.16.9.1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -496,6 +496,14 @@ def imaging_delete_session(serial):
|
||||
return redirect(url_for("imaging_dashboard"))
|
||||
|
||||
|
||||
@app.route("/imaging/delete_all", methods=["POST"])
|
||||
def imaging_delete_all():
|
||||
n = imaging_status.delete_all_sessions()
|
||||
audit("IMAGING_DELETE_ALL", str(n))
|
||||
flash(f"Cleared {n} imaging session(s).", "success")
|
||||
return redirect(url_for("imaging_dashboard"))
|
||||
|
||||
|
||||
@app.route("/imaging/<serial>/laps", methods=["POST"])
|
||||
def imaging_set_laps(serial):
|
||||
"""Save (or clear with empty value) the LAPS password for a bay so it
|
||||
|
||||
@@ -169,3 +169,18 @@ def delete_session(serial: str) -> bool:
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
def delete_all_sessions() -> int:
|
||||
"""Wipe every per-bay JSON in IMAGING_DIR. Returns count removed."""
|
||||
_ensure_dir()
|
||||
removed = 0
|
||||
for fn in os.listdir(config.IMAGING_DIR):
|
||||
if not fn.endswith(".json"):
|
||||
continue
|
||||
try:
|
||||
os.unlink(os.path.join(config.IMAGING_DIR, fn))
|
||||
removed += 1
|
||||
except OSError:
|
||||
pass
|
||||
return removed
|
||||
|
||||
@@ -23,7 +23,16 @@ window.addEventListener('DOMContentLoaded', scheduleImagingReload);
|
||||
<h2 class="mb-0">Imaging Progress</h2>
|
||||
<small class="text-muted">Auto-refresh 15s. POST updates from imaging clients arrive at <code>/imaging/status</code>.</small>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="badge bg-secondary fs-6"><span id="visible-count">{{ sessions|length }}</span>/{{ sessions|length }}</span>
|
||||
{% if sessions %}
|
||||
<form method="post" action="{{ url_for('imaging_delete_all') }}"
|
||||
onsubmit="return confirm('Clear all {{ sessions|length }} imaging session(s)? This wipes every tile from the dashboard. Live re-images will repopulate on next status push.');"
|
||||
style="display:inline;">
|
||||
<button type="submit" class="btn btn-sm btn-outline-danger">Clear all</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
|
||||
Reference in New Issue
Block a user