init
This commit is contained in:
57
scheduler.py
Normal file
57
scheduler.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
from utils.health_check import HealthChecker
|
||||
from models import HealthCheckConfig, db
|
||||
from app import create_app
|
||||
import logging
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def init_scheduler(app):
|
||||
"""初始化定时任务调度器"""
|
||||
scheduler = BackgroundScheduler()
|
||||
|
||||
with app.app_context():
|
||||
# 获取所有启用的健康检查配置
|
||||
configs = HealthCheckConfig.query.filter_by(is_enabled=True).all()
|
||||
|
||||
for config in configs:
|
||||
# 为每个平台添加定时任务
|
||||
scheduler.add_job(
|
||||
func=lambda platform=config.platform: run_health_check(app, platform),
|
||||
trigger=IntervalTrigger(seconds=config.check_interval),
|
||||
id=f'health_check_{config.platform}',
|
||||
name=f'{config.platform}健康检查',
|
||||
replace_existing=True
|
||||
)
|
||||
logger.info(f"已添加{config.platform}健康检查任务,间隔{config.check_interval}秒")
|
||||
|
||||
scheduler.start()
|
||||
logger.info("定时任务调度器已启动")
|
||||
|
||||
return scheduler
|
||||
|
||||
def run_health_check(app, platform):
|
||||
"""执行健康检查"""
|
||||
with app.app_context():
|
||||
try:
|
||||
logger.info(f"开始执行{platform}健康检查")
|
||||
HealthChecker.check_platform(platform)
|
||||
logger.info(f"{platform}健康检查完成")
|
||||
except Exception as e:
|
||||
logger.error(f"{platform}健康检查失败: {str(e)}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = create_app()
|
||||
scheduler = init_scheduler(app)
|
||||
|
||||
try:
|
||||
# 保持程序运行
|
||||
import time
|
||||
while True:
|
||||
time.sleep(1)
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
scheduler.shutdown()
|
||||
logger.info("定时任务调度器已停止")
|
||||
Reference in New Issue
Block a user