diff --git a/netbox/extras/filtersets.py b/netbox/extras/filtersets.py index f7927a454..257cbdca9 100644 --- a/netbox/extras/filtersets.py +++ b/netbox/extras/filtersets.py @@ -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): diff --git a/netbox/extras/forms/filtersets.py b/netbox/extras/forms/filtersets.py index c40d0ce94..80ed0f208 100644 --- a/netbox/extras/forms/filtersets.py +++ b/netbox/extras/forms/filtersets.py @@ -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, diff --git a/netbox/extras/migrations/0080_add_jobresult_scheduled_time.py b/netbox/extras/migrations/0080_add_jobresult_scheduled_time.py new file mode 100644 index 000000000..fddde4bc5 --- /dev/null +++ b/netbox/extras/migrations/0080_add_jobresult_scheduled_time.py @@ -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), + ), + ] diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index e81c58136..83036d8a1 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -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) diff --git a/netbox/extras/reports.py b/netbox/extras/reports.py index 32e4efc2d..525608c86 100644 --- a/netbox/extras/reports.py +++ b/netbox/extras/reports.py @@ -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}") diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 6ddc26c3d..8f365a58b 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -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',) diff --git a/netbox/templates/extras/htmx/report_result.html b/netbox/templates/extras/htmx/report_result.html index c20bf5fe2..a51b2663d 100644 --- a/netbox/templates/extras/htmx/report_result.html +++ b/netbox/templates/extras/htmx/report_result.html @@ -2,6 +2,9 @@
Initiated: {{ result.created|annotated_date }} + {% if result.scheduled_time %} + Scheduled for: {{ result.scheduled_time|annotated_date }} + {% endif %} {% if result.completed %} Duration: {{ result.duration }} {% endif %} diff --git a/netbox/templates/extras/htmx/script_result.html b/netbox/templates/extras/htmx/script_result.html index 425f35898..d2af99c9b 100644 --- a/netbox/templates/extras/htmx/script_result.html +++ b/netbox/templates/extras/htmx/script_result.html @@ -3,6 +3,9 @@
Initiated: {{ result.created|annotated_date }} + {% if result.scheduled_time %} + Scheduled for: {{ result.scheduled_time|annotated_date }} + {% endif %} {% if result.completed %} Duration: {{ result.duration }} {% endif %} diff --git a/netbox/templates/extras/inc/job_label.html b/netbox/templates/extras/inc/job_label.html index d74931111..7ff788ede 100644 --- a/netbox/templates/extras/inc/job_label.html +++ b/netbox/templates/extras/inc/job_label.html @@ -4,6 +4,8 @@ Errored {% elif result.status == 'pending' %} Pending +{% elif result.status == 'scheduled' %} + Scheduled {% elif result.status == 'running' %} Running {% elif result.status == 'completed' %}