""" Core app configuration """ from django.apps import AppConfig import logging logger = logging.getLogger(__name__) class CoreConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'core' def ready(self): """ Initialize APScheduler when Django starts """ from core.scheduler import scheduler, start_scheduler from links.tasks import ( schedule_pending_pages, schedule_pending_screenshots, retry_stuck_image_imports, flush_click_buffer, ) from apscheduler.triggers.interval import IntervalTrigger # Start the scheduler start_scheduler() # Read intervals from SiteSettings (fall back to 120s if DB not ready) try: from links.models import SiteSettings ss = SiteSettings.get() pages_interval = ss.schedule_pending_pages_interval or 120 screenshots_interval = ss.schedule_pending_screenshots_interval or 120 except Exception: pages_interval = 120 screenshots_interval = 120 # Add periodic job for checking pending pages scheduler.add_job( schedule_pending_pages, trigger=IntervalTrigger(seconds=pages_interval), id='schedule_pending_pages', replace_existing=True, ) logger.info(f"Scheduled periodic task: schedule_pending_pages (every {pages_interval}s)") # Add periodic job for recovering stuck screenshots scheduler.add_job( schedule_pending_screenshots, trigger=IntervalTrigger(seconds=screenshots_interval), id='schedule_pending_screenshots', replace_existing=True, ) logger.info(f"Scheduled periodic task: schedule_pending_screenshots (every {screenshots_interval}s)") # Add periodic job for retrying stuck image imports (every 5 minutes) scheduler.add_job( retry_stuck_image_imports, trigger=IntervalTrigger(seconds=300), id='retry_stuck_image_imports', replace_existing=True, ) logger.info("Scheduled periodic task: retry_stuck_image_imports (every 300s)") # Flush Redis-buffered click counts to the database (every 60 seconds) scheduler.add_job( flush_click_buffer, trigger=IntervalTrigger(seconds=60), id='flush_click_buffer', replace_existing=True, ) logger.info("Scheduled periodic task: flush_click_buffer (every 60s)")