From 9df27693837674f5d9948d715063e62bb0d96c20 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 4 Mar 2020 14:22:30 -0500 Subject: [PATCH] Enable system logging for reports --- docs/configuration/logging.md | 1 + netbox/extras/reports.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/docs/configuration/logging.md b/docs/configuration/logging.md index b5a771e87..e6a5d75cf 100644 --- a/docs/configuration/logging.md +++ b/docs/configuration/logging.md @@ -6,5 +6,6 @@ |---------------------------------|--------------------------------------------------------| | `netbox.auth.*` | Authentication events | | `netbox.api.views.*` | Views which handle business logic for the REST API | +| `netbox.reports.*` | Reports (`module.name`) | | `netbox.scripts.*` | Custom scripts (`module.name`) | | `netbox.views.*` | Views which handle business logic for the web UI | diff --git a/netbox/extras/reports.py b/netbox/extras/reports.py index 9027d6a4a..373acdde7 100644 --- a/netbox/extras/reports.py +++ b/netbox/extras/reports.py @@ -1,5 +1,6 @@ import importlib import inspect +import logging import pkgutil from collections import OrderedDict @@ -91,6 +92,8 @@ class Report(object): self.active_test = None self.failed = False + self.logger = logging.getLogger(f"netbox.reports.{self.module}.{self.name}") + # Compile test methods and initialize results skeleton test_methods = [] for method in dir(self): @@ -138,6 +141,7 @@ class Report(object): Log a message which is not associated with a particular object. """ self._log(None, message, level=LOG_DEFAULT) + self.logger.info(message) def log_success(self, obj, message=None): """ @@ -146,6 +150,7 @@ class Report(object): if message: self._log(obj, message, level=LOG_SUCCESS) self._results[self.active_test]['success'] += 1 + self.logger.info(f"Success | {obj}: {message}") def log_info(self, obj, message): """ @@ -153,6 +158,7 @@ class Report(object): """ self._log(obj, message, level=LOG_INFO) self._results[self.active_test]['info'] += 1 + self.logger.info(f"Info | {obj}: {message}") def log_warning(self, obj, message): """ @@ -160,6 +166,7 @@ class Report(object): """ self._log(obj, message, level=LOG_WARNING) self._results[self.active_test]['warning'] += 1 + self.logger.info(f"Warning | {obj}: {message}") def log_failure(self, obj, message): """ @@ -167,12 +174,15 @@ class Report(object): """ self._log(obj, message, level=LOG_FAILURE) self._results[self.active_test]['failure'] += 1 + self.logger.info(f"Failure | {obj}: {message}") self.failed = True def run(self): """ Run the report and return its results. Each test method will be executed in order. """ + self.logger.info(f"Running report") + for method_name in self.test_methods: self.active_test = method_name test_method = getattr(self, method_name) @@ -184,6 +194,11 @@ class Report(object): result.save() self.result = result + if self.failed: + self.logger.warning("Report failed") + else: + self.logger.info("Report completed successfully") + # Perform any post-run tasks self.post_run()