Files
ewoooc/services/web_scheduler_compat.py
ogt 0c85209ea1
Some checks failed
CD Pipeline / deploy (push) Has been cancelled
perf(runtime): isolate workers and compress web assets
2026-07-11 09:48:41 +08:00

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"]