mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-08-06 02:21:42 +00:00
130 lines
4.1 KiB
Python
130 lines
4.1 KiB
Python
# Main script
|
|
import logging
|
|
import os
|
|
import signal
|
|
import sys
|
|
|
|
from core.config import config, SERVER_OWNER_CALLSIGN, LOG_LEVEL, get_sig_ref_data_provider_from_config, \
|
|
get_spot_provider_from_config, get_alert_provider_from_config, get_solar_conditions_provider_from_config, \
|
|
get_static_data_provider_from_config
|
|
from core.constants import SOFTWARE_VERSION
|
|
from core.data_store import DATA_STORE
|
|
from core.call_lookup_helper import lookup_helper
|
|
from core.status_reporter import StatusReporter
|
|
from server.webserver import WebServer
|
|
|
|
# Globals
|
|
web_server = None
|
|
spot_providers = []
|
|
alert_providers = []
|
|
solar_condition_providers = []
|
|
static_data_providers = []
|
|
sig_ref_data_providers = []
|
|
cleanup_timer = None
|
|
run = True
|
|
|
|
|
|
def shutdown(_signum=None, _frame=None):
|
|
"""Shutdown function"""
|
|
|
|
global run
|
|
|
|
logging.info("Stopping program...")
|
|
if web_server:
|
|
web_server.stop()
|
|
for sp in spot_providers:
|
|
if sp.enabled:
|
|
sp.stop()
|
|
for ap in alert_providers:
|
|
if ap.enabled:
|
|
ap.stop()
|
|
for scp in solar_condition_providers:
|
|
if scp.enabled:
|
|
scp.stop()
|
|
for srdp in sig_ref_data_providers:
|
|
if srdp.enabled:
|
|
srdp.stop()
|
|
for srdp in static_data_providers:
|
|
if srdp.enabled:
|
|
srdp.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 lookup helper
|
|
lookup_helper.start()
|
|
|
|
# Set up web server
|
|
web_server = WebServer()
|
|
|
|
# Fetch, set up and start spot providers
|
|
for entry in config["spot-providers"]:
|
|
spot_providers.append(get_spot_provider_from_config(entry))
|
|
for p in spot_providers:
|
|
if p.enabled:
|
|
p.start()
|
|
|
|
# Fetch, set up and start alert providers
|
|
for entry in config["alert-providers"]:
|
|
alert_providers.append(get_alert_provider_from_config(entry))
|
|
for p in alert_providers:
|
|
if p.enabled:
|
|
p.start()
|
|
|
|
# Fetch, set up and start solar conditions providers
|
|
for entry in config.get("solar-condition-providers", []):
|
|
solar_condition_providers.append(get_solar_conditions_provider_from_config(entry))
|
|
for p in solar_condition_providers:
|
|
if p.enabled:
|
|
p.start()
|
|
|
|
# Fetch, set up and start static reference data providers
|
|
for entry in config.get("static-data-providers", []):
|
|
static_data_providers.append(get_static_data_provider_from_config(entry))
|
|
for p in static_data_providers:
|
|
if p.enabled:
|
|
p.start()
|
|
|
|
# Fetch, set up and start SIG reference data providers
|
|
for entry in config.get("sig-ref-data-providers", []):
|
|
sig_ref_data_providers.append(get_sig_ref_data_provider_from_config(entry))
|
|
for p in sig_ref_data_providers:
|
|
if p.enabled:
|
|
p.start()
|
|
|
|
# Set up status reporter
|
|
status_reporter = StatusReporter(web_server=web_server, spot_providers=spot_providers,
|
|
alert_providers=alert_providers, static_data_providers=static_data_providers,
|
|
sig_ref_data_providers=sig_ref_data_providers,
|
|
solar_condition_providers=solar_condition_providers, run_interval=5)
|
|
status_reporter.start()
|
|
|
|
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()
|