""" Fieldkit blueprint — killswitch, dead man's switch, status dashboard. """ from auth import admin_required, get_username, login_required from flask import Blueprint, flash, redirect, render_template, request, url_for from soosef.audit import log_action bp = Blueprint("fieldkit", __name__, url_prefix="/fieldkit") @bp.route("/") @login_required def status(): """Fieldkit status dashboard — all monitors and system health.""" from soosef.fieldkit.deadman import DeadmanSwitch deadman = DeadmanSwitch() return render_template( "fieldkit/status.html", deadman_status=deadman.status(), ) @bp.route("/killswitch", methods=["GET", "POST"]) @admin_required def killswitch(): """Killswitch arming and firing UI.""" if request.method == "POST": action = request.form.get("action") if action == "fire" and request.form.get("confirm") == "CONFIRM-PURGE": from soosef.fieldkit.killswitch import PurgeScope, execute_purge actor = get_username() result = execute_purge(PurgeScope.ALL, reason="web_ui") outcome = "success" if result.fully_purged else "failure" failed_steps = ", ".join(name for name, _ in result.steps_failed) log_action( actor=actor, action="killswitch.fire", target="all", outcome=outcome, source="web", detail=( f"steps_completed={len(result.steps_completed)} " f"steps_failed={len(result.steps_failed)}" + (f" failed={failed_steps}" if failed_steps else "") ), ) flash( f"Purge executed: {len(result.steps_completed)} steps completed, " f"{len(result.steps_failed)} failed", "warning" if result.steps_failed else "success", ) return redirect(url_for("fieldkit.status")) return render_template("fieldkit/killswitch.html") @bp.route("/deadman/checkin", methods=["POST"]) @login_required def deadman_checkin(): """Record a dead man's switch check-in.""" from soosef.fieldkit.deadman import DeadmanSwitch deadman = DeadmanSwitch() deadman.checkin() flash("Check-in recorded.", "success") return redirect(url_for("fieldkit.status"))