Add single execution to scheduled tasks.

This commit is contained in:
Andrew 2022-01-11 01:29:27 -05:00
parent 14ae7c9a46
commit 4f55ffed0f
4 changed files with 42 additions and 24 deletions

View File

@ -112,6 +112,7 @@ class Schedules(Model):
start_time = CharField(null=True)
command = CharField(null=True)
comment = CharField()
one_time = BooleanField(default=False)
class Meta:
table_name = 'schedules'
@ -205,7 +206,7 @@ class helpers_management:
# Schedules Methods
#************************************************************************************************
@staticmethod
def create_scheduled_task(server_id, action, interval, interval_type, start_time, command, comment=None, enabled=True):
def create_scheduled_task(server_id, action, interval, interval_type, start_time, command, comment=None, enabled=True, one_time=False):
sch_id = Schedules.insert({
Schedules.server_id: server_id,
Schedules.action: action,
@ -214,7 +215,8 @@ class helpers_management:
Schedules.interval_type: interval_type,
Schedules.start_time: start_time,
Schedules.command: command,
Schedules.comment: comment
Schedules.comment: comment,
Schedules.one_time: one_time
}).execute()
return sch_id
@ -235,6 +237,10 @@ class helpers_management:
def get_scheduled_task(schedule_id):
return model_to_dict(Schedules.get(Schedules.schedule_id == schedule_id)).execute()
@staticmethod
def get_scheduled_task_model(schedule_id):
return Schedules.select().where(Schedules.schedule_id == schedule_id).get()
@staticmethod
def get_schedules_by_server(server_id):
return Schedules.select().where(Schedules.server_id == server_id).execute()

View File

@ -165,8 +165,8 @@ class TasksManager:
schedules = management_helper.get_schedules_enabled()
tz = get_localzone()
self.scheduler.configure(timezone=tz)
self.scheduler.add_listener(self.schedule_watcher, mask=EVENT_ALL)
self.scheduler.add_job(self.scheduler.print_jobs, 'interval', seconds=10, id='-1')
self.scheduler.add_listener(self.schedule_watcher, mask=EVENT_JOB_EXECUTED)
#self.scheduler.add_job(self.scheduler.print_jobs, 'interval', seconds=10, id='-1')
#load schedules from DB
for schedule in schedules:
if schedule.interval_type == 'hours':
@ -181,7 +181,7 @@ class TasksManager:
def schedule_job(self, job_data):
sch_id = management_helper.create_scheduled_task(job_data['server_id'], job_data['action'], job_data['interval'], job_data['interval_type'], job_data['time'], job_data['command'], job_data['enabled'])
sch_id = management_helper.create_scheduled_task(job_data['server_id'], job_data['action'], job_data['interval'], job_data['interval_type'], job_data['time'], job_data['command'], "None", job_data['enabled'], job_data['one_time'])
if job_data['enabled']:
if job_data['interval_type'] == 'hours':
self.scheduler.add_job(management_helper.add_command, 'cron', minute = 0, hour = '*/'+str(job_data['interval']), id=str(sch_id), args=[job_data['server_id'], self.users_controller.get_id_by_name('system'), '127.0.0.1', job_data['command']])
@ -200,13 +200,13 @@ class TasksManager:
def schedule_watcher(self, event):
if not event.exception:
print(event.job_id, event.code)
job = self.scheduler.get_job(event.job_id)
trigger = job.trigger
if trigger.interval:
print(trigger.interval)
task = management_helper.get_scheduled_task_model(int(event.job_id))
if task.one_time:
self.remove_job(task.schedule_id)
logger.info("one time task detected. Deleting...")
else:
print('well that failed')
print("error")
logger.error("Task failed with error: {}".format(event.exception))
def start_stats_recording(self):
stats_update_frequency = helper.get_setting('stats_update_frequency')

View File

@ -862,15 +862,6 @@ class PanelHandler(BaseHandler):
command = "restart_server"
elif action == "backup":
command = "backup_server"
if bleach.clean(self.get_argument('enabled', '1')):
enabled = True
else:
enabled = False
if bleach.clean(self.get_argument('one_time', '0')):
one_time = True
else:
one_time = False
else:
cron_string = bleach.clean(self.get_argument('cron', ''))
action = bleach.clean(self.get_argument('action', None))
@ -884,6 +875,14 @@ class PanelHandler(BaseHandler):
command = "restart_server"
elif action == "backup":
command = "backup_server"
if bleach.clean(self.get_argument('enabled', '1'))=='1':
enabled = True
else:
enabled = False
if bleach.clean(self.get_argument('one_time', '0')) == '1':
one_time = True
else:
one_time = False
if not exec_user['superuser'] and not permissions['Backup'] in user_perms:
self.redirect("/panel/error?error=Unauthorized access: User not authorized")
@ -898,7 +897,6 @@ class PanelHandler(BaseHandler):
return
if interval_type == "days":
print("in job data")
job_data = {
"server_id": server_id,
"action": action,
@ -919,7 +917,6 @@ class PanelHandler(BaseHandler):
"one_time": one_time
}
else:
print("in job data")
job_data = {
"server_id": server_id,
"action": action,
@ -930,7 +927,6 @@ class PanelHandler(BaseHandler):
"time": '00:00',
"one_time": one_time
}
print(job_data['time'])
self.tasks_manager.schedule_job(job_data)

View File

@ -0,0 +1,16 @@
# Generated by database migrator
import peewee
def migrate(migrator, database, **kwargs):
migrator.add_columns('schedules', one_time=peewee.BooleanField(default=False))
"""
Write your migrations here.
"""
def rollback(migrator, database, **kwargs):
migrator.drop_columns('schedules', ['one_time'])
"""
Write your rollback migrations here.
"""