diff --git a/netbox/core/api/serializers_/jobs.py b/netbox/core/api/serializers_/jobs.py index 26726ebdd..5693a8099 100644 --- a/netbox/core/api/serializers_/jobs.py +++ b/netbox/core/api/serializers_/jobs.py @@ -31,7 +31,8 @@ class JobSerializer(BaseModelSerializer): model = Job fields = [ 'id', 'url', 'display_url', 'display', 'object_type', 'object_id', 'object', 'name', 'status', 'created', - 'scheduled', 'interval', 'started', 'completed', 'user', 'data', 'error', 'job_id', 'log_entries', + 'scheduled', 'interval', 'started', 'completed', 'user', 'data', 'error', 'job_id', 'queue_name', + 'log_entries', ] brief_fields = ('url', 'created', 'completed', 'user', 'status') diff --git a/netbox/core/filtersets.py b/netbox/core/filtersets.py index a531c051e..5064ed580 100644 --- a/netbox/core/filtersets.py +++ b/netbox/core/filtersets.py @@ -129,10 +129,16 @@ class JobFilterSet(BaseFilterSet): choices=JobStatusChoices, null_value=None ) + queue_name = django_filters.CharFilter( + lookup_expr='icontains' + ) class Meta: model = Job - fields = ('id', 'object_type', 'object_type_id', 'object_id', 'name', 'interval', 'status', 'user', 'job_id') + fields = ( + 'id', 'object_type', 'object_type_id', 'object_id', 'name', 'interval', 'status', 'user', 'job_id', + 'queue_name', + ) def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/core/forms/filtersets.py b/netbox/core/forms/filtersets.py index 69e6a4fbb..adaddfaa2 100644 --- a/netbox/core/forms/filtersets.py +++ b/netbox/core/forms/filtersets.py @@ -71,7 +71,7 @@ class JobFilterForm(SavedFiltersMixin, FilterForm): model = Job fieldsets = ( FieldSet('q', 'filter_id'), - FieldSet('object_type_id', 'status', name=_('Attributes')), + FieldSet('object_type_id', 'status', 'queue_name', name=_('Attributes')), FieldSet( 'created__before', 'created__after', 'scheduled__before', 'scheduled__after', 'started__before', 'started__after', 'completed__before', 'completed__after', 'user', name=_('Creation') @@ -87,6 +87,10 @@ class JobFilterForm(SavedFiltersMixin, FilterForm): choices=JobStatusChoices, required=False ) + queue_name = forms.CharField( + label=_('Queue'), + required=False + ) created__after = forms.DateTimeField( label=_('Created after'), required=False, diff --git a/netbox/core/tables/jobs.py b/netbox/core/tables/jobs.py index 00032057f..3720baa39 100644 --- a/netbox/core/tables/jobs.py +++ b/netbox/core/tables/jobs.py @@ -42,6 +42,9 @@ class JobTable(NetBoxTable): completed = columns.DateTimeColumn( verbose_name=_('Completed'), ) + queue_name = tables.Column( + verbose_name=_('Queue'), + ) log_entries = tables.Column( verbose_name=_('Log Entries'), ) @@ -53,7 +56,7 @@ class JobTable(NetBoxTable): model = Job fields = ( 'pk', 'id', 'object_type', 'object', 'name', 'status', 'created', 'scheduled', 'interval', 'started', - 'completed', 'user', 'error', 'job_id', + 'completed', 'user', 'queue_name', 'log_entries', 'error', 'job_id', ) default_columns = ( 'pk', 'id', 'object_type', 'object', 'name', 'status', 'created', 'started', 'completed', 'user', diff --git a/netbox/templates/core/job.html b/netbox/templates/core/job.html index 3371f164e..48adf0319 100644 --- a/netbox/templates/core/job.html +++ b/netbox/templates/core/job.html @@ -59,6 +59,10 @@ {% trans "Completed" %} {{ object.completed|isodatetime|placeholder }} + + {% trans "Queue" %} + {{ object.queue_name|placeholder }} +