Răsfoiți Sursa

Job scheduling review changes

kkthxbye-code 3 ani în urmă
părinte
comite
ed2f7f1236

+ 1 - 1
netbox/extras/management/commands/housekeeping.py

@@ -81,7 +81,7 @@ class Command(BaseCommand):
                         ending=""
                         ending=""
                     )
                     )
                     self.stdout.flush()
                     self.stdout.flush()
-                JobResult.objects.filter(created__lt=cutoff).delete(using=DEFAULT_DB_ALIAS)
+                JobResult.objects.filter(created__lt=cutoff).delete()
                 if options['verbosity']:
                 if options['verbosity']:
                     self.stdout.write("Done.", self.style.SUCCESS)
                     self.stdout.write("Done.", self.style.SUCCESS)
             elif options['verbosity']:
             elif options['verbosity']:

+ 3 - 2
netbox/extras/models/models.py

@@ -569,7 +569,7 @@ class JobResult(models.Model):
             self.completed = timezone.now()
             self.completed = timezone.now()
 
 
     @classmethod
     @classmethod
-    def enqueue_job(cls, func, name, obj_type, user, *args, **kwargs):
+    def enqueue_job(cls, func, name, obj_type, user, schedule_at=None, *args, **kwargs):
         """
         """
         Create a JobResult instance and enqueue a job using the given callable
         Create a JobResult instance and enqueue a job using the given callable
 
 
@@ -577,6 +577,7 @@ class JobResult(models.Model):
         name: Name for the JobResult instance
         name: Name for the JobResult instance
         obj_type: ContentType to link to the JobResult instance obj_type
         obj_type: ContentType to link to the JobResult instance obj_type
         user: User object to link to the JobResult instance
         user: User object to link to the JobResult instance
+        schedule_at: Schedule the job to be executed at the passed date and time
         args: additional args passed to the callable
         args: additional args passed to the callable
         kwargs: additional kargs passed to the callable
         kwargs: additional kargs passed to the callable
         """
         """
@@ -589,7 +590,7 @@ class JobResult(models.Model):
 
 
         queue = django_rq.get_queue("default")
         queue = django_rq.get_queue("default")
 
 
-        if schedule_at := kwargs.pop("schedule_at", None):
+        if schedule_at:
             job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
             job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
             job_result.scheduled_time = schedule_at
             job_result.scheduled_time = schedule_at
             job_result.save()
             job_result.save()

+ 23 - 23
netbox/extras/views.py

@@ -612,26 +612,30 @@ class ReportView(ContentTypePermissionRequiredMixin, View):
         if form.is_valid():
         if form.is_valid():
             schedule_at = form.cleaned_data.get("schedule_at")
             schedule_at = form.cleaned_data.get("schedule_at")
 
 
-        # Allow execution only if RQ worker process is running
-        if not Worker.count(get_connection('default')):
-            messages.error(request, "Unable to run report: RQ worker process not running.")
-            return render(request, 'extras/report.html', {
-                'report': report,
-            })
-
-        # Run the Report. A new JobResult is created.
-        report_content_type = ContentType.objects.get(app_label='extras', model='report')
-        job_result = JobResult.enqueue_job(
-            run_report,
-            report.full_name,
-            report_content_type,
-            request.user,
-            job_timeout=report.job_timeout,
-            schedule_at=schedule_at,
-        )
-
-        return redirect('extras:report_result', job_result_pk=job_result.pk)
+            # Allow execution only if RQ worker process is running
+            if not Worker.count(get_connection('default')):
+                messages.error(request, "Unable to run report: RQ worker process not running.")
+                return render(request, 'extras/report.html', {
+                    'report': report,
+                })
+
+            # Run the Report. A new JobResult is created.
+            report_content_type = ContentType.objects.get(app_label='extras', model='report')
+            job_result = JobResult.enqueue_job(
+                run_report,
+                report.full_name,
+                report_content_type,
+                request.user,
+                job_timeout=report.job_timeout,
+                schedule_at=schedule_at,
+            )
 
 
+            return redirect('extras:report_result', job_result_pk=job_result.pk)
+        
+        return render(request, 'extras/report.html', {
+            'report': report,
+            'form': form,
+        })
 
 
 class ReportResultView(ContentTypePermissionRequiredMixin, View):
 class ReportResultView(ContentTypePermissionRequiredMixin, View):
     """
     """
@@ -804,10 +808,6 @@ 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