From 99e800d976451afe2dc02a8508017b34fdee42f9 Mon Sep 17 00:00:00 2001 From: hyh Date: Thu, 7 Aug 2025 16:34:27 +0800 Subject: [PATCH] daoru --- app/api/v1/endpoints/enhanced_adb.py | 48 +++++++++++++++++++++++++++- app/core/app/factory.py | 27 ++++++++++++++++ app/services/enhanced_adb_service.py | 31 ++++++++++++++---- modify.md | 40 ++++++++++++++++++++++- 4 files changed, 137 insertions(+), 9 deletions(-) diff --git a/app/api/v1/endpoints/enhanced_adb.py b/app/api/v1/endpoints/enhanced_adb.py index 20ca119..d036bad 100644 --- a/app/api/v1/endpoints/enhanced_adb.py +++ b/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)}") \ No newline at end of file + 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)}") \ No newline at end of file diff --git a/app/core/app/factory.py b/app/core/app/factory.py index b3c21c0..196ee7c 100644 --- a/app/core/app/factory.py +++ b/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(): diff --git a/app/services/enhanced_adb_service.py b/app/services/enhanced_adb_service.py index df8d4c8..565516f 100644 --- a/app/services/enhanced_adb_service.py +++ b/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: """处理设备事件""" diff --git a/modify.md b/modify.md index 4b5bcd3..c7e2255 100644 --- a/modify.md +++ b/modify.md @@ -106,4 +106,42 @@ ### 后续建议 - 如果需要自动启动设备监控,可以在应用启动完成后(有事件循环运行时)手动调用 `start_monitoring()` -- 考虑在应用关闭时调用 `stop_monitoring()` 来清理资源 \ No newline at end of file +- 考虑在应用关闭时调用 `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手动启动/停止监控 +- **资源清理**: 应用关闭时自动清理监控资源 + +### 日志增强 +- 监控启动/停止的详细日志 +- 任务创建和取消的跟踪日志 +- 异常情况的详细错误日志 +- 监控状态的实时反馈 \ No newline at end of file