Add interval to JobResult

This commit is contained in:
jeremystretch 2022-12-02 15:37:16 -05:00
parent cb52d9c84e
commit d505c723dc
5 changed files with 33 additions and 23 deletions

View File

@ -385,8 +385,8 @@ class JobResultSerializer(BaseModelSerializer):
class Meta: class Meta:
model = JobResult model = JobResult
fields = [ fields = [
'id', 'url', 'display', 'status', 'created', 'scheduled', 'started', 'completed', 'name', 'obj_type', 'id', 'url', 'display', 'status', 'created', 'scheduled', 'interval', 'started', 'completed', 'name',
'user', 'data', 'job_id', 'obj_type', 'user', 'data', 'job_id',
] ]

View File

@ -17,10 +17,10 @@ __all__ = (
'ConfigContextFilterSet', 'ConfigContextFilterSet',
'ContentTypeFilterSet', 'ContentTypeFilterSet',
'CustomFieldFilterSet', 'CustomFieldFilterSet',
'JobResultFilterSet',
'CustomLinkFilterSet', 'CustomLinkFilterSet',
'ExportTemplateFilterSet', 'ExportTemplateFilterSet',
'ImageAttachmentFilterSet', 'ImageAttachmentFilterSet',
'JobResultFilterSet',
'JournalEntryFilterSet', 'JournalEntryFilterSet',
'LocalConfigContextFilterSet', 'LocalConfigContextFilterSet',
'ObjectChangeFilterSet', 'ObjectChangeFilterSet',
@ -537,7 +537,7 @@ class JobResultFilterSet(BaseFilterSet):
class Meta: class Meta:
model = JobResult model = JobResult
fields = ('id', 'status', 'user', 'obj_type', 'name') fields = ('id', 'interval', 'status', 'user', 'obj_type', 'name')
def search(self, queryset, name, value): def search(self, queryset, name, value):
if not value.strip(): if not value.strip():

View File

@ -13,6 +13,11 @@ class Migration(migrations.Migration):
name='scheduled', name='scheduled',
field=models.DateTimeField(blank=True, null=True), field=models.DateTimeField(blank=True, null=True),
), ),
migrations.AddField(
model_name='jobresult',
name='interval',
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AddField( migrations.AddField(
model_name='jobresult', model_name='jobresult',
name='started', name='started',

View File

@ -585,6 +585,11 @@ class JobResult(models.Model):
null=True, null=True,
blank=True blank=True
) )
interval = models.PositiveIntegerField(
blank=True,
null=True,
help_text=_("Recurrence interval (in minutes)")
)
started = models.DateTimeField( started = models.DateTimeField(
null=True, null=True,
blank=True blank=True
@ -662,32 +667,31 @@ class JobResult(models.Model):
self.completed = timezone.now() self.completed = timezone.now()
@classmethod @classmethod
def enqueue_job(cls, func, name, obj_type, user, schedule_at=None, *args, **kwargs): def enqueue_job(cls, func, name, obj_type, user, schedule_at=None, interval=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
Args:
func: The callable object to be enqueued for execution func: The callable object to be enqueued for execution
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 schedule_at: Schedule the job to be executed at the passed date and time
args: additional args passed to the callable interval: Recurrence interval (in minutes)
kwargs: additional kargs passed to the callable
""" """
job_result: JobResult = cls.objects.create( queue = django_rq.get_queue('default')
status = JobResultStatusChoices.STATUS_SCHEDULED if schedule_at else JobResultStatusChoices.STATUS_PENDING
job_result: JobResult = JobResult.objects.create(
name=name, name=name,
status=status,
obj_type=obj_type, obj_type=obj_type,
scheduled=schedule_at,
interval=interval,
user=user, user=user,
job_id=uuid.uuid4() job_id=uuid.uuid4()
) )
queue = django_rq.get_queue("default")
if schedule_at: if schedule_at:
job_result.status = JobResultStatusChoices.STATUS_SCHEDULED
job_result.scheduled = schedule_at
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)
else: else:
queue.enqueue(func, job_id=str(job_result.job_id), job_result=job_result, **kwargs) queue.enqueue(func, job_id=str(job_result.job_id), job_result=job_result, **kwargs)

View File

@ -8,9 +8,9 @@ from .template_code import *
__all__ = ( __all__ = (
'ConfigContextTable', 'ConfigContextTable',
'CustomFieldTable', 'CustomFieldTable',
'JobResultTable',
'CustomLinkTable', 'CustomLinkTable',
'ExportTemplateTable', 'ExportTemplateTable',
'JobResultTable',
'JournalEntryTable', 'JournalEntryTable',
'ObjectChangeTable', 'ObjectChangeTable',
'SavedFilterTable', 'SavedFilterTable',
@ -41,7 +41,6 @@ class JobResultTable(NetBoxTable):
name = tables.Column( name = tables.Column(
linkify=True linkify=True
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
actions=('delete',) actions=('delete',)
) )
@ -49,10 +48,12 @@ class JobResultTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = JobResult model = JobResult
fields = ( fields = (
'pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'started', 'completed', 'user', 'job_id', 'pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'interval', 'started', 'completed',
'user', 'job_id',
) )
default_columns = ( default_columns = (
'pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'started', 'completed', 'user', 'pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'interval', 'started', 'completed',
'user',
) )