mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 18:08:38 -06:00
Moved ReportResult creation into Report.run()
This commit is contained in:
parent
2fbb39bf6f
commit
571b817f04
@ -153,14 +153,9 @@ class ReportViewSet(ViewSet):
|
|||||||
if not request.user.has_perm('extras.add_reportresult'):
|
if not request.user.has_perm('extras.add_reportresult'):
|
||||||
raise PermissionDenied("This user does not have permission to run reports.")
|
raise PermissionDenied("This user does not have permission to run reports.")
|
||||||
|
|
||||||
# Retrieve and run the Report.
|
# Retrieve and run the Report. This will create a new ReportResult.
|
||||||
report = self._retrieve_report(pk)
|
report = self._retrieve_report(pk)
|
||||||
result = report.run()
|
report.run()
|
||||||
|
|
||||||
# Delete the old ReportResult (if any) and save the new one.
|
|
||||||
ReportResult.objects.filter(report=pk).delete()
|
|
||||||
report.result = ReportResult(report=pk, failed=report.failed, data=result)
|
|
||||||
report.result.save()
|
|
||||||
|
|
||||||
serializer = serializers.ReportDetailSerializer(report)
|
serializer = serializers.ReportDetailSerializer(report)
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import pkgutil
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_LEVEL_CODES, LOG_SUCCESS, LOG_WARNING
|
from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_LEVEL_CODES, LOG_SUCCESS, LOG_WARNING
|
||||||
|
from .models import ReportResult
|
||||||
import reports as custom_reports
|
import reports as custom_reports
|
||||||
|
|
||||||
|
|
||||||
@ -34,8 +35,8 @@ def get_reports():
|
|||||||
Compile a list of all reports available across all modules in the reports path. Returns a list of tuples:
|
Compile a list of all reports available across all modules in the reports path. Returns a list of tuples:
|
||||||
|
|
||||||
[
|
[
|
||||||
(module_name, (report_class, report_class, report_class, ...)),
|
(module_name, (report, report, report, ...)),
|
||||||
(module_name, (report_class, report_class, report_class, ...)),
|
(module_name, (report, report, report, ...)),
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
@ -56,7 +57,7 @@ class Report(object):
|
|||||||
NetBox users can extend this object to write custom reports to be used for validating data within NetBox. Each
|
NetBox users can extend this object to write custom reports to be used for validating data within NetBox. Each
|
||||||
report must have one or more test methods named `test_*`.
|
report must have one or more test methods named `test_*`.
|
||||||
|
|
||||||
The `results` attribute of a completed report will take the following form:
|
The `_results` attribute of a completed report will take the following form:
|
||||||
|
|
||||||
{
|
{
|
||||||
'test_bar': {
|
'test_bar': {
|
||||||
@ -79,7 +80,7 @@ class Report(object):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
self.results = OrderedDict()
|
self._results = OrderedDict()
|
||||||
self.active_test = None
|
self.active_test = None
|
||||||
self.failed = False
|
self.failed = False
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ class Report(object):
|
|||||||
for method in dir(self):
|
for method in dir(self):
|
||||||
if method.startswith('test_') and callable(getattr(self, method)):
|
if method.startswith('test_') and callable(getattr(self, method)):
|
||||||
test_methods.append(method)
|
test_methods.append(method)
|
||||||
self.results[method] = OrderedDict([
|
self._results[method] = OrderedDict([
|
||||||
('success', 0),
|
('success', 0),
|
||||||
('info', 0),
|
('info', 0),
|
||||||
('warning', 0),
|
('warning', 0),
|
||||||
@ -118,7 +119,7 @@ class Report(object):
|
|||||||
if level not in LOG_LEVEL_CODES:
|
if level not in LOG_LEVEL_CODES:
|
||||||
raise Exception("Unknown logging level: {}".format(level))
|
raise Exception("Unknown logging level: {}".format(level))
|
||||||
logline = [timezone.now().isoformat(), level, str(obj), message]
|
logline = [timezone.now().isoformat(), level, str(obj), message]
|
||||||
self.results[self.active_test]['log'].append(logline)
|
self._results[self.active_test]['log'].append(logline)
|
||||||
|
|
||||||
def log_success(self, obj, message=None):
|
def log_success(self, obj, message=None):
|
||||||
"""
|
"""
|
||||||
@ -126,28 +127,28 @@ 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
|
||||||
|
|
||||||
def log_info(self, obj, message):
|
def log_info(self, obj, message):
|
||||||
"""
|
"""
|
||||||
Log an informational message.
|
Log an informational message.
|
||||||
"""
|
"""
|
||||||
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
|
||||||
|
|
||||||
def log_warning(self, obj, message):
|
def log_warning(self, obj, message):
|
||||||
"""
|
"""
|
||||||
Log a warning.
|
Log a warning.
|
||||||
"""
|
"""
|
||||||
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
|
||||||
|
|
||||||
def log_failure(self, obj, message):
|
def log_failure(self, obj, message):
|
||||||
"""
|
"""
|
||||||
Log a failure. Calling this method will automatically mark the report as failed.
|
Log a failure. Calling this method will automatically mark the report as failed.
|
||||||
"""
|
"""
|
||||||
self._log(obj, message, level=LOG_FAILURE)
|
self._log(obj, message, level=LOG_FAILURE)
|
||||||
self.results[self.active_test]['failed'] += 1
|
self._results[self.active_test]['failed'] += 1
|
||||||
self.failed = True
|
self.failed = True
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
@ -159,4 +160,8 @@ class Report(object):
|
|||||||
test_method = getattr(self, method_name)
|
test_method = getattr(self, method_name)
|
||||||
test_method()
|
test_method()
|
||||||
|
|
||||||
return self.results
|
# Delete any previous ReportResult and create a new one to record the result.
|
||||||
|
ReportResult.objects.filter(report=self.full_name).delete()
|
||||||
|
result = ReportResult(report=self.full_name, failed=self.failed, data=self._results)
|
||||||
|
result.save()
|
||||||
|
self.result = result
|
||||||
|
Loading…
Reference in New Issue
Block a user