Browse Source

daoru

master
hyh 4 months ago
parent
commit
99e800d976
  1. 48
      app/api/v1/endpoints/enhanced_adb.py
  2. 27
      app/core/app/factory.py
  3. 31
      app/services/enhanced_adb_service.py
  4. 40
      modify.md

48
app/api/v1/endpoints/enhanced_adb.py

@ -202,4 +202,50 @@ async def remove_forward_port(local: Optional[str] = None):
return {"message": f"端口转发移除成功: {local or 'all'}"}
except Exception as e:
logger.error("API错误: 移除端口转发失败", local=local, error=str(e))
raise HTTPException(status_code=500, detail=f"移除端口转发失败: {str(e)}")
raise HTTPException(status_code=500, detail=f"移除端口转发失败: {str(e)}")
@router.post("/monitor/start", summary="启动设备监控")
async def start_device_monitoring():
"""启动ADB设备监控"""
try:
logger.debug("API请求: 启动设备监控")
adb_service = get_adb_service()
await adb_service.start_monitoring()
logger.info("API响应: 设备监控启动成功")
return {"message": "设备监控启动成功", "status": "running"}
except Exception as e:
logger.error("API错误: 启动设备监控失败", error=str(e))
raise HTTPException(status_code=500, detail=f"启动设备监控失败: {str(e)}")
@router.post("/monitor/stop", summary="停止设备监控")
async def stop_device_monitoring():
"""停止ADB设备监控"""
try:
logger.debug("API请求: 停止设备监控")
adb_service = get_adb_service()
await adb_service.stop_monitoring()
logger.info("API响应: 设备监控停止成功")
return {"message": "设备监控停止成功", "status": "stopped"}
except Exception as e:
logger.error("API错误: 停止设备监控失败", error=str(e))
raise HTTPException(status_code=500, detail=f"停止设备监控失败: {str(e)}")
@router.get("/monitor/status", summary="获取监控状态")
async def get_monitoring_status():
"""获取设备监控状态"""
try:
logger.debug("API请求: 获取监控状态")
adb_service = get_adb_service()
status = {
"monitoring_started": adb_service._monitoring_started,
"task_running": adb_service._device_monitor_task is not None and not adb_service._device_monitor_task.done(),
"task_id": id(adb_service._device_monitor_task) if adb_service._device_monitor_task else None
}
logger.info("API响应: 获取监控状态成功", status=status)
return status
except Exception as e:
logger.error("API错误: 获取监控状态失败", error=str(e))
raise HTTPException(status_code=500, detail=f"获取监控状态失败: {str(e)}")

27
app/core/app/factory.py

