Parcourir la source

Enable system logging for reports

Jeremy Stretch il y a 6 ans
Parent
commit
9df2769383
2 fichiers modifiés avec 16 ajouts et 0 suppressions
  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.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       |

+ 15 - 0
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()