Files
aitsc/monitor_manager.py

258 lines
8.3 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Flask 提示词大师 - 监控管理脚本
统一管理监控和日志功能
"""
import os
import sys
import time
import json
import subprocess
import threading
from datetime import datetime
from pathlib import Path
# 添加项目路径到 Python 路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
class MonitorManager:
"""监控管理类"""
def __init__(self):
self.project_root = project_root
self.monitor_process = None
self.log_manager_process = None
self.is_running = False
def start_monitoring(self):
"""启动监控"""
try:
print("🚀 启动服务监控...")
# 启动监控脚本
self.monitor_process = subprocess.Popen(
[sys.executable, "simple_monitor.py"],
cwd=self.project_root,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
print(f"✅ 监控进程已启动 (PID: {self.monitor_process.pid})")
return True
except Exception as e:
print(f"❌ 启动监控失败: {e}")
return False
def stop_monitoring(self):
"""停止监控"""
try:
if self.monitor_process:
print("🛑 停止服务监控...")
self.monitor_process.terminate()
self.monitor_process.wait(timeout=5)
print("✅ 监控已停止")
self.monitor_process = None
else:
print(" 没有运行中的监控进程")
except subprocess.TimeoutExpired:
print("⚠️ 监控进程未响应,强制终止")
self.monitor_process.kill()
self.monitor_process = None
except Exception as e:
print(f"❌ 停止监控失败: {e}")
def check_service_status(self):
"""检查服务状态"""
try:
print("🔍 检查服务状态...")
result = subprocess.run(
[sys.executable, "simple_monitor.py", "check"],
cwd=self.project_root,
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0:
print("✅ 服务运行正常")
if result.stdout:
print(result.stdout)
return True
else:
print("❌ 服务运行异常")
if result.stderr:
print(result.stderr)
return False
except subprocess.TimeoutExpired:
print("⚠️ 服务检查超时")
return False
except Exception as e:
print(f"❌ 服务检查失败: {e}")
return False
def manage_logs(self, action="stats"):
"""管理日志"""
try:
print(f"📁 执行日志管理操作: {action}")
result = subprocess.run(
[sys.executable, "log_manager.py", action],
cwd=self.project_root,
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
print("✅ 日志管理操作完成")
if result.stdout:
print(result.stdout)
else:
print("❌ 日志管理操作失败")
if result.stderr:
print(result.stderr)
except subprocess.TimeoutExpired:
print("⚠️ 日志管理操作超时")
except Exception as e:
print(f"❌ 日志管理失败: {e}")
def generate_report(self):
"""生成监控报告"""
try:
print("📊 生成监控报告...")
result = subprocess.run(
[sys.executable, "simple_monitor.py", "report"],
cwd=self.project_root,
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0:
print("✅ 监控报告已生成")
if result.stdout:
print(result.stdout)
else:
print("❌ 生成监控报告失败")
if result.stderr:
print(result.stderr)
except subprocess.TimeoutExpired:
print("⚠️ 生成报告超时")
except Exception as e:
print(f"❌ 生成报告失败: {e}")
def show_dashboard(self):
"""显示监控仪表板"""
try:
print("=" * 60)
print("📊 Flask 提示词大师 - 监控仪表板")
print("=" * 60)
# 检查服务状态
service_ok = self.check_service_status()
# 显示日志统计
self.manage_logs("stats")
# 显示监控报告
self.generate_report()
print("=" * 60)
except Exception as e:
print(f"❌ 显示仪表板失败: {e}")
def run_interactive(self):
"""运行交互式模式"""
self.is_running = True
print("🎮 进入交互式监控模式")
print("命令:")
print(" start - 启动监控")
print(" stop - 停止监控")
print(" status - 检查服务状态")
print(" logs - 管理日志")
print(" report - 生成报告")
print(" dashboard - 显示仪表板")
print(" quit - 退出")
while self.is_running:
try:
command = input("\n📝 请输入命令: ").strip().lower()
if command == "quit":
self.is_running = False
print("👋 退出监控管理")
elif command == "start":
self.start_monitoring()
elif command == "stop":
self.stop_monitoring()
elif command == "status":
self.check_service_status()
elif command == "logs":
self.manage_logs()
elif command == "report":
self.generate_report()
elif command == "dashboard":
self.show_dashboard()
else:
print("❓ 未知命令,请重试")
except KeyboardInterrupt:
print("\n👋 退出监控管理")
self.is_running = False
except Exception as e:
print(f"❌ 执行命令失败: {e}")
# 确保停止监控
self.stop_monitoring()
def main():
"""主函数"""
manager = MonitorManager()
if len(sys.argv) == 1:
# 交互式模式
manager.run_interactive()
elif sys.argv[1] == "start":
# 启动监控
manager.start_monitoring()
elif sys.argv[1] == "stop":
# 停止监控
manager.stop_monitoring()
elif sys.argv[1] == "status":
# 检查状态
manager.check_service_status()
elif sys.argv[1] == "logs":
# 管理日志
action = sys.argv[2] if len(sys.argv) > 2 else "stats"
manager.manage_logs(action)
elif sys.argv[1] == "report":
# 生成报告
manager.generate_report()
elif sys.argv[1] == "dashboard":
# 显示仪表板
manager.show_dashboard()
else:
print("用法:")
print(" python monitor_manager.py # 交互式模式")
print(" python monitor_manager.py start # 启动监控")
print(" python monitor_manager.py stop # 停止监控")
print(" python monitor_manager.py status # 检查状态")
print(" python monitor_manager.py logs [action] # 管理日志")
print(" python monitor_manager.py report # 生成报告")
print(" python monitor_manager.py dashboard # 显示仪表板")
if __name__ == '__main__':
main()