diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index 2a8f252aa..75463d871 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -138,11 +138,11 @@ These two methods will load data in YAML or JSON format, respectively, from file The Script object provides a set of convenient functions for recording messages at different severity levels: -* `log_debug(message, object=None)` -* `log_success(message, object=None)` -* `log_info(message, object=None)` -* `log_warning(message, object=None)` -* `log_failure(message, object=None)` +* `log_debug(message, obj=None)` +* `log_success(message, obj=None)` +* `log_info(message, obj=None)` +* `log_warning(message, obj=None)` +* `log_failure(message, obj=None)` Log messages are returned to the user upon execution of the script. Markdown rendering is supported for log messages. A message may optionally be associated with a particular object by passing it as the second argument to the logging method. diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index 0e74c3f0d..ae27aa0fb 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -500,6 +500,8 @@ class BaseScript: 'time': timezone.now().isoformat(), 'status': level, 'message': str(message), + 'obj': str(obj) if obj else None, + 'url': obj.get_absolute_url() if hasattr(obj, 'get_absolute_url') else None, }) # Record to the system log diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 8c78ad0de..a120f7f53 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -1,6 +1,7 @@ import json import django_tables2 as tables +from django.utils.html import format_html from django.utils.translation import gettext_lazy as _ from extras.models import * @@ -545,6 +546,9 @@ class ScriptResultsTable(BaseTable): template_code="""{% load log_levels %}{% log_level record.status %}""", verbose_name=_('Level') ) + object = tables.Column( + verbose_name=_('Object') + ) message = columns.MarkdownColumn( verbose_name=_('Message') ) @@ -552,8 +556,17 @@ class ScriptResultsTable(BaseTable): class Meta(BaseTable.Meta): empty_text = _(EMPTY_TABLE_TEXT) fields = ( - 'index', 'time', 'status', 'message', + 'index', 'time', 'status', 'object', 'message', ) + default_columns = ( + 'index', 'time', 'status', 'object', 'message', + ) + + def render_object(self, value, record): + return format_html("{}", record['url'], value) + + def render_url(self, value): + return format_html("{}", value, value) class ReportResultsTable(BaseTable): @@ -585,3 +598,9 @@ class ReportResultsTable(BaseTable): fields = ( 'index', 'method', 'time', 'status', 'object', 'url', 'message', ) + + def render_object(self, value, record): + return format_html("{}", record['url'], value) + + def render_url(self, value): + return format_html("{}", value, value) diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 82f519c00..b33c1e22a 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1201,6 +1201,8 @@ class ScriptResultView(TableMixin, generic.ObjectView): 'time': log.get('time'), 'status': log.get('status'), 'message': log.get('message'), + 'object': log.get('obj'), + 'url': log.get('url'), } data.append(result) diff --git a/netbox/templates/extras/script_result.html b/netbox/templates/extras/script_result.html index ccc7f4d23..1b297673b 100644 --- a/netbox/templates/extras/script_result.html +++ b/netbox/templates/extras/script_result.html @@ -44,7 +44,7 @@ {# Object table controls #}