mirror of
https://github.com/wahyd4/links.git
synced 2026-08-09 05:06:16 +10:00
122 lines
4.8 KiB
Python
122 lines
4.8 KiB
Python
"""
|
|
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)")
|
|
|
|
# ── nginxmon: monthly geo DB refresh ──────────────────────────────────
|
|
try:
|
|
from nginxmon.geo import download_geo_db as refresh_geo_db
|
|
scheduler.add_job(
|
|
refresh_geo_db,
|
|
trigger=IntervalTrigger(days=30),
|
|
id='refresh_geo_db',
|
|
replace_existing=True,
|
|
)
|
|
logger.info('nginxmon: scheduled geo DB refresh (every 30 days)')
|
|
except Exception as exc:
|
|
logger.warning('nginxmon: geo DB scheduler setup failed: %s', exc)
|
|
|
|
# ── routermon ──────────────────────────────────────────────────────────
|
|
try:
|
|
from routermon.tasks import cleanup_old_queries
|
|
from routermon.models import RouterMonSettings
|
|
from routermon.receiver import start_receiver
|
|
|
|
rm_settings = RouterMonSettings.get()
|
|
if rm_settings.enabled:
|
|
start_receiver(rm_settings.syslog_port)
|
|
|
|
scheduler.add_job(
|
|
cleanup_old_queries,
|
|
trigger=IntervalTrigger(hours=6),
|
|
id='routermon_cleanup',
|
|
replace_existing=True,
|
|
)
|
|
logger.info("routermon: scheduled cleanup job (every 6h)")
|
|
except Exception as exc:
|
|
import sys
|
|
print(f'routermon: startup error (non-fatal): {exc}', file=sys.stderr, flush=True)
|
|
logger.warning("routermon: startup error (non-fatal): %s", exc)
|
|
|
|
# ── invest: weekly portfolio snapshot (Saturday 08:00) ─────────────────
|
|
try:
|
|
from invest.tasks import snapshot_all_portfolios
|
|
from apscheduler.triggers.cron import CronTrigger
|
|
scheduler.add_job(
|
|
snapshot_all_portfolios,
|
|
CronTrigger(day_of_week='sat', hour=8, minute=0),
|
|
id='weekly_portfolio_snapshot',
|
|
replace_existing=True,
|
|
)
|
|
logger.info("invest: scheduled weekly portfolio snapshot (Saturday 08:00)")
|
|
except Exception as exc:
|
|
logger.warning("invest: snapshot scheduler setup failed: %s", exc)
|