2023-10-21 05:41:38 +00:00
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from loguru import logger
|
|
|
|
|
2025-01-11 17:20:02 -05:00
|
|
|
from common.models import JobManager
|
2023-10-21 05:41:38 +00:00
|
|
|
|
2023-11-11 20:33:55 -05:00
|
|
|
# @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")
|
|
|
|
|
2023-10-21 05:41:38 +00:00
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
help = "Schedule timed jobs"
|
|
|
|
|
|
|
|
def add_arguments(self, parser):
|
|
|
|
parser.add_argument(
|
2024-12-26 14:12:39 -05:00
|
|
|
"--cancel-all",
|
2023-10-21 05:41:38 +00:00
|
|
|
action="store_true",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
2024-12-26 14:12:39 -05:00
|
|
|
"--reschedule-all",
|
2023-10-21 05:41:38 +00:00
|
|
|
action="store_true",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"--list",
|
|
|
|
action="store_true",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
2024-12-26 14:12:39 -05:00
|
|
|
"--run-once",
|
|
|
|
action="append",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"--reschedule-now",
|
2023-10-21 05:41:38 +00:00
|
|
|
action="append",
|
|
|
|
)
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
2024-12-26 14:12:39 -05:00
|
|
|
if options["cancel_all"]:
|
2023-11-26 17:23:53 -05:00
|
|
|
JobManager.cancel_all()
|
2024-12-26 14:12:39 -05:00
|
|
|
if options["reschedule_all"]:
|
|
|
|
JobManager.reschedule_all()
|
|
|
|
if options["reschedule_now"]:
|
|
|
|
for job_id in options["reschedule_now"]:
|
|
|
|
JobManager.get(job_id).reschedule(now=True)
|
|
|
|
if options["run_once"]:
|
|
|
|
for job_id in options["run_once"]:
|
|
|
|
JobManager.get(job_id)().run()
|
2023-10-21 05:41:38 +00:00
|
|
|
if options["list"]:
|
2023-11-11 00:52:16 -05:00
|
|
|
all_jobs = [j.__name__ for j in JobManager.registry]
|
|
|
|
logger.info(f"{len(all_jobs)} available jobs: {' '.join(all_jobs)}")
|
2023-10-21 05:41:38 +00:00
|
|
|
jobs = JobManager.get_scheduled_job_ids()
|
2023-11-11 00:52:16 -05:00
|
|
|
logger.info(f"{len(jobs)} scheduled jobs: {' '.join(jobs)}")
|