diff --git a/etc/linspector.ini b/etc/linspector.ini index d9ce24b..36de80e 100644 --- a/etc/linspector.ini +++ b/etc/linspector.ini @@ -13,7 +13,8 @@ plugins = HTTPServer ; a monitor then maybe only run tasks from the dedicated monitor. maybe it is a good idea to run global tasks in every ; monitor and the monitor can add tasks to the global settings... need to think about it. ; tasks separated by ','. no whitespaces allowed -tasks = MariaDB,Logger +tasks = SQLite +notification = SMS ; maybe the run_mode is obsolete because this will be a daemon but maybe it is useful for one time execution? ; in uplink the available run_modes were cron, daemon and foreground run_mode = cron diff --git a/etc/monitors/network2/gateway.ini b/etc/monitors/network2/gateway.ini index b139f81..14faedf 100644 --- a/etc/monitors/network2/gateway.ini +++ b/etc/monitors/network2/gateway.ini @@ -2,10 +2,10 @@ identifier = dsl service = FritzboxUplink interval = 60 -notifications = SMS,Email +notifications = Email email_receivers = admin@example.com,fallback@example.com sms_receivers = +329084320984,+39804932409 -tasks = MariaDB +tasks = MariaDB,FileLogger host = 192.168.1.1 user = USERNAME password = PASSWORD diff --git a/linspector/core/monitor.py b/linspector/core/monitor.py index 9866c7f..937c41e 100644 --- a/linspector/core/monitor.py +++ b/linspector/core/monitor.py @@ -36,64 +36,85 @@ class Monitor: self.__environment = environment self.__identifier = identifier self.__monitor_configuration = monitor_configuration + self.__notification_list = [] self.__notifications = notifications self.__services = services + self.__task_list = [] # put tasks for the dedicated job here. self.__tasks = tasks - #print(__file__ + ' (43): ' + str(monitor_configuration)) + if configuration.get_option('linspector', 'notifications') or \ + monitor_configuration.get('monitor', 'notifications'): + + if configuration.get_option('linspector', 'notifications') and \ + monitor_configuration.get('monitor', 'notifications'): + + notification_list = \ + configuration.get_option('linspector', 'notifications') + ',' + \ + monitor_configuration.get('monitor', 'notifications') + elif configuration.get_option('linspector', 'notifications'): + notification_list = configuration.get_option('linspector', 'notifications') + elif monitor_configuration.get('monitor', 'notifications'): + notification_list = monitor_configuration.get('monitor', 'notifications') + else: + notification_list = None + + self.__notification_list = notification_list + + for notification_option in notification_list.split(','): + #print(__file__ + ' (64): ' + str(notification_option)) + if notification_option not in notifications: + notification_package = 'linspector.notifications.' + notification_option.lower() + notification_module = importlib.import_module(notification_package) + notification = getattr(notification_module, notification_option + + 'Notification') + + notification.__init__(self, configuration, environment) + notifications[notification_option] = notification + #print(__file__ + ' (74): ' + str(notifications)) + + #print(__file__ + ' (75): ' + str(monitor_configuration)) if self.__monitor_configuration.get('monitor', 'service'): + if monitor_configuration.get('monitor', 'service') not in services: + service_package = 'linspector.services.' + \ + monitor_configuration.get('monitor', 'service').lower() - # TODO: the exception handling later!!! - #try: - service_package = 'linspector.services.' + \ - self.__monitor_configuration.get('monitor', 'service').lower() - service_module = importlib.import_module(service_package) + service_module = importlib.import_module(service_package) + service = getattr(service_module, + monitor_configuration.get('monitor', 'service') + 'Service') - service = getattr(service_module, - self.__monitor_configuration.get('monitor', 'service') + 'Service') - service.__init__(self, configuration, environment) - - if self.__monitor_configuration.get('monitor', 'service') not in services: - services[self.__monitor_configuration.get('monitor', 'service')] = service - #print(__file__ + ' (58): ' + str(services)) - #else: - # do some logging - - #except ModuleNotFoundError as err: - # raise Exception('something went wrong when initializing a service. you are ' - # 'using an unknown service in your monitor configuration ' - # 'identified by: ' + identifier + '({0})'.format(err)) + service.__init__(self, configuration, environment) + services[monitor_configuration.get('monitor', 'service')] = service + #print(__file__ + ' (87): ' + str(services)) #service.execute(self) - if self.__monitor_configuration.get('monitor', 'notifications'): - for notification_option in self.__monitor_configuration.get('monitor', - 'notifications').split(','): + if configuration.get_option('linspector', 'tasks') or \ + monitor_configuration.get('monitor', 'tasks'): - #print(__file__ + ' (73): ' + str(notification_option)) - notification_package = 'linspector.notifications.' + notification_option.lower() - notification_module = importlib.import_module(notification_package) + if configuration.get_option('linspector', 'tasks') and \ + monitor_configuration.get('monitor', 'tasks'): - notification = getattr(notification_module, notification_option + 'Notification') - notification.__init__(self, configuration, environment) + task_list = configuration.get_option('linspector', 'tasks') + ',' + \ + monitor_configuration.get('monitor', 'tasks') + elif configuration.get_option('linspector', 'tasks'): + task_list = configuration.get_option('linspector', 'tasks') + elif monitor_configuration.get('monitor', 'tasks'): + task_list = monitor_configuration.get('monitor', 'tasks') + else: + task_list = None - if notification_option not in notifications: - notifications[notification_option] = notification - #print(__file__ + ' (82): ' + str(notifications)) - - if self.__monitor_configuration.get('monitor', 'tasks'): - for task_option in self.__monitor_configuration.get('monitor', - 'tasks').split(','): - #print(__file__ + ' (87): ' + str(task_option)) - task_package = 'linspector.tasks.' + task_option.lower() - task_module = importlib.import_module(task_package) - - task = getattr(task_module, task_option + 'Task') - task.__init__(self, configuration, environment) + self.task_list = task_list + for task_option in task_list.split(','): if task_option not in tasks: + #print(__file__ + ' (110): ' + str(task_option)) + task_package = 'linspector.tasks.' + task_option.lower() + task_module = importlib.import_module(task_package) + task = getattr(task_module, task_option + 'Task') + task.__init__(self, configuration, environment) tasks[task_option] = task - #print(__file__ + ' (96): ' + str(tasks)) + + #print(__file__ + ' (117): ' + str(tasks)) def get_identifier(self): return self.__identifier diff --git a/linspector/tasks/redis.py b/linspector/tasks/redis.py index 125cfc2..bb3a8b2 100644 --- a/linspector/tasks/redis.py +++ b/linspector/tasks/redis.py @@ -32,3 +32,4 @@ class RedisTask: def __init__(self, configuration, environment): self.__configuration = configuration self.__environment = environment + diff --git a/linspector/tasks/sqlite.py b/linspector/tasks/sqlite.py index a4e476e..afc09e8 100644 --- a/linspector/tasks/sqlite.py +++ b/linspector/tasks/sqlite.py @@ -32,3 +32,4 @@ class SQLiteTask: def __init__(self, configuration, environment): self.__configuration = configuration self.__environment = environment +