Initial commit: Pangolin Sentinel Docker & Unraid Hub
This commit is contained in:
1 parent
178b40ba37
commit
b4095b82ea
24 files changed
+4355
No files matched your search
@@ -0,0 +1,108 @@
|
||||
import asyncio
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
from backend.config import get_setting, load_settings
|
||||
from backend.backup import run_backup_task
|
||||
from backend.system import check_upgradable_packages
|
||||
from backend.notifier import send_notification
|
||||
|
||||
scheduler = AsyncIOScheduler()
|
||||
|
||||
async def scheduled_backup_job():
|
||||
print("[SCHEDULER] Triggering scheduled automated backup...")
|
||||
settings = load_settings()
|
||||
scope = settings.get("scheduled_backup_scope", "pangolin")
|
||||
|
||||
try:
|
||||
res = await run_backup_task(
|
||||
scope=scope,
|
||||
description="Automated scheduled backup",
|
||||
auto_created=True
|
||||
)
|
||||
if settings.get("notify_on_backup"):
|
||||
await send_notification(
|
||||
title=f"Automated Backup Started ({scope.upper()})",
|
||||
message=f"A scheduled backup job has been initiated.",
|
||||
status="info"
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"[SCHEDULER] Error during scheduled backup: {e}")
|
||||
if settings.get("notify_on_backup"):
|
||||
await send_notification(
|
||||
title="Automated Backup Failed",
|
||||
message=f"Scheduled backup failed to start: {str(e)}",
|
||||
status="error"
|
||||
)
|
||||
|
||||
async def scheduled_update_check_job():
|
||||
print("[SCHEDULER] Checking for available updates...")
|
||||
settings = load_settings()
|
||||
if not settings.get("scheduled_update_check_enabled", True):
|
||||
return
|
||||
|
||||
try:
|
||||
pkgs = await check_upgradable_packages()
|
||||
total = pkgs.get("total", 0)
|
||||
sec = pkgs.get("security_count", 0)
|
||||
|
||||
if total > 0 and settings.get("notify_on_update"):
|
||||
await send_notification(
|
||||
title=f"📦 VPS Updates Available ({total} packages)",
|
||||
message=f"There are {total} upgradable package(s) available, including {sec} security update(s).",
|
||||
status="warning" if sec > 0 else "info",
|
||||
details={
|
||||
"total_upgrades": total,
|
||||
"security_updates": sec
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"[SCHEDULER] Error during update check: {e}")
|
||||
|
||||
def reload_scheduler():
|
||||
settings = load_settings()
|
||||
|
||||
# Remove existing jobs if any
|
||||
for job_id in ["scheduled_backup", "scheduled_update_check"]:
|
||||
if scheduler.get_job(job_id):
|
||||
scheduler.remove_job(job_id)
|
||||
|
||||
# 1. Scheduled Backup
|
||||
if settings.get("scheduled_backup_enabled", True):
|
||||
cron_expr = settings.get("scheduled_backup_cron", "0 3 * * *")
|
||||
parts = cron_expr.strip().split()
|
||||
if len(parts) == 5:
|
||||
trigger = CronTrigger(
|
||||
minute=parts[0],
|
||||
hour=parts[1],
|
||||
day=parts[2],
|
||||
month=parts[3],
|
||||
day_of_week=parts[4]
|
||||
)
|
||||
scheduler.add_job(
|
||||
scheduled_backup_job,
|
||||
trigger=trigger,
|
||||
id="scheduled_backup",
|
||||
replace_existing=True
|
||||
)
|
||||
print(f"[SCHEDULER] Scheduled backup registered with cron: {cron_expr}")
|
||||
|
||||
# 2. Scheduled Update Check (every 12 hours)
|
||||
if settings.get("scheduled_update_check_enabled", True):
|
||||
scheduler.add_job(
|
||||
scheduled_update_check_job,
|
||||
trigger=IntervalTrigger(hours=12),
|
||||
id="scheduled_update_check",
|
||||
replace_existing=True
|
||||
)
|
||||
print("[SCHEDULER] Scheduled update checks registered (every 12 hours).")
|
||||
|
||||
def start_scheduler():
|
||||
if not scheduler.running:
|
||||
reload_scheduler()
|
||||
scheduler.start()
|
||||
print("[SCHEDULER] Scheduler started.")
|
||||
|
||||
def shutdown_scheduler():
|
||||
if scheduler.running:
|
||||
scheduler.shutdown()
|
||||
Reference in new issue
Block a user