1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Added scheduled_time field to JobResult model

This commit is contained in:
kkthxbye-code
2022-10-16 13:42:28 +02:00
parent ef0b455b05
commit 1d9808a92a
9 changed files with 43 additions and 4 deletions

View File

@ -437,6 +437,7 @@ class JobResultFilterSet(BaseFilterSet):
)
created = django_filters.DateTimeFromToRangeFilter()
completed = django_filters.DateTimeFromToRangeFilter()
scheduled_time = django_filters.DateTimeFromToRangeFilter()
status = django_filters.MultipleChoiceFilter(
choices=JobResultStatusChoices,
null_value=None
@ -445,7 +446,7 @@ class JobResultFilterSet(BaseFilterSet):
class Meta:
model = JobResult
fields = [
'id', 'created', 'completed', 'status', 'user', 'obj_type', 'name'
'id', 'created', 'completed', 'scheduled_time', 'status', 'user', 'obj_type', 'name'
]
def search(self, queryset, name, value):

View File

@ -70,7 +70,7 @@ class JobResultFilterForm(FilterForm):
fieldsets = (
(None, ('q',)),
('Attributes', ('obj_type', 'status')),
('Creation', ('created_before', 'created_after', 'completed_before', 'completed_after', 'user')),
('Creation', ('created_before', 'created_after', 'completed_before', 'completed_after', 'scheduled_time_before', 'scheduled_time_after', 'user')),
)
obj_type = ContentTypeChoiceField(
@ -99,6 +99,14 @@ class JobResultFilterForm(FilterForm):
required=False,
widget=DateTimePicker()
)
scheduled_time_after = forms.DateTimeField(
required=False,
widget=DateTimePicker()
)
scheduled_time_before = forms.DateTimeField(
required=False,
widget=DateTimePicker()
)
user = DynamicModelMultipleChoiceField(
queryset=User.objects.all(),
required=False,

View File

@ -0,0 +1,18 @@
# Generated by Django 4.1.1 on 2022-10-16 09:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('extras', '0079_change_jobresult_order'),
]
operations = [
migrations.AddField(
model_name='jobresult',
name='scheduled_time',
field=models.DateTimeField(blank=True, null=True),
),
]

View File

@ -505,6 +505,10 @@ class JobResult(models.Model):
null=True,
blank=True
)
scheduled_time = models.DateTimeField(
null=True,
blank=True
)
user = models.ForeignKey(
to=User,
on_delete=models.SET_NULL,
@ -587,6 +591,7 @@ class JobResult(models.Model):
if schedule_at := kwargs.pop("schedule_at", None):
job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
job_result.scheduled_time = schedule_at
job_result.save()
queue.enqueue_at(schedule_at, func, job_id=str(job_result.job_id), job_result=job_result, **kwargs)

View File

@ -85,7 +85,6 @@ def run_report(job_result, *args, **kwargs):
try:
report.run(job_result)
except Exception as e:
print(e)
job_result.set_status(JobResultStatusChoices.STATUS_ERRORED)
job_result.save()
logging.error(f"Error during execution of report {job_result.name}")

View File

@ -56,7 +56,7 @@ class JobResultTable(NetBoxTable):
class Meta(NetBoxTable.Meta):
model = JobResult
fields = (
'pk', 'id', 'name', 'obj_type', 'job_id', 'created', 'completed', 'user', 'status',
'pk', 'id', 'name', 'obj_type', 'job_id', 'created', 'completed', 'scheduled_time', 'user', 'status',
)
default_columns = ('pk', 'id', 'name', 'obj_type', 'status', 'created', 'completed', 'user',)

View File

@ -2,6 +2,9 @@
<p>
Initiated: <strong>{{ result.created|annotated_date }}</strong>
{% if result.scheduled_time %}
Scheduled for: <strong>{{ result.scheduled_time|annotated_date }}</strong>
{% endif %}
{% if result.completed %}
Duration: <strong>{{ result.duration }}</strong>
{% endif %}

View File

@ -3,6 +3,9 @@
<p>
Initiated: <strong>{{ result.created|annotated_date }}</strong>
{% if result.scheduled_time %}
Scheduled for: <strong>{{ result.scheduled_time|annotated_date }}</strong>
{% endif %}
{% if result.completed %}
Duration: <strong>{{ result.duration }}</strong>
{% endif %}

View File

@ -4,6 +4,8 @@
<span class="badge bg-danger">Errored</span>
{% elif result.status == 'pending' %}
<span class="badge bg-info">Pending</span>
{% elif result.status == 'scheduled' %}
<span class="badge bg-info">Scheduled</span>
{% elif result.status == 'running' %}
<span class="badge bg-warning">Running</span>
{% elif result.status == 'completed' %}