def cancel_schedule(taskname): if taskname in KRON.tasks: try: KRON.cancel(KRON.tasks[taskname]) del KRON.tasks[taskname] except Exception, e: logger.debug("schedule cancel error: %r", e)
def start_server(): create_db(app, db) update_version(app, db) KRON.start() try: logger.debug("starting server in %s:%s", HOST, PORT) server.bind_addr = (HOST, PORT) server.start() except KeyboardInterrupt: server.stop()
def load_schedules(): """ Load schedules from db to kronos scheduler. Starts the backup routine for an app module if we missed a schedule. """ logger.debug("in load_schedules") modules = app.modules for app_name in modules.keys(): if app_name in ["base", "account"]: continue logger.debug("loading schedule for %s", app_name) settings = get_settings(app_name) if not settings: continue logger.debug("%r", settings["schedule"]) def callback(app_name): try: url = "http://%s:%s/%s/backup" % (HOST, PORT, app_name) progress = get_backup_progress(app_name) if not progress: urllib2.urlopen(url).read() except Exception, e: logger.debug("%r", e) taskname = "%s" % (app_name) add_schedule(taskname, settings["schedule"], callback) logger.debug("schedule added") today = datetime.datetime.today() if not is_online(): logger.debug("we are offline. skipping backup on boot") return make_response("schedule loaded") archive = get_recent_archive(app_name) if archive: logger.debug("there is an archive") try: if not backup_is_on_schedule(today, archive.archived_at, settings["schedule"]): logger.debug("we missed a backup schedule. starting backup") KRON.add_single_task(callback, "backup_%s" % app_name, 1, "threaded", [app_name], None) else: logger.debug("we are on schedule") except Exception, e: logger.debug("error: %r" % e)
def add_monthly_schedule(taskname, schedule, callback): cancel_schedule(taskname) timeofday = time.strptime(schedule['timeofday'], "%H%M") daysofmonth = map(lambda x: int(x) + 1, schedule['dayofmonth']) task = KRON.add_daytime_task( schedule_runner, taskname, None, daysofmonth, (timeofday.tm_hour, timeofday.tm_min + 1), 'threaded', (callback,taskname,), None) KRON.tasks[taskname] = task
def add_daily_schedule(taskname, schedule, callback): cancel_schedule(taskname) timeofday = time.strptime(schedule['timeofday'], "%H%M") task = KRON.add_daytime_task( schedule_runner, # method to run taskname, # taskname range(1,8), # days of the week None, # days of the month (timeofday.tm_hour, timeofday.tm_min), # time of the day 'threaded', (callback,taskname,), # args to job method None) # kwargs to job method KRON.tasks[taskname] = task logger.debug("done adding schedule")
from flask import url_for, current_app import urllib2 from settings import HOST, PORT, KRON from myvault.helpers import get_logger, is_online logger = get_logger() def init_scheduler(app): def load_schedules(): try: url = "http://%s:%s/load_schedules" % (HOST, PORT,) urllib2.urlopen(url, timeout=1) except Exception, e: pass KRON.add_single_task(load_schedules, 'load_schedules', 3, 'threaded', None, None) def reload_schedules(): try: url = "http://%s:%s/reload_schedules" % (HOST, PORT,) urllib2.urlopen(url, timeout=1) except Exception, e: pass def cancel_schedule(taskname): if taskname in KRON.tasks: try: KRON.cancel(KRON.tasks[taskname]) del KRON.tasks[taskname]
def stop_server(signum, frame): KRON.stop() server.stop()
def stop_service(): KRON.stop() server.stop() return "service stop"
return make_response("schedule loaded") archive = get_recent_archive(app_name) if archive: logger.debug("there is an archive") try: if not backup_is_on_schedule(today, archive.archived_at, settings["schedule"]): logger.debug("we missed a backup schedule. starting backup") KRON.add_single_task(callback, "backup_%s" % app_name, 1, "threaded", [app_name], None) else: logger.debug("we are on schedule") except Exception, e: logger.debug("error: %r" % e) else: logger.debug("no backup found. starting backup") KRON.add_single_task(callback, "backup_%s" % app_name, 1, "threaded", [app_name], None) return make_response("schedule loaded") @app.route("/reload_schedules") def reload_schedules(): """ Reload all schedules """ logger.debug("in reload schedules") modules = app.modules def load_sked(): try: url = "http://%s:%s/load_schedules" % (HOST, PORT) urllib2.urlopen(url, timeout=1)