diff --git a/netbox/extras/filtersets.py b/netbox/extras/filtersets.py index 25f1a04c9..aed8d4bb3 100644 --- a/netbox/extras/filtersets.py +++ b/netbox/extras/filtersets.py @@ -87,27 +87,6 @@ class CustomFieldFilterSet(BaseFilterSet): Q(description__icontains=value) ) -class JobResultFilterSet(BaseFilterSet): - q = django_filters.CharFilter( - method='search', - label='Search', - ) - - # TODO: Add filters - - class Meta: - model = JobResult - fields = [ - 'id', 'name', 'obj_type', 'created', 'completed', 'user', 'status' - ] - - def search(self, queryset, name, value): - if not value.strip(): - return queryset - return queryset.filter( - Q(name__icontains=value) - ) - class CustomLinkFilterSet(BaseFilterSet): q = django_filters.CharFilter( method='search', @@ -472,7 +451,8 @@ class JobResultFilterSet(BaseFilterSet): if not value.strip(): return queryset return queryset.filter( - Q(user__username__icontains=value) + Q(user__username__icontains=value) | + Q(name__icontains=value) ) diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index 574b51f70..51cd30dbf 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -518,8 +518,7 @@ class JobResult(models.Model): return str(self.job_id) def get_absolute_url(self): - # TODO: Fix this to point the right place - return reverse('virtualization:clustertype', args=[self.pk]) + return reverse('extras:jobresult', args=[self.pk]) @property def duration(self): @@ -560,7 +559,7 @@ class JobResult(models.Model): ) queue = django_rq.get_queue("default") - + if schedule_at := kwargs.pop("schedule_at", None): job_result.status = JobResultStatusChoices.STATUS_SCHEDULED job_result.save() diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 60e500da6..39f186ed6 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -48,12 +48,9 @@ class JobResultTable(NetBoxTable): name = tables.Column( linkify=True ) - #obj_type = columns.ContentTypesColumn() - required = columns.BooleanColumn() - ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility") actions = columns.ActionsColumn( - actions=() # TODO: Delete + actions=('delete',) ) class Meta(NetBoxTable.Meta): diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index 66d60133f..1d42211c4 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -104,8 +104,10 @@ urlpatterns = [ re_path(r'^reports/(?P.([^.]+)).(?P.(.+))/', views.ReportView.as_view(), name='report'), # Job results - path('job-results/', views.JobResultListView.as_view(), name='jobresult_view'), - # path('custom-fields//', views.CustomFieldView.as_view(), name='customfield'), + path('job-results/', views.JobResultListView.as_view(), name='jobresult_list'), + path('job-results//', views.JobResultView.as_view(), name='jobresult'), + path('job-results/delete/', views.JobResultBulkDeleteView.as_view(), name='jobresult_bulk_delete'), + path('job-results//delete/', views.JobResultDeleteView.as_view(), name='jobresult_delete'), # Scripts path('scripts/', views.ScriptListView.as_view(), name='script_list'), diff --git a/netbox/extras/views.py b/netbox/extras/views.py index bf122955e..8ffa1ce29 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -781,8 +781,22 @@ class ScriptResultView(ContentTypePermissionRequiredMixin, GetScriptMixin, View) # Job results # +class JobResultView(generic.ObjectView): + queryset = JobResult.objects.all() + + class JobResultListView(generic.ObjectListView): queryset = JobResult.objects.all() filterset = filtersets.JobResultFilterSet filterset_form = forms.JobResultFilterForm + table = tables.JobResultTable + actions = ('delete', 'bulk_delete', ) + +class JobResultDeleteView(generic.ObjectDeleteView): + queryset = JobResult.objects.all() + + +class JobResultBulkDeleteView(generic.BulkDeleteView): + queryset = JobResult.objects.all() + filterset = filtersets.JobResultFilterSet table = tables.JobResultTable \ No newline at end of file diff --git a/netbox/netbox/navigation_menu.py b/netbox/netbox/navigation_menu.py index a495f17c9..e82c07ca0 100644 --- a/netbox/netbox/navigation_menu.py +++ b/netbox/netbox/navigation_menu.py @@ -375,6 +375,11 @@ OTHER_MENU = Menu( link_text='Scripts', permissions=['extras.view_script'] ), + MenuItem( + link='extras:jobresult_list', + link_text='Job Results', + permissions=['extras.view_jobresult'], + ), ), ), MenuGroup( diff --git a/netbox/templates/extras/jobresult.html b/netbox/templates/extras/jobresult.html new file mode 100644 index 000000000..5f46dd6ac --- /dev/null +++ b/netbox/templates/extras/jobresult.html @@ -0,0 +1,60 @@ +{% extends 'generic/object.html' %} +{% load helpers %} +{% load plugins %} + +{% block title %}{{ object.name }} ({{object.job_id}}){% endblock %} + +{# JobResult does not support add/edit controls #} +{% block controls %}{% endblock %} +{% block subtitle %}{% endblock %} + +{% block content %} +
+
+
+
+ Tag +
+
+ + + + + + + + + + + + + +
Name + {{ object.name }} +
Created + {{ object.created|annotated_date }} +
Completed + {{ object.completed|annotated_date }} +
+
+
+
+
+
+
+ TODO +
+
+ + TODO +
+
+
+
+
+
+
+ {% plugin_full_width_page object %} +
+
+{% endblock %}