(ui) Add dashboard-linked run and snapshot lists
Add staff-only list pages for backup runs and snapshots with practical filters, then wire the dashboard summary cards and latest-runs panel to those overviews. This gives the dashboard real drill-down paths for run and snapshot counts instead of leaving the data only partially visible on the first screen. Refs #23
This commit is contained in:
@@ -145,6 +145,64 @@ def logs(request):
|
||||
return render(request, "pobsync_backend/logs.html", context)
|
||||
|
||||
|
||||
@staff_member_required
|
||||
def runs_list(request):
|
||||
status = request.GET.get("status", "").strip()
|
||||
run_type = request.GET.get("type", "").strip()
|
||||
host = request.GET.get("host", "").strip()
|
||||
review = request.GET.get("review", "").strip()
|
||||
runs = BackupRun.objects.select_related("host", "snapshot").order_by("-created_at", "-id")
|
||||
if status:
|
||||
runs = runs.filter(status=status)
|
||||
if run_type:
|
||||
runs = runs.filter(run_type=run_type)
|
||||
if host:
|
||||
runs = runs.filter(host__host=host)
|
||||
if review == "needed":
|
||||
runs = runs.filter(status__in=[BackupRun.Status.FAILED, BackupRun.Status.WARNING], reviewed_at__isnull=True)
|
||||
elif review == "reviewed":
|
||||
runs = runs.filter(reviewed_at__isnull=False)
|
||||
|
||||
context = {
|
||||
"runs": runs[:200],
|
||||
"total_count": runs.count(),
|
||||
"hosts": HostConfig.objects.order_by("host"),
|
||||
"statuses": BackupRun.Status.choices,
|
||||
"run_types": BackupRun.RunType.choices,
|
||||
"selected_status": status,
|
||||
"selected_type": run_type,
|
||||
"selected_host": host,
|
||||
"selected_review": review,
|
||||
}
|
||||
return render(request, "pobsync_backend/runs_list.html", context)
|
||||
|
||||
|
||||
@staff_member_required
|
||||
def snapshots_list(request):
|
||||
kind = request.GET.get("kind", "").strip()
|
||||
status = request.GET.get("status", "").strip()
|
||||
host = request.GET.get("host", "").strip()
|
||||
snapshots = SnapshotRecord.objects.select_related("host", "base").order_by("-started_at", "-discovered_at", "-id")
|
||||
if kind:
|
||||
snapshots = snapshots.filter(kind=kind)
|
||||
if status:
|
||||
snapshots = snapshots.filter(status=status)
|
||||
if host:
|
||||
snapshots = snapshots.filter(host__host=host)
|
||||
|
||||
context = {
|
||||
"snapshots": snapshots[:200],
|
||||
"total_count": snapshots.count(),
|
||||
"hosts": HostConfig.objects.order_by("host"),
|
||||
"kinds": SnapshotRecord.Kind.choices,
|
||||
"statuses": SnapshotRecord.objects.exclude(status="").order_by("status").values_list("status", flat=True).distinct(),
|
||||
"selected_kind": kind,
|
||||
"selected_status": status,
|
||||
"selected_host": host,
|
||||
}
|
||||
return render(request, "pobsync_backend/snapshots_list.html", context)
|
||||
|
||||
|
||||
@staff_member_required
|
||||
def purged_snapshots(request):
|
||||
host = request.GET.get("host", "").strip()
|
||||
|
||||
Reference in New Issue
Block a user