# -*- coding: utf-8 -*- import logging import random import signal import sys import time from logging.handlers import TimedRotatingFileHandler from pprint import pprint from backend import app, main_logger from apscheduler.schedulers.background import BackgroundScheduler from backend.cron.cron_state_checker import recorder_checker from backend.websocket.handlers import send_state_update_to_recorders cron_log_handler = TimedRotatingFileHandler(app.config.get('CRON_LOG_FILE'), interval=1, when='d', backupCount=3) cron_log_handler.setFormatter(logging.Formatter('[%(asctime)s] - %(funcName)20s() %(message)s')) cron_logger = logging.getLogger("lrc.cron") cron_logger.addHandler(cron_log_handler) logging.getLogger("apscheduler.scheduler").addHandler(cron_log_handler) logging.getLogger("apscheduler.executors.default").addHandler(cron_log_handler) scheduler = None def get_default_scheduler(): cron_logger.debug("creating scheduler!") global scheduler scheduler = BackgroundScheduler() scheduler.daemonic = False return scheduler def add_default_jobs(sched=None, testing=False): global scheduler if sched is None: sched = scheduler if testing: check_recorder_state_job = sched.add_job(recorder_checker.check_object_state, 'interval', seconds=40, id="check_recorder_state_job") else: check_recorder_state_job = sched.add_job(recorder_checker.check_object_state, 'interval', minutes=2, id="check_recorder_state_job") send_update_state_to_recorder_job = sched.add_job( lambda: send_state_update_to_recorders(recorder_checker.get_current_state()), 'interval', minutes=1, id="send_update_state_to_recorder_job") return [check_recorder_state_job, send_update_state_to_recorder_job] def signal_handler(sig, frame): print('You pressed Ctrl+C -> shutting down scheduler!') if scheduler is not None: scheduler.shutdown() sys.exit(0) if __name__ == '__main__': # check_for_ingestibles_and_ingest() # remove_obsolete_media_files_objects() stream_handler = logging.StreamHandler() stream_handler.setFormatter( logging.Formatter('[%(asctime)s] {%(threadName)s} %(levelname)s in %(module)s, line %(lineno)d: %(message)s')) cron_logger.addHandler(stream_handler) cron_logger.setLevel(logging.INFO) signal.signal(signal.SIGINT, signal_handler) get_default_scheduler() add_default_jobs(testing=True) cron_logger.info("Starting internal scheduler") scheduler.start() c = 0 while c < 10: sleep_time = random.randint(10, 20) cron_logger.info("Sleeping for {}s".format(sleep_time)) time.sleep(sleep_time) recorder_id = random.randint(0, 15) cron_logger.info("Using recorder id {}".format(recorder_id)) recorder_checker.add_object_to_state_check(recorder_id) recorder_checker.add_object_to_state_check(recorder_id + 1) pprint(recorder_checker.get_current_state()) while True: user_in = input("Type >exit< to quit.") if user_in == "exit" or user_in == ">exit<": break scheduler.shutdown()