#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2019. Tobias Kurze import logging import ssl import sys import threading from jinja2.exceptions import TemplateNotFound from backend import app, db from backend.cron import get_default_scheduler, add_default_jobs, async_permanent_cron_recorder_checker from backend.models import * from backend.models import room_model, recorder_model, RecorderCommand, Recorder from backend.recorder_adapters import get_defined_recorder_adapters from backend.tools.model_updater import update_recorder_models_database, create_default_recorders, add_test_recorder from backend.websocket.base import WebSocketBase def _start_initial_recorder_state_update(run_in_thread=True): if run_in_thread: thread = threading.Thread(target=async_permanent_cron_recorder_checker.check_object_state, args=()) thread.start() else: async_permanent_cron_recorder_checker.check_object_state() # initial check of all recorders def _create_and_start_default_scheduler(): print("Starting Scheduler") scheduler = get_default_scheduler() add_default_jobs(scheduler) scheduler.start() return scheduler def main(): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # db.drop_all() # db.create_all() # Recorder() room_model.pre_fill_table() update_recorder_models_database(drop=False) create_default_recorders() add_test_recorder() print(app.config.get("SERVER_NAME", None)) if app.config.get("USE_SSL", False): try: context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) context.load_cert_chain(app.config.get("CERT", 'cert.pem'), app.config.get("KEY", 'key.pem')) print("using ssl context!") app.run(debug=True, ssl_context=context, threaded=True, #host="0.0.0.0", host=app.config.get("HOST", "0.0.0.0"), port=app.config.get("PORT", 5443) ) except FileNotFoundError: print("Could not find cert/key.pem!") app.run(debug=True, threaded=True, host=app.config.get("HOST", None), port=app.config.get("PORT", 5443) ) try: db.create_all() except Exception as e: logging.critical(e) scheduler = _create_and_start_default_scheduler() # _start_initial_recorder_state_update(run_in_thread=False) wsb = WebSocketBase() print("running websocket...(replaces normal app.run()") wsb.start_websocket(debug=True) # print("running web app...") # app.run(debug=True, host="0.0.0.0", threaded=True) wsb.send_test_msg() while True: user_in = input("Type >exit< to quit.") if user_in == "exit" or user_in == ">exit<": break scheduler.shutdown() sys.exit(0) if __name__ == '__main__': main()