93 lines
3.0 KiB
Python
93 lines
3.0 KiB
Python
"""Lazy compatibility helpers for legacy single-process development.
|
|
|
|
Production scheduling belongs to ``momo-scheduler``. Keeping scheduler imports
|
|
inside these functions prevents every Gunicorn worker from loading crawler and
|
|
AI task dependencies during web startup.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import importlib
|
|
import threading
|
|
import time
|
|
from datetime import datetime
|
|
from typing import Callable
|
|
|
|
|
|
def run_schedule(logger) -> None:
|
|
import schedule
|
|
|
|
logger.info("Legacy local scheduler loop started")
|
|
while True:
|
|
schedule.run_pending()
|
|
time.sleep(1)
|
|
|
|
|
|
def init_scheduler(logger) -> threading.Thread:
|
|
"""Register the legacy development schedule without eager web imports."""
|
|
import schedule
|
|
from scheduler import (
|
|
run_auto_import_task,
|
|
run_competitor_price_feeder_task,
|
|
run_edm_task,
|
|
run_festival_task,
|
|
run_momo_task,
|
|
run_pchome_match_backfill_task,
|
|
run_whitepage_check,
|
|
)
|
|
|
|
schedule.every(1).hours.do(run_momo_task)
|
|
schedule.every(1).hours.do(run_edm_task)
|
|
schedule.every(1).hours.do(run_festival_task)
|
|
schedule.every(30).minutes.do(run_auto_import_task)
|
|
schedule.every(30).minutes.do(run_whitepage_check)
|
|
schedule.every(4).hours.do(run_competitor_price_feeder_task)
|
|
schedule.every().day.at("10:30").do(run_pchome_match_backfill_task)
|
|
|
|
scheduler_thread = threading.Thread(
|
|
target=run_schedule,
|
|
args=(logger,),
|
|
daemon=True,
|
|
name="legacy-web-scheduler",
|
|
)
|
|
scheduler_thread.start()
|
|
logger.info("Legacy local scheduler registered; production remains delegated")
|
|
return scheduler_thread
|
|
|
|
|
|
def scheduled_job_wrapper(logger, dashboard_stats_getter: Callable[[], dict]) -> threading.Thread:
|
|
"""Run the legacy MOMO command in a background thread on explicit request."""
|
|
timestamp = datetime.now().strftime("%H:%M:%S")
|
|
logger.info("Legacy MOMO command started at %s", timestamp)
|
|
|
|
def job() -> None:
|
|
from scheduler import run_momo_task
|
|
|
|
run_momo_task()
|
|
try:
|
|
scheduler_module = importlib.import_module("scheduler")
|
|
notification_module = importlib.import_module("services.notification_manager")
|
|
importlib.reload(scheduler_module)
|
|
importlib.reload(notification_module)
|
|
notification_manager = notification_module.NotificationManager
|
|
stats = dashboard_stats_getter()
|
|
if any(stats.values()):
|
|
screenshot_path = scheduler_module.capture_page_screenshot(
|
|
"http://127.0.0.1/",
|
|
"momo_dashboard",
|
|
)
|
|
notification_manager().send_momo_report(stats, screenshot_path)
|
|
except Exception as exc:
|
|
logger.error("Legacy scheduler notification failed: %s", exc)
|
|
|
|
worker = threading.Thread(
|
|
target=job,
|
|
daemon=True,
|
|
name="legacy-momo-command",
|
|
)
|
|
worker.start()
|
|
return worker
|
|
|
|
|
|
__all__ = ["init_scheduler", "run_schedule", "scheduled_job_wrapper"]
|