From 09d1332b92e68512bd60ce6dd0b6362f0e0ea362 Mon Sep 17 00:00:00 2001 From: zewelor Date: Fri, 24 Nov 2017 08:53:21 +0100 Subject: [PATCH] Add logger and better exception handling --- gateway.py | 46 +++++++++++++++++++++++++++++++++++----------- logger.py | 6 ++++++ mqtt.py | 9 ++++++++- 3 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 logger.py diff --git a/gateway.py b/gateway.py index 8edb2bb..3378a50 100644 --- a/gateway.py +++ b/gateway.py @@ -1,27 +1,51 @@ +import logging +import sys +if sys.version_info < (3,4): + print("To use this script you need python 3.4 or newer! got %s" % sys.version_info) + sys.exit(1) + +from logger import _LOGGER +import argparse from queue import Queue - -from apscheduler.schedulers.background import BackgroundScheduler - from config import settings from mqtt import MqttClient from workers_manager import WorkersManager +from apscheduler.schedulers.background import BackgroundScheduler + +parser = argparse.ArgumentParser() +parser.add_argument('-d', '--debug', action='store_true', default=False) +parsed = parser.parse_args() + +if parsed.debug: + _LOGGER.setLevel(logging.DEBUG) +else: + _LOGGER.setLevel(logging.INFO) queue = Queue() scheduler = BackgroundScheduler() mqtt = MqttClient(settings['mqtt']) manager = WorkersManager(settings['workers']) +_LOGGER.info('Starting') + for worker_name, interval in manager.interval_enabled_workers.items(): + _LOGGER.debug("Added: %s with %d seconds interval" % (worker_name, interval)) queue.put([worker_name]) scheduler.add_job(lambda x: queue.put([x]), 'interval', seconds=interval, args=[worker_name]) scheduler.start() -while True: - for worker_name in queue.get(block=True): - try: - mqtt.publish(manager.update(worker_name)) - except (KeyboardInterrupt, SystemExit): - raise - except: - print('Some error') +running = True + +try: + while running: + for worker_name in queue.get(block=True): + try: + mqtt.publish(manager.update(worker_name)) + except (KeyboardInterrupt, SystemExit): + raise + except: + _LOGGER.info('Some error') +except KeyboardInterrupt: + running = False + _LOGGER.info('Exiting allowing jobs to finish. If you need force exit use kill') diff --git a/logger.py b/logger.py new file mode 100644 index 0000000..f8054dd --- /dev/null +++ b/logger.py @@ -0,0 +1,6 @@ +import logging + +import sys + +_LOGGER = logging.getLogger('bt-mqtt-gw') +_LOGGER.addHandler(logging.StreamHandler(sys.stdout)) diff --git a/mqtt.py b/mqtt.py index 8027789..eedd83d 100644 --- a/mqtt.py +++ b/mqtt.py @@ -1,11 +1,12 @@ +from logger import _LOGGER import paho.mqtt.publish as publish - class MqttClient: def __init__(self, config): self._config = config def publish(self, messages): + _LOGGER.debug(messages) publish.multiple(list(map(lambda m: m.as_dict, messages)), hostname=self.hostname, auth={'username': self.username, 'password': self.password}) @@ -46,3 +47,9 @@ class MqttMessage: 'topic': self.topic, 'payload': self.payload } + + def __repr__(self): + return self.as_dict.__str__() + + def __str__(self): + return self.__repr__()