Files
spothole/spothole.py
T

68 lines
1.8 KiB
Python

# Main script
import logging
import os
import signal
import sys
from core.config import SERVER_OWNER_CALLSIGN, LOG_LEVEL
from core.constants import SOFTWARE_VERSION
from core.data_providers import DATA_PROVIDERS
from core.data_store import DATA_STORE
from core.status_reporter import StatusReporter
from server.webserver import WEB_SERVER
# Globals
run = True
def shutdown(_signum=None, _frame=None):
"""Shutdown function"""
global run
logging.info("Stopping program...")
WEB_SERVER.stop()
DATA_PROVIDERS.stop()
DATA_STORE.close()
os._exit(0)
# Main function
if __name__ == '__main__':
# Set up logging
root = logging.getLogger()
root.setLevel(LOG_LEVEL)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(LOG_LEVEL)
formatter = logging.Formatter("%(levelname)s : %(message)s")
handler.setFormatter(formatter)
root.handlers.clear()
root.addHandler(handler)
logging.info("Starting...")
logging.info(
"This is Spothole version " + SOFTWARE_VERSION + ". This instance is run by " + SERVER_OWNER_CALLSIGN + ".")
# Shut down gracefully on SIGINT
signal.signal(signal.SIGINT, shutdown)
# Set up data store
DATA_STORE.setup()
# Set up and start data providers
DATA_PROVIDERS.setup()
DATA_PROVIDERS.start()
# Set up and start status reporter
status_reporter = StatusReporter(run_interval=5)
status_reporter.start()
# Set up the web server
WEB_SERVER.setup()
logging.info("Startup complete.")
# Run the web server. This is the blocking call that keeps the application running in the main thread, so this must
# be the last thing we do. web_server.stop() triggers an await condition in the web server which finishes the main
# thread.
WEB_SERVER.start()