diff --git a/common/management/commands/cron.py b/common/management/commands/cron.py index 77168760..3efb3230 100644 --- a/common/management/commands/cron.py +++ b/common/management/commands/cron.py @@ -1,11 +1,25 @@ +import random +from time import sleep + from django.core.management.base import BaseCommand from loguru import logger from catalog.jobs import * # noqa -from common.models import JobManager +from common.models import BaseJob, JobManager from mastodon.jobs import * # noqa from users.jobs import * # noqa +# @JobManager.register +# class DummyJob(BaseJob): +# interval = timedelta(seconds=10) + +# def run(self): +# logger.info("Dummy job started") +# if random.choice([0, 1]) == 0: +# raise Exception("Dummy job randomly failed") +# sleep(3) +# logger.info("Dummy job stopped") + class Command(BaseCommand): help = "Schedule timed jobs" diff --git a/common/management/commands/jobs.py b/common/management/commands/jobs.py index 011c4129..23b497ac 100644 --- a/common/management/commands/jobs.py +++ b/common/management/commands/jobs.py @@ -42,4 +42,4 @@ class Command(BaseCommand): self.style.SUCCESS(f"{registry.key} {repr(job)}") ) except Exception as e: - print(f"Error fetching {registry.key} {job_id}") + print(f"Fetching {registry.key} {job_id} error: {e}") diff --git a/common/models.py b/common/models.py index 874a2e01..61370359 100644 --- a/common/models.py +++ b/common/models.py @@ -7,7 +7,7 @@ from rq.registry import ScheduledJobRegistry class BaseJob: - interval = timedelta(hours=1) + interval = timedelta(hours=1) # don't set it less than 1 minute @classmethod def cancel(cls): @@ -27,7 +27,12 @@ class BaseJob: job_id = cls.__name__ logger.info(f"Scheduling job: {job_id} in {cls.interval}") django_rq.get_queue("cron").enqueue_in( - cls.interval, cls._run, job_id=job_id, result_ttl=0, failure_ttl=0 + cls.interval, + cls._run, + job_id=job_id, + result_ttl=-1, + failure_ttl=-1, + job_timeout=cls.interval.seconds - 5, ) @classmethod