From 6e6861479de93bb819d08c1702bcd3e888c1a084 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 15 Mar 2020 18:45:24 +0100 Subject: [PATCH 1/4] fix bugs with negative lat / long; update formatting ref: #81 --- owrx/kiss.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/owrx/kiss.py b/owrx/kiss.py index 374cc07..e24284f 100644 --- a/owrx/kiss.py +++ b/owrx/kiss.py @@ -40,8 +40,12 @@ IGLOGIN {callsign} {password} if pm["aprs_igate_beacon"]: (lat, lon) = pm["receiver_gps"] - lat = "{0}^{1:.2f}{2}".format(int(lat), (lat - int(lat)) * 60, "N" if lat > 0 else "S") - lon = "{0}^{1:.2f}{2}".format(int(lon), (lon - int(lon)) * 60, "E" if lon > 0 else "W") + direction_ns = "N" if lat > 0 else "S" + direction_we = "E" if lon > 0 else "W" + lat = abs(lat) + lon = abs(lon) + lat = "{0:02d}^{1:05.2f}{2}".format(int(lat), (lat - int(lat)) * 60, direction_ns) + lon = "{0:03d}^{1:05.2f}{2}".format(int(lon), (lon - int(lon)) * 60, direction_we) config += """ PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat={lat} long={lon} comment="OpenWebRX APRS gateway" From ca5889f925875c3ab5d84f1cf972016f1d9bcf3b Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 15 Mar 2020 23:32:19 +0100 Subject: [PATCH 2/4] introduce config checking infrastructure --- owrx/__main__.py | 16 +++++++++++++--- owrx/config.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/owrx/__main__.py b/owrx/__main__.py index d452e4a..109bf87 100644 --- a/owrx/__main__.py +++ b/owrx/__main__.py @@ -1,6 +1,6 @@ from http.server import HTTPServer from owrx.http import RequestHandler -from owrx.config import PropertyManager +from owrx.config import PropertyManager, Config from owrx.feature import FeatureDetector from owrx.sdr import SdrService from socketserver import ThreadingMixIn @@ -12,6 +12,7 @@ from owrx.pskreporter import PskReporter import logging logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s") +logger = logging.getLogger(__name__) class ThreadedHttpServer(ThreadingMixIn, HTTPServer): @@ -32,13 +33,22 @@ Author contact info: Jakob Ketterl, DD5JFK 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() if not featureDetector.is_available("core"): - print( + logger.error( "you are missing required dependencies to run openwebrx. " "please check that the following core requirements are installed:" ) - print(", ".join(featureDetector.get_requirements("core"))) + logger.error(", ".join(featureDetector.get_requirements("core"))) return # Get error messages about unknown / unavailable features as soon as possible diff --git a/owrx/config.py b/owrx/config.py index 09bbd8f..b027f48 100644 --- a/owrx/config.py +++ b/owrx/config.py @@ -1,5 +1,6 @@ import importlib.util import logging +import os logger = logging.getLogger(__name__) @@ -147,3 +148,36 @@ class PropertyManager(object): except FileNotFoundError: pass 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 From 1581c659afb221ae610712a22f63fc956d25ad3e Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 15 Mar 2020 23:34:44 +0100 Subject: [PATCH 3/4] add version to startup messages --- owrx/__main__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/owrx/__main__.py b/owrx/__main__.py index 109bf87..ee68d80 100644 --- a/owrx/__main__.py +++ b/owrx/__main__.py @@ -8,6 +8,7 @@ from owrx.sdrhu import SdrHuUpdater from owrx.service import Services from owrx.websocket import WebSocketConnection from owrx.pskreporter import PskReporter +from owrx.version import openwebrx_version import logging @@ -31,6 +32,8 @@ Author contact info: Jakob Ketterl, DD5JFK """ ) + logger.info("OpenWebRX version {0} starting up...".format(openwebrx_version)) + pm = PropertyManager.getSharedInstance().loadConfig() configErrors = Config.validateConfig() From edded220b500f2befb1186f172d97fbaef102ccc Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 15 Mar 2020 23:39:38 +0100 Subject: [PATCH 4/4] add the mailing list links --- htdocs/index.html | 1 + owrx/__main__.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/htdocs/index.html b/htdocs/index.html index 3fabf73..fefefbc 100644 --- a/htdocs/index.html +++ b/htdocs/index.html @@ -127,6 +127,7 @@
OpenWebRX client log
Author contact: Jakob Ketterl, DD5JFK
+
Support and information: Groups.io Mailinglist
diff --git a/owrx/__main__.py b/owrx/__main__.py index ee68d80..948781f 100644 --- a/owrx/__main__.py +++ b/owrx/__main__.py @@ -28,6 +28,8 @@ OpenWebRX - Open Source SDR Web App for Everyone! | for license see LICENSE fil _________________________________________________________________________________________________ Author contact info: Jakob Ketterl, DD5JFK +Documentation: https://github.com/jketterl/openwebrx/wiki +Support and info: https://groups.io/g/openwebrx """ )