mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 04:22:01 -06:00
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:
parent
82d8de32df
commit
5ac5135dbc
@ -1,3 +1,5 @@
|
||||
from extras.choices import LogLevelChoices
|
||||
|
||||
# Events
|
||||
EVENT_CREATE = 'create'
|
||||
EVENT_UPDATE = 'update'
|
||||
@ -135,3 +137,12 @@ DEFAULT_DASHBOARD = [
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
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,
|
||||
}
|
||||
|
@ -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,12 +1121,17 @@ 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']:
|
||||
log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_DEFAULT)
|
||||
if log_level >= log_threshold:
|
||||
index += 1
|
||||
result = {
|
||||
'index': index,
|
||||
@ -1146,6 +1153,8 @@ 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']:
|
||||
log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_DEFAULT)
|
||||
if log_level >= log_threshold:
|
||||
index += 1
|
||||
result = {
|
||||
'index': index,
|
||||
@ -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:
|
||||
|
@ -42,8 +42,26 @@
|
||||
<div class="tab-pane show active" id="results" role="tabpanel" aria-labelledby="results-tab">
|
||||
|
||||
{# Object table controls #}
|
||||
<div class="row mb-3">
|
||||
<div class="col-auto ms-auto d-print-none">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<div>{% trans "Log threshold" %}</div>
|
||||
|
||||
<div class="px-2 d-print-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{{ log_levels|get_key:log_threshold }}
|
||||
</button>
|
||||
<div class="dropdown-menu">
|
||||
{% for level, name in log_levels.items %}
|
||||
<a class="dropdown-item d-flex justify-content-between" href="{% url 'extras:script_result' job_pk=job.pk %}?log_threshold={{ level }}">
|
||||
{{ name }}
|
||||
{% if level == log_threshold %}<span class="badge bg-green ms-auto"></span>{% endif %}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ms-auto d-print-none">
|
||||
{% if request.user.is_authenticated and job.completed %}
|
||||
<div class="table-configure input-group">
|
||||
<button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}" data-bs-target="#ObjectTable_config"
|
||||
|
Loading…
Reference in New Issue
Block a user