mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-15 11:42:52 -06:00
Added scheduled_time field to JobResult model
This commit is contained in:
parent
ef0b455b05
commit
1d9808a92a
@ -437,6 +437,7 @@ class JobResultFilterSet(BaseFilterSet):
|
|||||||
)
|
)
|
||||||
created = django_filters.DateTimeFromToRangeFilter()
|
created = django_filters.DateTimeFromToRangeFilter()
|
||||||
completed = django_filters.DateTimeFromToRangeFilter()
|
completed = django_filters.DateTimeFromToRangeFilter()
|
||||||
|
scheduled_time = django_filters.DateTimeFromToRangeFilter()
|
||||||
status = django_filters.MultipleChoiceFilter(
|
status = django_filters.MultipleChoiceFilter(
|
||||||
choices=JobResultStatusChoices,
|
choices=JobResultStatusChoices,
|
||||||
null_value=None
|
null_value=None
|
||||||
@ -445,7 +446,7 @@ class JobResultFilterSet(BaseFilterSet):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = JobResult
|
model = JobResult
|
||||||
fields = [
|
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):
|
def search(self, queryset, name, value):
|
||||||
|
@ -70,7 +70,7 @@ class JobResultFilterForm(FilterForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, ('q',)),
|
(None, ('q',)),
|
||||||
('Attributes', ('obj_type', 'status')),
|
('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(
|
obj_type = ContentTypeChoiceField(
|
||||||
@ -99,6 +99,14 @@ class JobResultFilterForm(FilterForm):
|
|||||||
required=False,
|
required=False,
|
||||||
widget=DateTimePicker()
|
widget=DateTimePicker()
|
||||||
)
|
)
|
||||||
|
scheduled_time_after = forms.DateTimeField(
|
||||||
|
required=False,
|
||||||
|
widget=DateTimePicker()
|
||||||
|
)
|
||||||
|
scheduled_time_before = forms.DateTimeField(
|
||||||
|
required=False,
|
||||||
|
widget=DateTimePicker()
|
||||||
|
)
|
||||||
user = DynamicModelMultipleChoiceField(
|
user = DynamicModelMultipleChoiceField(
|
||||||
queryset=User.objects.all(),
|
queryset=User.objects.all(),
|
||||||
required=False,
|
required=False,
|
||||||
|
@ -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),
|
||||||
|
),
|
||||||
|
]
|
@ -505,6 +505,10 @@ class JobResult(models.Model):
|
|||||||
null=True,
|
null=True,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
|
scheduled_time = models.DateTimeField(
|
||||||
|
null=True,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
user = models.ForeignKey(
|
user = models.ForeignKey(
|
||||||
to=User,
|
to=User,
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
@ -587,6 +591,7 @@ class JobResult(models.Model):
|
|||||||
|
|
||||||
if schedule_at := kwargs.pop("schedule_at", None):
|
if schedule_at := kwargs.pop("schedule_at", None):
|
||||||
job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
|
job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
|
||||||
|
job_result.scheduled_time = schedule_at
|
||||||
job_result.save()
|
job_result.save()
|
||||||
|
|
||||||
queue.enqueue_at(schedule_at, func, job_id=str(job_result.job_id), job_result=job_result, **kwargs)
|
queue.enqueue_at(schedule_at, func, job_id=str(job_result.job_id), job_result=job_result, **kwargs)
|
||||||
|
@ -85,7 +85,6 @@ def run_report(job_result, *args, **kwargs):
|
|||||||
try:
|
try:
|
||||||
report.run(job_result)
|
report.run(job_result)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
|
||||||
job_result.set_status(JobResultStatusChoices.STATUS_ERRORED)
|
job_result.set_status(JobResultStatusChoices.STATUS_ERRORED)
|
||||||
job_result.save()
|
job_result.save()
|
||||||
logging.error(f"Error during execution of report {job_result.name}")
|
logging.error(f"Error during execution of report {job_result.name}")
|
||||||
|
@ -56,7 +56,7 @@ class JobResultTable(NetBoxTable):
|
|||||||
class Meta(NetBoxTable.Meta):
|
class Meta(NetBoxTable.Meta):
|
||||||
model = JobResult
|
model = JobResult
|
||||||
fields = (
|
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',)
|
default_columns = ('pk', 'id', 'name', 'obj_type', 'status', 'created', 'completed', 'user',)
|
||||||
|
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Initiated: <strong>{{ result.created|annotated_date }}</strong>
|
Initiated: <strong>{{ result.created|annotated_date }}</strong>
|
||||||
|
{% if result.scheduled_time %}
|
||||||
|
Scheduled for: <strong>{{ result.scheduled_time|annotated_date }}</strong>
|
||||||
|
{% endif %}
|
||||||
{% if result.completed %}
|
{% if result.completed %}
|
||||||
Duration: <strong>{{ result.duration }}</strong>
|
Duration: <strong>{{ result.duration }}</strong>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Initiated: <strong>{{ result.created|annotated_date }}</strong>
|
Initiated: <strong>{{ result.created|annotated_date }}</strong>
|
||||||
|
{% if result.scheduled_time %}
|
||||||
|
Scheduled for: <strong>{{ result.scheduled_time|annotated_date }}</strong>
|
||||||
|
{% endif %}
|
||||||
{% if result.completed %}
|
{% if result.completed %}
|
||||||
Duration: <strong>{{ result.duration }}</strong>
|
Duration: <strong>{{ result.duration }}</strong>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
<span class="badge bg-danger">Errored</span>
|
<span class="badge bg-danger">Errored</span>
|
||||||
{% elif result.status == 'pending' %}
|
{% elif result.status == 'pending' %}
|
||||||
<span class="badge bg-info">Pending</span>
|
<span class="badge bg-info">Pending</span>
|
||||||
|
{% elif result.status == 'scheduled' %}
|
||||||
|
<span class="badge bg-info">Scheduled</span>
|
||||||
{% elif result.status == 'running' %}
|
{% elif result.status == 'running' %}
|
||||||
<span class="badge bg-warning">Running</span>
|
<span class="badge bg-warning">Running</span>
|
||||||
{% elif result.status == 'completed' %}
|
{% elif result.status == 'completed' %}
|
||||||
|
Loading…
Reference in New Issue
Block a user