From 86b777fe4df21c80f909bd89ca8dbfbb6f0a755a Mon Sep 17 00:00:00 2001 From: Oct-autumn Date: Wed, 21 May 2025 15:57:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BF=83=E8=B7=B3403Error=E6=97=B6?= =?UTF-8?q?=E7=82=B8=E5=BF=83=E8=B7=B3=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/remote.py | 101 +++++++++++++++-------------- src/manager/local_store_manager.py | 10 ++- 2 files changed, 60 insertions(+), 51 deletions(-) diff --git a/src/common/remote.py b/src/common/remote.py index 4b12e26ce..5ffc5ebc1 100644 --- a/src/common/remote.py +++ b/src/common/remote.py @@ -68,30 +68,30 @@ class TelemetryHeartBeatTask(AsyncTask): response = requests.post( f"{TELEMETRY_SERVER_URL}/stat/reg_client", json={"deploy_time": local_storage["deploy_time"]}, + timeout=5, # 设置超时时间为5秒 ) - - logger.debug(f"{TELEMETRY_SERVER_URL}/stat/reg_client") - - logger.debug(local_storage["deploy_time"]) - - logger.debug(response) - - if response.status_code == 200: - data = response.json() - client_id = data.get("mmc_uuid") - if client_id: - # 将UUID存储到本地 - local_storage["mmc_uuid"] = client_id - self.client_uuid = client_id - logger.info(f"成功获取UUID: {self.client_uuid}") - return True # 成功获取UUID,返回True - else: - logger.error("无效的服务端响应") - else: - logger.error(f"请求UUID失败,状态码: {response.status_code}, 响应内容: {response.text}") - except requests.RequestException as e: + except Exception as e: logger.error(f"请求UUID时出错: {e}") # 可能是网络问题 + logger.debug(f"{TELEMETRY_SERVER_URL}/stat/reg_client") + + logger.debug(local_storage["deploy_time"]) + + logger.debug(response) + + if response.status_code == 200: + data = response.json() + if client_id := data.get("mmc_uuid"): + # 将UUID存储到本地 + local_storage["mmc_uuid"] = client_id + self.client_uuid = client_id + logger.info(f"成功获取UUID: {self.client_uuid}") + return True # 成功获取UUID,返回True + else: + logger.error("无效的服务端响应") + else: + logger.error(f"请求UUID失败,状态码: {response.status_code}, 响应内容: {response.text}") + # 请求失败,重试次数+1 try_count += 1 if try_count > 3: @@ -100,47 +100,48 @@ class TelemetryHeartBeatTask(AsyncTask): return False else: # 如果可以重试,等待后继续(指数退避) + logger.info(f"获取UUID失败,将于 {4**try_count} 秒后重试...") await asyncio.sleep(4**try_count) async def _send_heartbeat(self): """向服务器发送心跳""" + headers = { + "Client-UUID": self.client_uuid, + "User-Agent": f"HeartbeatClient/{self.client_uuid[:8]}", + } + + logger.debug(f"正在发送心跳到服务器: {self.server_url}") + + logger.debug(headers) + try: - headers = { - "Client-UUID": self.client_uuid, - "User-Agent": f"HeartbeatClient/{self.client_uuid[:8]}", - } - - logger.debug(f"正在发送心跳到服务器: {self.server_url}") - - logger.debug(headers) - response = requests.post( f"{self.server_url}/stat/client_heartbeat", headers=headers, json=self.info_dict, + timeout=5, # 设置超时时间为5秒 ) - - logger.debug(response) - - # 处理响应 - if 200 <= response.status_code < 300: - # 成功 - logger.debug(f"心跳发送成功,状态码: {response.status_code}") - elif response.status_code == 403: - # 403 Forbidden - logger.error( - "心跳发送失败,403 Forbidden: 可能是UUID无效或未注册。" - "处理措施:重置UUID,下次发送心跳时将尝试重新注册。" - ) - self.client_uuid = None - del local_storage["mmc_uuid"] # 删除本地存储的UUID - else: - # 其他错误 - logger.error(f"心跳发送失败,状态码: {response.status_code}, 响应内容: {response.text}") - - except requests.RequestException as e: + except Exception as e: logger.error(f"心跳发送失败: {e}") + logger.debug(response) + + # 处理响应 + if 200 <= response.status_code < 300: + # 成功 + logger.debug(f"心跳发送成功,状态码: {response.status_code}") + elif response.status_code == 403: + # 403 Forbidden + logger.error( + "心跳发送失败,403 Forbidden: 可能是UUID无效或未注册。" + "处理措施:重置UUID,下次发送心跳时将尝试重新注册。" + ) + self.client_uuid = None + del local_storage["mmc_uuid"] # 删除本地存储的UUID + else: + # 其他错误 + logger.error(f"心跳发送失败,状态码: {response.status_code}, 响应内容: {response.text}") + async def run(self): # 发送心跳 if global_config.telemetry.enable: diff --git a/src/manager/local_store_manager.py b/src/manager/local_store_manager.py index f172d8890..33a30cec7 100644 --- a/src/manager/local_store_manager.py +++ b/src/manager/local_store_manager.py @@ -22,13 +22,21 @@ class LocalStoreManager: def __getitem__(self, item: str) -> str | list | dict | int | float | bool | None: """获取本地存储数据""" - return self.store.get(item, None) + return self.store.get(item) def __setitem__(self, key: str, value: str | list | dict | int | float | bool): """设置本地存储数据""" self.store[key] = value self.save_local_store() + def __delitem__(self, key: str): + """删除本地存储数据""" + if key in self.store: + del self.store[key] + self.save_local_store() + else: + logger.warning(f"尝试删除不存在的键: {key}") + def __contains__(self, item: str) -> bool: """检查本地存储数据是否存在""" return item in self.store