41 lines
903 B
Python
41 lines
903 B
Python
from datetime import datetime, timezone
|
|
from typing import Optional
|
|
import json
|
|
from services.runner import run_cmd
|
|
|
|
|
|
def backup_badge(last_time: datetime) -> str:
|
|
age = datetime.now(timezone.utc) - last_time
|
|
hours = age.total_seconds() / 3600
|
|
|
|
if hours < 24:
|
|
return "🟢 Backup: OK"
|
|
if hours < 72:
|
|
return "🟡 Backup: stale"
|
|
return "🔴 Backup: OLD"
|
|
|
|
|
|
async def get_last_snapshot() -> Optional[dict]:
|
|
rc, raw = await run_cmd(
|
|
["restic", "snapshots", "--json"],
|
|
use_restic_env=True,
|
|
timeout=20
|
|
)
|
|
if rc != 0:
|
|
return None
|
|
|
|
snaps = json.loads(raw)
|
|
if not snaps:
|
|
return None
|
|
|
|
snaps.sort(key=lambda s: s["time"], reverse=True)
|
|
return snaps[0]
|
|
|
|
|
|
def restore_help() -> str:
|
|
return (
|
|
"🧯 Restore help\n\n"
|
|
"Example:\n"
|
|
"restic restore <snapshot_id> --target /restore"
|
|
)
|