@ -59,6 +59,33 @@ def create_app(
from app.core.app.router import router_manager
router_manager.register_all_routers(app)
# 启动设备监控
@app.on_event("startup")
async def startup_event():
"""应用启动事件"""
logger.info("应用启动,开始初始化服务")
try:
# 启动ADB设备监控
from app.services.enhanced_adb_service import EnhancedAdbService
adb_service = EnhancedAdbService()
await adb_service.start_monitoring()
logger.info("ADB设备监控启动成功")
except Exception as e:
logger.error("启动ADB设备监控失败", error=str(e))
@app.on_event("shutdown")
async def shutdown_event():
"""应用关闭事件"""
logger.info("应用关闭,开始清理资源")
try:
# 停止ADB设备监控
from app.services.enhanced_adb_service import EnhancedAdbService
adb_service = EnhancedAdbService()
await adb_service.stop_monitoring()
logger.info("ADB设备监控已停止")
except Exception as e:
logger.error("停止ADB设备监控失败", error=str(e))
# 添加根路径
@app.get("/")
async def root():

31
app/services/enhanced_adb_service.py

@ -28,20 +28,35 @@ class EnhancedAdbService:
async def start_monitoring(self):
"""启动设备监控(需要手动调用)"""
if not self._monitoring_started and (not self._device_monitor_task or self._device_monitor_task.done()):
logger.info("开始设备监控")
self._device_monitor_task = asyncio.create_task(self._monitor_devices())
self._monitoring_started = True
logger.info("开始设备监控", host=self._host, port=self._port)
try:
self._device_monitor_task = asyncio.create_task(self._monitor_devices())
self._monitoring_started = True
logger.info("设备监控任务创建成功", task_id=id(self._device_monitor_task))
except Exception as e:
logger.error("创建设备监控任务失败", error=str(e))
self._monitoring_started = False
raise
else:
logger.info("设备监控已在运行中", monitoring_started=self._monitoring_started, task_done=self._device_monitor_task.done() if self._device_monitor_task else None)
async def stop_monitoring(self):
"""停止设备监控"""
if self._device_monitor_task and not self._device_monitor_task.done():
logger.info("正在停止设备监控", task_id=id(self._device_monitor_task))
self._device_monitor_task.cancel()
try:
await self._device_monitor_task
logger.info("设备监控任务已成功停止")
except asyncio.CancelledError:
pass
self._monitoring_started = False
logger.info("设备监控已停止")
logger.info("设备监控任务被取消")
except Exception as e:
logger.error("停止设备监控任务时发生错误", error=str(e))
finally:
self._monitoring_started = False
logger.info("设备监控已完全停止")
else:
logger.info("设备监控未在运行,无需停止")
async def get_server_info(self) -> ServerInfo:
"""获取ADB服务器信息"""
@ -104,6 +119,7 @@ class EnhancedAdbService:
async def _monitor_devices(self) -> None:
"""设备监控内部方法"""
logger.info("设备监控循环开始", host=self._host, port=self._port)
try:
logger.debug("开始设备监控循环")
async for event in self._client.track_devices():
@ -115,9 +131,10 @@ class EnhancedAdbService:
except asyncio.CancelledError:
logger.info("设备监控被取消")
except Exception as e:
logger.error("设备监控异常", error=str(e))
logger.error("设备监控异常", error=str(e), host=self._host, port=self._port)
# 监控异常时不再自动重启,需要手动重新启动
self._monitoring_started = False
logger.warning("设备监控已停止,需要手动重新启动")
async def _handle_device_event(self, event: DeviceEvent) -> None:
"""处理设备事件"""

40
modify.md

@ -106,4 +106,42 @@
### 后续建议
- 如果需要自动启动设备监控,可以在应用启动完成后(有事件循环运行时)手动调用 `start_monitoring()`
- 考虑在应用关闭时调用 `stop_monitoring()` 来清理资源
- 考虑在应用关闭时调用 `stop_monitoring()` 来清理资源
## 2025-08-07 - 增强设备监控功能
### 新增功能
1. **自动启动监控**: 在应用启动时自动启动ADB设备监控
2. **增强日志记录**: 添加详细的监控启动、停止和状态日志
3. **监控管理API**: 新增监控启动、停止和状态查询API
### 修改内容
#### 1. EnhancedAdbService 类增强 (`app/services/enhanced_adb_service.py`)
- 增强 `start_monitoring()` 方法,添加详细日志和错误处理
- 增强 `stop_monitoring()` 方法,添加任务状态检查和清理日志
- 增强 `_monitor_devices()` 方法,添加启动和异常日志
- 添加任务ID跟踪和状态监控
#### 2. 应用工厂增强 (`app/core/app/factory.py`)
- 添加 `@app.on_event("startup")` 事件处理器,自动启动设备监控
- 添加 `@app.on_event("shutdown")` 事件处理器,自动停止设备监控
- 添加启动和关闭过程的详细日志
#### 3. 监控管理API (`app/api/v1/endpoints/enhanced_adb.py`)
- 新增 `POST /api/v1/adb/monitor/start` - 启动设备监控
- 新增 `POST /api/v1/adb/monitor/stop` - 停止设备监控
- 新增 `GET /api/v1/adb/monitor/status` - 获取监控状态
### 监控功能特性
- **自动启动**: 应用启动时自动开始监控
- **状态跟踪**: 实时跟踪监控任务状态
- **错误处理**: 完善的异常处理和日志记录
- **手动控制**: 支持通过API手动启动/停止监控
- **资源清理**: 应用关闭时自动清理监控资源
### 日志增强
- 监控启动/停止的详细日志
- 任务创建和取消的跟踪日志
- 异常情况的详细错误日志
- 监控状态的实时反馈
Loading…
Cancel
Save