Esempio n. 1
0
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)
Esempio n. 2
0
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()
Esempio n. 3
0
    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)
Esempio n. 4
0
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
Esempio n. 5
0
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")
Esempio n. 6
0
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]
Esempio n. 7
0
def stop_server(signum, frame):
    KRON.stop()
    server.stop()
Esempio n. 8
0
def stop_service():
    KRON.stop()
    server.stop()
    return "service stop"
Esempio n. 9
0
                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)