39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""Watchdog blueprint: /watchdog page + /watchdog/run trigger (CSRF-guarded)."""
|
|
|
|
import logging
|
|
|
|
from flask import Blueprint, flash, redirect, render_template, request, url_for
|
|
|
|
from extensions import get_db, get_watchdog_db
|
|
from repositories import project_repo
|
|
from security import validate_csrf
|
|
from services import watchdog as watchdog_service
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
bp = Blueprint("watchdog", __name__)
|
|
|
|
|
|
@bp.route("/watchdog")
|
|
def page_watchdog():
|
|
days = watchdog_service.parse_days(request.args.get("days"), default=7)
|
|
reports = watchdog_service.load_watchdog_reports(get_watchdog_db(), days=days)
|
|
starred = project_repo.get_starred_names(get_db())
|
|
return render_template(
|
|
"watchdog.html", reports=reports, days=days, starred=starred
|
|
)
|
|
|
|
|
|
@bp.route("/watchdog/run", methods=["POST"])
|
|
def watchdog_run():
|
|
validate_csrf()
|
|
|
|
ok, status, message = watchdog_service.trigger_watchdog_run()
|
|
if ok:
|
|
flash(message, "success")
|
|
elif status in ("cooldown",):
|
|
flash(message, "warning")
|
|
else:
|
|
flash(message, "danger")
|
|
return redirect(url_for("watchdog.page_watchdog"))
|