94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
#!/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()
|