import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler from django.core.management.base import BaseCommand # from core.db.storage import db # from core.models import NotificationRule from core.util import logs log = logs.get_logger("scheduling") # INTERVAL_CHOICES = ( # (0, "On demand"), # (60, "Every minute"), # (900, "Every 15 minutes"), # (1800, "Every 30 minutes"), # (3600, "Every hour"), # (14400, "Every 4 hours"), # (86400, "Every day"), # ) INTERVALS = [60, 900, 1800, 3600, 14400, 86400] async def job(interval_seconds): """ Run all schedules matching the given interval. :param interval_seconds: The interval to run. """ print("Running schedule", interval_seconds) # matching_rules = NotificationRule.objects.filter( # enabled=True, interval=interval_seconds # ) class Command(BaseCommand): def handle(self, *args, **options): """ Start the scheduling process. """ scheduler = AsyncIOScheduler() for interval in INTERVALS: log.debug(f"Scheduling {interval} second job") scheduler.add_job(job, "interval", seconds=interval, args=[interval]) scheduler.start() loop = asyncio.get_event_loop() try: loop.run_forever() except (KeyboardInterrupt, SystemExit): log.info("Process terminating") finally: loop.close()