diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 005f6863db..7162299e73 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -1,3 +1,5 @@ +from extras.choices import LogLevelChoices + # Events EVENT_CREATE = 'create' EVENT_UPDATE = 'update' @@ -135,3 +137,12 @@ } }, ] + +LOG_LEVEL_RANK = { + LogLevelChoices.LOG_DEFAULT: 0, + LogLevelChoices.LOG_DEBUG: 1, + LogLevelChoices.LOG_SUCCESS: 2, + LogLevelChoices.LOG_INFO: 3, + LogLevelChoices.LOG_WARNING: 4, + LogLevelChoices.LOG_FAILURE: 5, +} diff --git a/netbox/extras/views.py b/netbox/extras/views.py index c902b1499a..638c56677e 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -14,6 +14,7 @@ from core.models import Job from core.tables import JobTable from dcim.models import Device, DeviceRole, Platform +from extras.choices import LogLevelChoices from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm from extras.dashboard.utils import get_widget_class from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -30,6 +31,7 @@ from utilities.views import ContentTypePermissionRequiredMixin, get_viewname, register_model_view from virtualization.models import VirtualMachine from . import filtersets, forms, tables +from .constants import LOG_LEVEL_RANK from .models import * from .scripts import run_script from .tables import ReportResultsTable, ScriptResultsTable @@ -1119,22 +1121,27 @@ def get_table(self, job, request, bulk_actions=True): tests = None table = None index = 0 + + log_threshold = LOG_LEVEL_RANK.get(request.GET.get('log_threshold', LogLevelChoices.LOG_DEFAULT)) if job.data: + if 'log' in job.data: if 'tests' in job.data: tests = job.data['tests'] for log in job.data['log']: - index += 1 - result = { - 'index': index, - 'time': log.get('time'), - 'status': log.get('status'), - 'message': log.get('message'), - 'object': log.get('obj'), - 'url': log.get('url'), - } - data.append(result) + log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_DEFAULT) + if log_level >= log_threshold: + index += 1 + result = { + 'index': index, + 'time': log.get('time'), + 'status': log.get('status'), + 'message': log.get('message'), + 'object': log.get('obj'), + 'url': log.get('url'), + } + data.append(result) table = ScriptResultsTable(data, user=request.user) table.configure(request) @@ -1146,17 +1153,19 @@ def get_table(self, job, request, bulk_actions=True): for method, test_data in tests.items(): if 'log' in test_data: for time, status, obj, url, message in test_data['log']: - index += 1 - result = { - 'index': index, - 'method': method, - 'time': time, - 'status': status, - 'object': obj, - 'url': url, - 'message': message, - } - data.append(result) + log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_DEFAULT) + if log_level >= log_threshold: + index += 1 + result = { + 'index': index, + 'method': method, + 'time': time, + 'status': status, + 'object': obj, + 'url': url, + 'message': message, + } + data.append(result) table = ReportResultsTable(data, user=request.user) table.configure(request) @@ -1174,6 +1183,8 @@ def get(self, request, **kwargs): 'script': job.object, 'job': job, 'table': table, + 'log_levels': dict(LogLevelChoices), + 'log_threshold': request.GET.get('log_threshold', LogLevelChoices.LOG_DEFAULT) } if job.data and 'log' in job.data: diff --git a/netbox/templates/extras/script_result.html b/netbox/templates/extras/script_result.html index 1b297673b6..40be0456e0 100644 --- a/netbox/templates/extras/script_result.html +++ b/netbox/templates/extras/script_result.html @@ -42,8 +42,26 @@
{# Object table controls #} -
-
+
+
{% trans "Log threshold" %}
+ +
+ +
+ +
{% if request.user.is_authenticated and job.completed %}