| | |
| | | logger.bind(tag=TAG).info( |
| | | f"TaskSession 结束 {session.task_session_id} status={session.status} reason={reason}" |
| | | ) |
| | | _schedule_close_parent_matching(conn, session, reason) |
| | | |
| | | |
| | | def current_session(conn: "ConnectionHandler") -> Optional[TaskSession]: |
| | |
| | | return None |
| | | |
| | | |
| | | def schedule_close_parent_except( |
| | | conn: "ConnectionHandler", |
| | | reason: str, |
| | | except_app: str = "", |
| | | except_task: str = "", |
| | | ) -> None: |
| | | device_id = str(getattr(conn, "device_id", "") or "") |
| | | if not device_id: |
| | | return |
| | | payload: Dict[str, Any] = { |
| | | "device_id": device_id, |
| | | "reason": reason or "server", |
| | | "except_app_id": except_app or "", |
| | | "except_task_id": except_task or "", |
| | | } |
| | | _schedule_close_parent(payload) |
| | | |
| | | |
| | | def _schedule_close_parent_matching( |
| | | conn: "ConnectionHandler", |
| | | session: TaskSession, |
| | | reason: str, |
| | | ) -> None: |
| | | device_id = str(getattr(conn, "device_id", "") or getattr(session, "device_id", "") or "") |
| | | if not device_id: |
| | | return |
| | | status = "done" if getattr(session, "status", "") == "completed" else "cancelled" |
| | | payload: Dict[str, Any] = { |
| | | "device_id": device_id, |
| | | "reason": reason or "", |
| | | "status": status, |
| | | "match_app_id": session.app_id or "", |
| | | "match_task_id": session.task_id or "", |
| | | } |
| | | _schedule_close_parent(payload) |
| | | |
| | | |
| | | def _schedule_close_parent(payload: Dict[str, Any]) -> None: |
| | | async def _run(): |
| | | try: |
| | | from config.manage_api_client import close_parent_immediate_tasks |
| | | |
| | | await close_parent_immediate_tasks(payload) |
| | | except Exception as exc: |
| | | logger.bind(tag=TAG).warning(f"关闭家长即时任务失败: {exc}") |
| | | |
| | | try: |
| | | loop = asyncio.get_running_loop() |
| | | except RuntimeError: |
| | | return |
| | | loop.create_task(_run()) |
| | | |
| | | |
| | | async def _upsert_task_instance(payload: Dict[str, Any]) -> bool: |
| | | from config.manage_api_client import upsert_task_instance |
| | | |