Build [v1.4.0] - Audit Dashboard & LDAP Restoration

This commit is contained in:
Daniel Bedeleanu
2026-04-12 09:39:17 +03:00
parent 5cceba21f4
commit f3d861b1a2
23 changed files with 973 additions and 382 deletions

46
backend/scheduler.py Normal file
View File

@@ -0,0 +1,46 @@
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from .database import SessionLocal
from .db_manager import DbManager
from . import models
import logging
log = logging.getLogger("ainventory")
scheduler = BackgroundScheduler()
def scheduled_backup_job():
"""System triggered automated backup."""
db = SessionLocal()
try:
log.info("[SCHEDULER] Starting automated backup job...")
DbManager.create_backup(db, label="auto", user_id=None)
except Exception as e:
log.error(f"[SCHEDULER] Automated backup failed: {str(e)}")
finally:
db.close()
def sync_scheduler_config():
"""Read DB settings and update the scheduler job."""
db = SessionLocal()
try:
hour_s = db.query(models.SystemSetting).filter(models.SystemSetting.key == "backup_schedule_hour").first()
freq_s = db.query(models.SystemSetting).filter(models.SystemSetting.key == "backup_schedule_freq_days").first()
hour = int(hour_s.value) if hour_s else 3
freq = int(freq_s.value) if freq_s else 1
# Remove existing backup jobs to avoid duplicates
for job in scheduler.get_jobs():
if job.id == "auto_backup":
scheduler.remove_job(job.id)
# Add job with cron trigger: trigger at 'hour' every 'freq' days
# Use day='*/freq' for intervals in days
trigger = CronTrigger(hour=hour, minute=0, day=f"*/{freq}")
scheduler.add_job(scheduled_backup_job, trigger, id="auto_backup")
log.info(f"[SCHEDULER] Policy synced: Every {freq} days at {hour:02d}:00")
except Exception as e:
log.error(f"[SCHEDULER] Failed to sync config: {str(e)}")
finally:
db.close()