vorta/src/vorta/scheduler.py

42 lines
1.4 KiB
Python
Raw Normal View History

from apscheduler.schedulers.qt import QtScheduler
2018-10-29 06:59:24 +00:00
from apscheduler.triggers import cron
2018-10-29 13:23:42 +00:00
from .borg_runner import BorgThread
from .models import BackupProfileMixin
2018-10-29 13:23:42 +00:00
class VortaScheduler(QtScheduler, BackupProfileMixin):
2018-10-31 11:14:12 +00:00
def __init__(self, parent):
super().__init__()
self.app = parent
2018-10-31 12:42:11 +00:00
self.start()
self.reload()
2018-10-31 11:14:12 +00:00
def reload(self):
self.remove_all_jobs()
if self.profile.schedule_mode == 'off':
2018-10-31 12:42:11 +00:00
self.next_job = 'Manual Backups'
2018-10-31 11:14:12 +00:00
return None
elif self.profile.schedule_mode == 'interval':
2018-10-31 11:14:12 +00:00
trigger = cron.CronTrigger(hour=f'*/{profile.schedule_interval_hours}',
minute=self.profile.schedule_interval_minutes)
elif self.profile.schedule_mode == 'fixed':
trigger = cron.CronTrigger(hour=self.profile.schedule_fixed_hour,
minute=self.profile.schedule_fixed_minute)
2018-10-29 13:23:42 +00:00
self.add_job(self.create_backup, trigger, id='create-backup', misfire_grace_time=180)
@property
def next_job(self):
2018-10-31 12:42:11 +00:00
job = self.get_job('create-backup')
return job.next_run_time.strftime('%Y-%m-%d %H:%M')
@classmethod
def create_backup(cls):
msg = BorgThread.prepare_runner()
if msg['ok']:
thread = BorgThread(msg['cmd'], msg['params'])
thread.start()
thread.wait()