vorta/src/vorta/scheduler.py

43 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 vorta.borg.create import BorgCreateThread
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()
2018-11-01 01:10:11 +00:00
trigger = None
if self.profile().schedule_mode == 'interval':
trigger = cron.CronTrigger(hour=f'*/{self.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
2018-11-01 01:10:11 +00:00
if trigger is not None:
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')
2018-11-01 01:10:11 +00:00
if job is None:
return 'Manual Backups'
else:
return job.next_run_time.strftime('%Y-%m-%d %H:%M')
def create_backup(self):
msg = BorgCreateThread.prepare()
if msg['ok']:
thread = BorgCreateThread(msg['cmd'], msg['params'])
thread.start()
thread.wait()