mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 12:12:53 -06:00
WIP: Moving JobResults out of the admin panel
This commit is contained in:
parent
cbb3378d10
commit
06dea8ef3f
@ -87,27 +87,6 @@ class CustomFieldFilterSet(BaseFilterSet):
|
|||||||
Q(description__icontains=value)
|
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):
|
class CustomLinkFilterSet(BaseFilterSet):
|
||||||
q = django_filters.CharFilter(
|
q = django_filters.CharFilter(
|
||||||
method='search',
|
method='search',
|
||||||
@ -472,7 +451,8 @@ class JobResultFilterSet(BaseFilterSet):
|
|||||||
if not value.strip():
|
if not value.strip():
|
||||||
return queryset
|
return queryset
|
||||||
return queryset.filter(
|
return queryset.filter(
|
||||||
Q(user__username__icontains=value)
|
Q(user__username__icontains=value) |
|
||||||
|
Q(name__icontains=value)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -518,8 +518,7 @@ class JobResult(models.Model):
|
|||||||
return str(self.job_id)
|
return str(self.job_id)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
# TODO: Fix this to point the right place
|
return reverse('extras:jobresult', args=[self.pk])
|
||||||
return reverse('virtualization:clustertype', args=[self.pk])
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def duration(self):
|
def duration(self):
|
||||||
|
@ -48,12 +48,9 @@ class JobResultTable(NetBoxTable):
|
|||||||
name = tables.Column(
|
name = tables.Column(
|
||||||
linkify=True
|
linkify=True
|
||||||
)
|
)
|
||||||
#obj_type = columns.ContentTypesColumn()
|
|
||||||
required = columns.BooleanColumn()
|
|
||||||
ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility")
|
|
||||||
|
|
||||||
actions = columns.ActionsColumn(
|
actions = columns.ActionsColumn(
|
||||||
actions=() # TODO: Delete
|
actions=('delete',)
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta(NetBoxTable.Meta):
|
class Meta(NetBoxTable.Meta):
|
||||||
|
@ -104,8 +104,10 @@ urlpatterns = [
|
|||||||
re_path(r'^reports/(?P<module>.([^.]+)).(?P<name>.(.+))/', views.ReportView.as_view(), name='report'),
|
re_path(r'^reports/(?P<module>.([^.]+)).(?P<name>.(.+))/', views.ReportView.as_view(), name='report'),
|
||||||
|
|
||||||
# Job results
|
# Job results
|
||||||
path('job-results/', views.JobResultListView.as_view(), name='jobresult_view'),
|
path('job-results/', views.JobResultListView.as_view(), name='jobresult_list'),
|
||||||
# path('custom-fields/<int:pk>/', views.CustomFieldView.as_view(), name='customfield'),
|
path('job-results/<int:pk>/', views.JobResultView.as_view(), name='jobresult'),
|
||||||
|
path('job-results/delete/', views.JobResultBulkDeleteView.as_view(), name='jobresult_bulk_delete'),
|
||||||
|
path('job-results/<int:pk>/delete/', views.JobResultDeleteView.as_view(), name='jobresult_delete'),
|
||||||
|
|
||||||
# Scripts
|
# Scripts
|
||||||
path('scripts/', views.ScriptListView.as_view(), name='script_list'),
|
path('scripts/', views.ScriptListView.as_view(), name='script_list'),
|
||||||
|
@ -781,8 +781,22 @@ class ScriptResultView(ContentTypePermissionRequiredMixin, GetScriptMixin, View)
|
|||||||
# Job results
|
# Job results
|
||||||
#
|
#
|
||||||
|
|
||||||
|
class JobResultView(generic.ObjectView):
|
||||||
|
queryset = JobResult.objects.all()
|
||||||
|
|
||||||
|
|
||||||
class JobResultListView(generic.ObjectListView):
|
class JobResultListView(generic.ObjectListView):
|
||||||
queryset = JobResult.objects.all()
|
queryset = JobResult.objects.all()
|
||||||
filterset = filtersets.JobResultFilterSet
|
filterset = filtersets.JobResultFilterSet
|
||||||
filterset_form = forms.JobResultFilterForm
|
filterset_form = forms.JobResultFilterForm
|
||||||
table = tables.JobResultTable
|
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
|
@ -375,6 +375,11 @@ OTHER_MENU = Menu(
|
|||||||
link_text='Scripts',
|
link_text='Scripts',
|
||||||
permissions=['extras.view_script']
|
permissions=['extras.view_script']
|
||||||
),
|
),
|
||||||
|
MenuItem(
|
||||||
|
link='extras:jobresult_list',
|
||||||
|
link_text='Job Results',
|
||||||
|
permissions=['extras.view_jobresult'],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
MenuGroup(
|
MenuGroup(
|
||||||
|
60
netbox/templates/extras/jobresult.html
Normal file
60
netbox/templates/extras/jobresult.html
Normal file
@ -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 %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<h5 class="card-header">
|
||||||
|
Tag
|
||||||
|
</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<table class="table table-hover panel-body attr-table">
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Name</th>
|
||||||
|
<td>
|
||||||
|
{{ object.name }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Created</th>
|
||||||
|
<td>
|
||||||
|
{{ object.created|annotated_date }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Completed</th>
|
||||||
|
<td>
|
||||||
|
{{ object.completed|annotated_date }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<h5 class="card-header">
|
||||||
|
TODO
|
||||||
|
</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<table class="table table-hover panel-body attr-table">
|
||||||
|
TODO
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-md-12">
|
||||||
|
{% plugin_full_width_page object %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user