introduce config checking infrastructure

This commit is contained in:
Jakob Ketterl 2020-03-15 23:32:19 +01:00
parent 6e6861479d
commit ca5889f925
2 changed files with 47 additions and 3 deletions

View File

@ -1,6 +1,6 @@
from http.server import HTTPServer from http.server import HTTPServer
from owrx.http import RequestHandler from owrx.http import RequestHandler
from owrx.config import PropertyManager from owrx.config import PropertyManager, Config
from owrx.feature import FeatureDetector from owrx.feature import FeatureDetector
from owrx.sdr import SdrService from owrx.sdr import SdrService
from socketserver import ThreadingMixIn from socketserver import ThreadingMixIn
@ -12,6 +12,7 @@ from owrx.pskreporter import PskReporter
import logging import logging
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s") logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
class ThreadedHttpServer(ThreadingMixIn, HTTPServer): class ThreadedHttpServer(ThreadingMixIn, HTTPServer):
@ -32,13 +33,22 @@ Author contact info: Jakob Ketterl, DD5JFK <dd5jfk@darc.de>
pm = PropertyManager.getSharedInstance().loadConfig() pm = PropertyManager.getSharedInstance().loadConfig()
configErrors = Config.validateConfig()
if configErrors:
logger.error(
"your configuration contains errors. please address the following errors:"
)
for e in configErrors:
logger.error(e)
return
featureDetector = FeatureDetector() featureDetector = FeatureDetector()
if not featureDetector.is_available("core"): if not featureDetector.is_available("core"):
print( logger.error(
"you are missing required dependencies to run openwebrx. " "you are missing required dependencies to run openwebrx. "
"please check that the following core requirements are installed:" "please check that the following core requirements are installed:"
) )
print(", ".join(featureDetector.get_requirements("core"))) logger.error(", ".join(featureDetector.get_requirements("core")))
return return
# Get error messages about unknown / unavailable features as soon as possible # Get error messages about unknown / unavailable features as soon as possible

View File

@ -1,5 +1,6 @@
import importlib.util import importlib.util
import logging import logging
import os
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -147,3 +148,36 @@ class PropertyManager(object):
except FileNotFoundError: except FileNotFoundError:
pass pass
raise ConfigNotFoundException("no usable config found! please make sure you have a valid configuration file!") raise ConfigNotFoundException("no usable config found! please make sure you have a valid configuration file!")
class ConfigError(object):
def __init__(self, key, message):
self.key = key
self.message = message
def __str__(self):
return "Configuration Error (key: {0}): {1}".format(self.key, self.message)
class Config:
@staticmethod
def validateConfig():
pm = PropertyManager.getSharedInstance()
errors = [
Config.checkTempDirectory(pm)
]
return [e for e in errors if e is not None]
@staticmethod
def checkTempDirectory(pm: PropertyManager):
key = "temporary_directory"
if not key in pm or pm[key] is None:
return ConfigError(key, "temporary directory is not set")
if not os.path.exists(pm[key]):
return ConfigError(key, "temporary directory doesn't exist")
if not os.path.isdir(pm[key]):
return ConfigError(key, "temporary directory path is not a directory")
if not os.access(pm[key], os.W_OK):
return ConfigError(key, "temporary directory is not writable")
return None