\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv6/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv6/scheduler.py


import logging
from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.interval import IntervalTrigger
from app import db
from models import BackupJob
from backup_utils import run_backup

logger = logging.getLogger(__name__)

def init_scheduler(scheduler):
    """
    Initialize the scheduler with existing backup jobs.
    
    Args:
        scheduler: APScheduler instance
    """
    # Load all enabled backup jobs from the database
    try:
        jobs = BackupJob.query.filter_by(enabled=True).all()
        
        for job in jobs:
            schedule_backup_job(job, scheduler)
        
        logger.info(f"Initialized scheduler with {len(jobs)} backup jobs")
    except Exception as e:
        logger.error(f"Error initializing scheduler: {str(e)}")

def schedule_backup_job(job, scheduler=None):
    """
    Schedule a backup job with APScheduler.
    
    Args:
        job (BackupJob): Backup job to schedule
        scheduler: APScheduler instance (optional)
    """
    from app import scheduler as app_scheduler
    
    # Use provided scheduler or default to app scheduler
    scheduler = scheduler or app_scheduler
    
    # Create a job ID
    job_id = f"backup_job_{job.id}"
    
    # Remove existing job if it exists
    if scheduler.get_job(job_id):
        scheduler.remove_job(job_id)
    
    # Parse schedule type and value
    if job.schedule_type == 'daily':
        # Time in HH:MM format
        hour, minute = job.schedule_value.split(':')
        trigger = CronTrigger(hour=hour, minute=minute)
    elif job.schedule_type == 'weekly':
        # day_of_week:HH:MM format (e.g., mon:12:00)
        day, time = job.schedule_value.split(':')
        hour, minute = time.split(':')
        trigger = CronTrigger(day_of_week=day, hour=hour, minute=minute)
    elif job.schedule_type == 'monthly':
        # day:HH:MM format (e.g., 1:12:00 for 1st day of month)
        day, time = job.schedule_value.split(':')
        hour, minute = time.split(':')
        trigger = CronTrigger(day=day, hour=hour, minute=minute)
    elif job.schedule_type == 'custom':
        # Custom cron expression
        trigger = CronTrigger.from_crontab(job.schedule_value)
    else:
        # Default to hourly backup if schedule type is not recognized
        logger.warning(f"Unknown schedule type: {job.schedule_type}, defaulting to hourly")
        trigger = IntervalTrigger(hours=1)
    
    # Add the job to the scheduler
    scheduler.add_job(
        func=_run_backup_job,
        trigger=trigger,
        args=[job.id],
        id=job_id,
        replace_existing=True,
        name=f"Backup: {job.name}"
    )
    
    logger.info(f"Scheduled backup job: {job.name} (ID: {job.id})")

def remove_scheduled_job(job_id, scheduler=None):
    """
    Remove a scheduled backup job.
    
    Args:
        job_id (int): ID of the backup job
        scheduler: APScheduler instance (optional)
    """
    from app import scheduler as app_scheduler
    
    # Use provided scheduler or default to app scheduler
    scheduler = scheduler or app_scheduler
    
    # Create a job ID
    scheduler_job_id = f"backup_job_{job_id}"
    
    # Remove the job if it exists
    if scheduler.get_job(scheduler_job_id):
        scheduler.remove_job(scheduler_job_id)
        logger.info(f"Removed scheduled backup job ID: {job_id}")
    else:
        logger.warning(f"Backup job ID: {job_id} not found in scheduler")

def _run_backup_job(job_id):
    """
    Internal function to run a backup job by ID.
    Called by the scheduler.
    
    Args:
        job_id (int): ID of the backup job
    """
    from app import app
    
    # Use application context
    with app.app_context():
        try:
            # Get the job from the database
            job = BackupJob.query.get(job_id)
            
            if not job:
                logger.error(f"Backup job ID {job_id} not found in database")
                return
            
            # Run the backup with email notifications
            logger.info(f"Running scheduled backup job: {job.name} (ID: {job_id})")
            result = run_backup(job, send_email=True)
            
            if result:
                logger.info(f"Scheduled backup job completed successfully: {job.name} (ID: {job_id})")
            else:
                logger.error(f"Scheduled backup job failed: {job.name} (ID: {job_id})")
                
        except Exception as e:
            logger.error(f"Error running scheduled backup job ID {job_id}: {str(e)}")

© KUJUNTI.ID