Improved logging mechanism (and a few minor goodies) (#54)
* Improved logging mechanism * Allow for suppression of any errors regarding failed device updates
This commit is contained in:
+21
-16
@@ -1,5 +1,14 @@
|
||||
import importlib
|
||||
import threading
|
||||
from functools import partial
|
||||
import logging
|
||||
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from interruptingcow import timeout
|
||||
from pytz import utc
|
||||
|
||||
from workers_queue import _WORKERS_QUEUE
|
||||
import logger
|
||||
|
||||
from pip import __version__ as pip_version
|
||||
if int(pip_version.split('.')[0]) >= 10:
|
||||
@@ -7,12 +16,8 @@ if int(pip_version.split('.')[0]) >= 10:
|
||||
else:
|
||||
from pip import main as pip_main
|
||||
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from interruptingcow import timeout
|
||||
from functools import partial
|
||||
from logger import _LOGGER
|
||||
from workers_queue import _WORKERS_QUEUE
|
||||
from pytz import utc
|
||||
_LOGGER = logger.get(__name__)
|
||||
|
||||
|
||||
class WorkersManager:
|
||||
class Command:
|
||||
@@ -23,10 +28,10 @@ class WorkersManager:
|
||||
|
||||
def execute(self):
|
||||
messages = []
|
||||
with timeout(35):
|
||||
with timeout(35, exception=TimeoutError):
|
||||
messages = self._callback(*self._args)
|
||||
|
||||
_LOGGER.debug(messages)
|
||||
_LOGGER.debug("Command execution result: %s", messages)
|
||||
return messages
|
||||
|
||||
def __init__(self):
|
||||
@@ -46,7 +51,7 @@ class WorkersManager:
|
||||
worker_obj = klass(**worker_config['args'])
|
||||
|
||||
if hasattr(worker_obj, 'status_update'):
|
||||
_LOGGER.debug("Added: %s with %d seconds interval" % (worker_name, worker_config['update_interval']))
|
||||
_LOGGER.debug("Added %s worker with %d seconds interval", repr(worker_obj), worker_config['update_interval'])
|
||||
command = self.Command(worker_obj.status_update, [])
|
||||
self._update_commands.append(command)
|
||||
|
||||
@@ -61,7 +66,7 @@ class WorkersManager:
|
||||
partial(self._update_interval_wrapper, command, job_id)
|
||||
))
|
||||
elif hasattr(worker_obj, 'run'):
|
||||
_LOGGER.debug("Registered: %s as daemon" % (worker_name))
|
||||
_LOGGER.debug("Registered %s as daemon", repr(worker_obj))
|
||||
self._daemons.append(worker_obj)
|
||||
else:
|
||||
raise "%s cannot be initialized, it has to define run or status_update method" % worker_name
|
||||
@@ -105,21 +110,21 @@ class WorkersManager:
|
||||
def _pip_install_helper(package_names):
|
||||
for package in package_names:
|
||||
pip_main(['install', '-q', package])
|
||||
logger.reset()
|
||||
|
||||
def _update_interval_wrapper(self, command, job_id, client, userdata, c):
|
||||
_LOGGER.debug("Recieved updated interval for %s with: %s", c.topic, c.payload)
|
||||
_LOGGER.info("Recieved updated interval for %s with: %s", c.topic, c.payload)
|
||||
try:
|
||||
new_interval = int(c.payload)
|
||||
self._scheduler.remove_job(job_id)
|
||||
self._scheduler.add_job(
|
||||
partial(self._queue_command, command), 'interval',
|
||||
seconds=new_interval, id=job_id
|
||||
)
|
||||
partial(self._queue_command, command), 'interval',
|
||||
seconds=new_interval, id=job_id)
|
||||
except ValueError:
|
||||
_LOGGER.info("New interval invalid, recieved: %s", c.payload)
|
||||
logger.log_exception(_LOGGER, 'Ignoring invalid new interval: %s', c.payload)
|
||||
|
||||
def _on_command_wrapper(self, worker_obj, client, userdata, c):
|
||||
_LOGGER.debug("on command wrapper for with %s: %s", c.topic, c.payload)
|
||||
_LOGGER.debug("Received command for %s on %s: %s", repr(worker_obj), c.topic, c.payload)
|
||||
global_topic_prefix = userdata['global_topic_prefix']
|
||||
topic = c.topic[len(global_topic_prefix+'/'):] if global_topic_prefix is not None else c.topic
|
||||
self._queue_command(self.Command(worker_obj.on_command, [topic, c.payload]))
|
||||
|
||||
Reference in New Issue
Block a user