Просмотр исходного кода

Enable system logging for reports

Jeremy Stretch 6 лет назад
Родитель
Сommit
9df2769383
2 измененных файлов с 16 добавлено и 0 удалено
  1. 1 0
      docs/configuration/logging.md
  2. 15 0
      netbox/extras/reports.py

+ 1 - 0
docs/configuration/logging.md

@@ -6,5 +6,6 @@
 |---------------------------------|--------------------------------------------------------|
 |---------------------------------|--------------------------------------------------------|
 | `netbox.auth.*`                 | Authentication events                                  |
 | `netbox.auth.*`                 | Authentication events                                  |
 | `netbox.api.views.*`            | Views which handle business logic for the REST API     |
 | `netbox.api.views.*`            | Views which handle business logic for the REST API     |
+| `netbox.reports.*`              | Reports (`module.name`)                                |
 | `netbox.scripts.*`              | Custom scripts (`module.name`)                         |
 | `netbox.scripts.*`              | Custom scripts (`module.name`)                         |
 | `netbox.views.*`                | Views which handle business logic for the web UI       |
 | `netbox.views.*`                | Views which handle business logic for the web UI       |

+ 15 - 0
netbox/extras/reports.py

@@ -1,5 +1,6 @@
 import importlib
 import importlib
 import inspect
 import inspect
+import logging
 import pkgutil
 import pkgutil
 from collections import OrderedDict
 from collections import OrderedDict
 
 
@@ -91,6 +92,8 @@ class Report(object):
         self.active_test = None
         self.active_test = None
         self.failed = False
         self.failed = False
 
 
+        self.logger = logging.getLogger(f"netbox.reports.{self.module}.{self.name}")
+
         # Compile test methods and initialize results skeleton
         # Compile test methods and initialize results skeleton
         test_methods = []
         test_methods = []
         for method in dir(self):
         for method in dir(self):
@@ -138,6 +141,7 @@ class Report(object):
         Log a message which is not associated with a particular object.
         Log a message which is not associated with a particular object.
         """
         """
         self._log(None, message, level=LOG_DEFAULT)
         self._log(None, message, level=LOG_DEFAULT)
+        self.logger.info(message)
 
 
     def log_success(self, obj, message=None):
     def log_success(self, obj, message=None):
         """
         """
@@ -146,6 +150,7 @@ class Report(object):
         if message:
         if message:
             self._log(obj, message, level=LOG_SUCCESS)
             self._log(obj, message, level=LOG_SUCCESS)
         self._results[self.active_test]['success'] += 1
         self._results[self.active_test]['success'] += 1
+        self.logger.info(f"Success | {obj}: {message}")
 
 
     def log_info(self, obj, message):
     def log_info(self, obj, message):
         """
         """
@@ -153,6 +158,7 @@ class Report(object):
         """
         """
         self._log(obj, message, level=LOG_INFO)
         self._log(obj, message, level=LOG_INFO)
         self._results[self.active_test]['info'] += 1
         self._results[self.active_test]['info'] += 1
+        self.logger.info(f"Info | {obj}: {message}")
 
 
     def log_warning(self, obj, message):
     def log_warning(self, obj, message):
         """
         """
@@ -160,6 +166,7 @@ class Report(object):
         """
         """
         self._log(obj, message, level=LOG_WARNING)
         self._log(obj, message, level=LOG_WARNING)
         self._results[self.active_test]['warning'] += 1
         self._results[self.active_test]['warning'] += 1
+        self.logger.info(f"Warning | {obj}: {message}")
 
 
     def log_failure(self, obj, message):
     def log_failure(self, obj, message):
         """
         """
@@ -167,12 +174,15 @@ class Report(object):
         """
         """
         self._log(obj, message, level=LOG_FAILURE)
         self._log(obj, message, level=LOG_FAILURE)
         self._results[self.active_test]['failure'] += 1
         self._results[self.active_test]['failure'] += 1
+        self.logger.info(f"Failure | {obj}: {message}")
         self.failed = True
         self.failed = True
 
 
     def run(self):
     def run(self):
         """
         """
         Run the report and return its results. Each test method will be executed in order.
         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:
         for method_name in self.test_methods:
             self.active_test = method_name
             self.active_test = method_name
             test_method = getattr(self, method_name)
             test_method = getattr(self, method_name)
@@ -184,6 +194,11 @@ class Report(object):
         result.save()
         result.save()
         self.result = result
         self.result = result
 
 
+        if self.failed:
+            self.logger.warning("Report failed")
+        else:
+            self.logger.info("Report completed successfully")
+
         # Perform any post-run tasks
         # Perform any post-run tasks
         self.post_run()
         self.post_run()