diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index ba4192b56..fac44a530 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -1,6 +1,7 @@ from collections import OrderedDict import inspect import pkgutil +import time from django import forms from django.conf import settings @@ -220,10 +221,14 @@ def run_script(script, data, commit=True): exists outside of the Script class to ensure it cannot be overridden by a script author. """ output = None + start_time = None + end_time = None try: with transaction.atomic(): + start_time = time.time() output = script.run(data) + end_time = time.time() if not commit: raise AbortTransaction() except AbortTransaction: @@ -239,7 +244,13 @@ def run_script(script, data, commit=True): "Database changes have been reverted automatically." ) - return output + # Calculate execution time + if end_time is not None: + execution_time = end_time - start_time + else: + execution_time = None + + return output, execution_time def get_scripts(): diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 6b87c27de..6ef68b995 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -402,14 +402,16 @@ class ScriptView(PermissionRequiredMixin, View): script = self._get_script(module, name) form = script.as_form(request.POST) output = None + execution_time = None if form.is_valid(): commit = form.cleaned_data.pop('_commit') - run_script(script, form.cleaned_data, commit) + output, execution_time = run_script(script, form.cleaned_data, commit) return render(request, 'extras/script.html', { 'module': module, 'script': script, 'form': form, 'output': output, + 'execution_time': execution_time, }) diff --git a/netbox/templates/extras/script.html b/netbox/templates/extras/script.html index 454a2b582..c2b9bd205 100644 --- a/netbox/templates/extras/script.html +++ b/netbox/templates/extras/script.html @@ -30,12 +30,12 @@
{% log_level level %} | {{ message }} | |
+ No log output + | +