112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
# main.py
|
|
import signal
|
|
import time
|
|
from datetime import datetime
|
|
from system_management.scheduler.task_scheduler import TaskScheduler
|
|
from utils.logger import CrossPlatformLog
|
|
|
|
# 初始化日志
|
|
log = CrossPlatformLog.get_logger("Main")
|
|
|
|
|
|
class IntelligenceSystem:
|
|
def __init__(self, db_config=None):
|
|
self.scheduler = TaskScheduler(db_config)
|
|
self._running = False
|
|
log.info("IntelligenceSystem initialized")
|
|
|
|
def run(self):
|
|
"""启动系统主循环"""
|
|
self._running = True
|
|
self._register_signal_handlers()
|
|
|
|
log.info("Starting main loop")
|
|
|
|
try:
|
|
while self._running:
|
|
start_time = time.time()
|
|
self._run_cycle()
|
|
|
|
# 精确控制循环间隔(扣除执行时间)
|
|
elapsed = time.time() - start_time
|
|
sleep_time = max(0, 60 - elapsed)
|
|
time.sleep(sleep_time)
|
|
|
|
except KeyboardInterrupt:
|
|
log.info("Received keyboard interrupt")
|
|
except Exception as e:
|
|
log.critical(
|
|
"System crashed",
|
|
exc_info=True
|
|
)
|
|
raise
|
|
finally:
|
|
self.shutdown()
|
|
|
|
def _run_cycle(self):
|
|
"""单个运行周期"""
|
|
try:
|
|
# 1. 执行任务调度
|
|
result = self.scheduler.run_pending_tasks()
|
|
|
|
# 2. 每小时记录系统状态
|
|
if datetime.now().minute == 0:
|
|
self._log_system_status()
|
|
|
|
except Exception as e:
|
|
log.error(
|
|
"Cycle execution failed",
|
|
exc_info=True
|
|
)
|
|
raise
|
|
|
|
def _log_system_status(self):
|
|
"""记录系统状态"""
|
|
try:
|
|
status_df = self.scheduler.get_task_status()
|
|
pending = len(status_df[status_df['next_run_time'] <= datetime.now()])
|
|
|
|
log.info(
|
|
"System status",
|
|
pending_tasks=pending,
|
|
active_tasks=len(status_df),
|
|
last_success=status_df['last_run_time'].max()
|
|
)
|
|
except Exception as e:
|
|
log.error(
|
|
"Failed to log system status",
|
|
exc_info=True
|
|
)
|
|
|
|
def _register_signal_handlers(self):
|
|
"""注册信号处理"""
|
|
signal.signal(signal.SIGINT, self._handle_shutdown)
|
|
signal.signal(signal.SIGTERM, self._handle_shutdown)
|
|
log.debug("Signal handlers registered")
|
|
|
|
def _handle_shutdown(self, signum, frame):
|
|
"""处理关闭信号"""
|
|
log.info(
|
|
f"Processing shutdown signal {signum}",
|
|
signal=signum
|
|
)
|
|
self._running = False
|
|
|
|
def shutdown(self):
|
|
"""关闭系统"""
|
|
log.info("Performing system shutdown")
|
|
# 此处可添加其他清理逻辑
|
|
log.success("System shutdown completed")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
system = IntelligenceSystem()
|
|
system.run()
|
|
except Exception as e:
|
|
log.critical(
|
|
"System startup failed",
|
|
exc_info=True
|
|
)
|
|
raise
|