mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -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'):
|
||||
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)
|
||||
result = 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()
|
||||
report.run()
|
||||
|
||||
serializer = serializers.ReportDetailSerializer(report)
|
||||
|
||||
|
@ -6,6 +6,7 @@ import pkgutil
|
||||
from django.utils import timezone
|
||||
|
||||
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
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
[
|
||||
(module_name, (report_class, report_class, report_class, ...)),
|
||||
(module_name, (report_class, report_class, report_class, ...)),
|
||||
(module_name, (report, report, report, ...)),
|
||||
(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
|
||||
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': {
|
||||
@ -79,7 +80,7 @@ class Report(object):
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.results = OrderedDict()
|
||||
self._results = OrderedDict()
|
||||
self.active_test = None
|
||||
self.failed = False
|
||||
|
||||
@ -88,7 +89,7 @@ class Report(object):
|
||||
for method in dir(self):
|
||||
if method.startswith('test_') and callable(getattr(self, method)):
|
||||
test_methods.append(method)
|
||||
self.results[method] = OrderedDict([
|
||||
self._results[method] = OrderedDict([
|
||||
('success', 0),
|
||||
('info', 0),
|
||||
('warning', 0),
|
||||
@ -118,7 +119,7 @@ class Report(object):
|
||||
if level not in LOG_LEVEL_CODES:
|
||||
raise Exception("Unknown logging level: {}".format(level))
|
||||
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):
|
||||
"""
|
||||
@ -126,28 +127,28 @@ class Report(object):
|
||||
"""
|
||||
if message:
|
||||
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):
|
||||
"""
|
||||
Log an informational message.
|
||||
"""
|
||||
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):
|
||||
"""
|
||||
Log a 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):
|
||||
"""
|
||||
Log a failure. Calling this method will automatically mark the report as failed.
|
||||
"""
|
||||
self._log(obj, message, level=LOG_FAILURE)
|
||||
self.results[self.active_test]['failed'] += 1
|
||||
self._results[self.active_test]['failed'] += 1
|
||||
self.failed = True
|
||||
|
||||
def run(self):
|
||||
@ -159,4 +160,8 @@ class Report(object):
|
||||
test_method = getattr(self, method_name)
|
||||
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