CadHubManage/test_process_monitor.py
root e6261532f7 feat: 添加软件停止功能并修复Creo进程检测问题
## 主要修复
- 修复Creo软件运行状态检测失败问题
- 添加完整的软件停止功能支持
- 改进多进程软件的进程管理逻辑

## 技术改进
- 更新软件配置支持多进程名称检测
- 优化进程停止逻辑,增加超时配置
- 新增 stop_software WebSocket消息类型
- 完善错误处理和日志记录

## 配置更新
- configs/software_config.yaml: 支持进程名称列表和停止超时
- 添加Revit 2017配置支持

## 文档更新
- README.md: 更新软件配置说明和API列表
- frontend-api-docs.md: 添加停止软件API文档
- CHECKPOINT.md: 记录修复进展和解决方案

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-24 17:24:49 +08:00

77 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

import sys
import asyncio
sys.path.append('app')
from core.process_monitor import process_monitor
async def status_callback(event_type: str, software_id: str, data: dict):
"""状态变化回调函数"""
print(f"📡 事件通知: {event_type} - {software_id}")
print(f" 数据: {data}")
async def test_process_monitor():
print("=== 测试进程监控器 ===")
# 添加回调函数
process_monitor.add_callback(status_callback)
# 测试系统信息获取
print("\n1. 测试系统信息获取:")
try:
system_info = await process_monitor.get_system_info()
print(f"✅ 系统信息获取成功:")
print(f" - CPU使用率: {system_info['cpu']['percent']}%")
print(f" - 内存使用率: {system_info['memory']['percent']}%")
print(f" - 磁盘使用率: {system_info['disk']['percent']:.1f}%")
except Exception as e:
print(f"❌ 系统信息获取失败: {e}")
# 测试查找软件进程
print("\n2. 测试查找软件进程:")
try:
software_processes = await process_monitor.find_software_processes()
print(f"✅ 软件进程查找完成:")
for software_id, processes in software_processes.items():
print(f" - {software_id}: 找到 {len(processes)} 个进程")
for proc in processes:
print(f" PID: {proc['pid']}, 名称: {proc['name']}")
except Exception as e:
print(f"❌ 软件进程查找失败: {e}")
# 如果找到了creo进程添加到监控
if 'creo' in software_processes and software_processes['creo']:
print("\n3. 测试添加进程监控:")
try:
creo_process = software_processes['creo'][0]
process_monitor.add_process('creo', creo_process['pid'])
print(f"✅ 已添加Creo进程到监控: PID {creo_process['pid']}")
# 等待一段时间观察监控效果
print(" 监控中等待10秒...")
await asyncio.sleep(10)
# 获取进程信息
process_info = process_monitor.get_process_info('creo')
if process_info:
print(f" - 进程状态: {process_info.status}")
print(f" - CPU使用率: {process_info.cpu_percent}%")
print(f" - 内存使用率: {process_info.memory_percent}%")
print(f" - 运行时间: {(process_info.last_check - process_info.start_time).total_seconds():.1f}")
except Exception as e:
print(f"❌ 进程监控测试失败: {e}")
else:
print("\n3. 未找到Creo进程跳过监控测试")
# 停止监控
print("\n4. 停止监控:")
try:
await process_monitor.stop_monitoring()
print("✅ 监控已停止")
except Exception as e:
print(f"❌ 停止监控失败: {e}")
print("\n=== 进程监控器测试完成 ===")
if __name__ == "__main__":
asyncio.run(test_process_monitor())