8984 Allow script log to be filtered (#16446)

* 8984 filter by script log level

* 8984 filter log list

* 8984 add dropdown

* 8984 add dropdown

* 8984 fix button color

* Update netbox/extras/views.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 8984 review changes

* 8984 review changes

* 8984 review changes

* Clean up log threshold selector

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
Arthur Hanson
2024-07-01 13:04:29 -07:00
committed by GitHub
parent 82d8de32df
commit 5ac5135dbc
3 changed files with 63 additions and 23 deletions

View File

@@ -14,6 +14,7 @@ from core.forms import ManagedFileForm
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.templatetags.builtins.filters import render_markdown
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 @@ class ScriptResultView(TableMixin, generic.ObjectView):
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 @@ class ScriptResultView(TableMixin, generic.ObjectView):
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 @@ class ScriptResultView(TableMixin, generic.ObjectView):
'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: