diff --git a/netbox/core/models/jobs.py b/netbox/core/models/jobs.py index 73bcd13d6..1d0eecd21 100644 --- a/netbox/core/models/jobs.py +++ b/netbox/core/models/jobs.py @@ -102,6 +102,7 @@ class Job(models.Model): return reverse(f'extras:report_result', kwargs={'job_pk': self.pk}) if self.object_type.model == 'scriptmodule': return reverse(f'extras:script_result', kwargs={'job_pk': self.pk}) + return reverse('core:job', args=[self.pk]) def get_status_color(self): return JobStatusChoices.colors.get(self.status) diff --git a/netbox/core/urls.py b/netbox/core/urls.py index b7d0e9915..1bd56c92b 100644 --- a/netbox/core/urls.py +++ b/netbox/core/urls.py @@ -22,6 +22,7 @@ urlpatterns = ( # Job results path('jobs/', views.JobListView.as_view(), name='job_list'), path('jobs/delete/', views.JobBulkDeleteView.as_view(), name='job_bulk_delete'), + path('jobs//', views.JobView.as_view(), name='job'), path('jobs//delete/', views.JobDeleteView.as_view(), name='job_delete'), ) diff --git a/netbox/core/views.py b/netbox/core/views.py index 65e9f09bc..9a5eb0702 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -127,7 +127,11 @@ class JobListView(generic.ObjectListView): filterset = filtersets.JobFilterSet filterset_form = forms.JobFilterForm table = tables.JobTable - actions = ('export', 'delete', 'bulk_delete', ) + actions = ('export', 'delete', 'bulk_delete') + + +class JobView(generic.ObjectView): + queryset = Job.objects.all() class JobDeleteView(generic.ObjectDeleteView): diff --git a/netbox/templates/core/job.html b/netbox/templates/core/job.html new file mode 100644 index 000000000..2a149b960 --- /dev/null +++ b/netbox/templates/core/job.html @@ -0,0 +1,81 @@ +{% extends 'generic/object.html' %} +{% load buttons %} +{% load helpers %} +{% load perms %} + +{% block controls %} +
+
+ {% if request.user|can_delete:object %} + {% delete_button object %} + {% endif %} +
+
+{% endblock controls %} + +{% block content %} +
+
+
+
Job
+
+ + + + + + + + + + + + + + + + + +
Object Type + {{ object.object_type }} +
Name{{ object.name|placeholder }}
Status{% badge object.get_status_display object.get_status_color %}
Created By{{ object.user|placeholder }}
+
+
+
+
+
+
Scheduling
+
+ + + + + + + + + + + + + + + + + +
Created{{ object.created|annotated_date }}
Scheduled{{ object.scheduled|annotated_date|placeholder }}{% if object.interval %} (every {{ object.interval }} seconds){% endif %}
Started{{ object.started|annotated_date|placeholder }}
Completed{{ object.completed|annotated_date|placeholder }}
+
+
+
+
+
+
+
+
Data
+
+
{{ object.data|json }}
+
+
+
+
+{% endblock %}