69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import time
|
|||
|
|
import logging
|
|||
|
|
|
|||
|
|
# Ensure src is in the python path
|
|||
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src")))
|
|||
|
|
|
|||
|
|
from app.core.logging import setup_logging
|
|||
|
|
from app.db.session import get_session_factory
|
|||
|
|
from app.models.hermes_config import HermesTaskConfig
|
|||
|
|
from app.services.hermes_scheduler import hermes_scheduler
|
|||
|
|
|
|||
|
|
logger = logging.getLogger("hermes_daemon")
|
|||
|
|
|
|||
|
|
def init_default_config():
|
|||
|
|
"""Ensure there is at least one active global_risk_scan task in the database."""
|
|||
|
|
session_factory = get_session_factory()
|
|||
|
|
db = session_factory()
|
|||
|
|
try:
|
|||
|
|
# 初始化 global_risk_scan
|
|||
|
|
existing_risk = db.query(HermesTaskConfig).filter_by(task_type="global_risk_scan").first()
|
|||
|
|
if not existing_risk:
|
|||
|
|
logger.info("No global_risk_scan config found. Initializing default config.")
|
|||
|
|
db.add(HermesTaskConfig(
|
|||
|
|
task_type="global_risk_scan",
|
|||
|
|
cron_expression="0 2 * * *",
|
|||
|
|
is_enabled=True
|
|||
|
|
))
|
|||
|
|
|
|||
|
|
# 初始化 weekly_expense_report
|
|||
|
|
existing_report = db.query(HermesTaskConfig).filter_by(task_type="weekly_expense_report").first()
|
|||
|
|
if not existing_report:
|
|||
|
|
logger.info("No weekly_expense_report config found. Initializing default config.")
|
|||
|
|
db.add(HermesTaskConfig(
|
|||
|
|
task_type="weekly_expense_report",
|
|||
|
|
cron_expression="0 9 * * 1", # 每周一早9点(在简化版中暂时代表周报频率)
|
|||
|
|
is_enabled=True
|
|||
|
|
))
|
|||
|
|
|
|||
|
|
db.commit()
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f"Failed to initialize default config: {e}")
|
|||
|
|
finally:
|
|||
|
|
db.close()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
setup_logging()
|
|||
|
|
logger.info("Initializing Hermes Background Daemon...")
|
|||
|
|
|
|||
|
|
# 注入默认配置
|
|||
|
|
init_default_config()
|
|||
|
|
|
|||
|
|
# 启动调度器
|
|||
|
|
hermes_scheduler.start()
|
|||
|
|
|
|||
|
|
logger.info("Hermes Daemon is running. Press Ctrl+C to stop.")
|
|||
|
|
try:
|
|||
|
|
while True:
|
|||
|
|
time.sleep(1) # 主线程保持存活
|
|||
|
|
except KeyboardInterrupt:
|
|||
|
|
logger.info("Keyboard interrupt received. Shutting down...")
|
|||
|
|
hermes_scheduler.shutdown()
|
|||
|
|
logger.info("Shutdown complete.")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|