From 2db29fba9d69dad08aed5ce44c03bdc3da0cccda Mon Sep 17 00:00:00 2001 From: izzzzzi Date: Tue, 4 Mar 2025 01:23:54 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D1=81=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20httpx=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=81=D0=BA=D0=B8=D1=85=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client.py | 23 ++++++++++++++++++++++- handlers/admin/admin_servers.py | 3 ++- handlers/keys/key_management.py | 1 + handlers/keys/key_utils.py | 7 ++++++- requirements.txt | 1 + 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/client.py b/client.py index 750d5520..d48654f7 100644 --- a/client.py +++ b/client.py @@ -1,6 +1,6 @@ from dataclasses import dataclass from typing import Any - +import httpx import py3xui from config import LIMIT_IP, SUPERNODE @@ -54,6 +54,10 @@ async def add_client(xui: py3xui.AsyncApi, config: ClientConfig) -> dict[str, An logger.info(f"Клиент {config.email} успешно добавлен с ID {config.client_id}") return response if response else {"status": "failed"} + + except httpx.ConnectTimeout as e: + logger.error(f"Ошибка при добавлении клиента {config.email}: {e}") + return {"status": "failed", "error": "Timeout"} except Exception as e: error_message = str(e) @@ -110,6 +114,10 @@ async def extend_client_key( await xui.client.reset_stats(inbound_id, email) logger.info(f"Ключ клиента {email} успешно продлён до {new_expiry_time}") return True + + except httpx.ConnectTimeout as e: + logger.error(f"Ошибка при обновлении клиента {email}: {e}") + return False except Exception as e: logger.error(f"Ошибка при обновлении клиента с email {email}: {e}") @@ -151,6 +159,10 @@ async def delete_client( await xui.client.delete(inbound_id, client.id) logger.info(f"Клиент с ID {client_id} был удален успешно") return True + + except httpx.ConnectTimeout as e: + logger.error(f"Ошибка при удалении клиента {email}: {e}") + return False except Exception as e: logger.error(f"Ошибка при удалении клиента с ID {client_id}: {e}") @@ -178,6 +190,10 @@ async def get_client_traffic(xui: py3xui.AsyncApi, client_id: str) -> dict[str, logger.info(f"Трафик для клиента {client_id} успешно получен.") return {"status": "success", "client_id": client_id, "traffic": traffic_data} + + except httpx.ConnectTimeout as e: + logger.error(f"Ошибка при получении трафика клиента {client_id}: {e}") + return {"status": "error", "error": "Timeout"} except Exception as e: logger.error(f"Ошибка при получении трафика клиента {client_id}: {e}") @@ -221,6 +237,11 @@ async def toggle_client(xui: py3xui.AsyncApi, inbound_id: int, email: str, clien logger.info(f"Клиент с email {email} и ID {client_id} успешно {status}.") return True + except httpx.ConnectTimeout as e: + status = "включении" if enable else "отключении" + logger.error(f"Ошибка при {status} клиента с email {email} и ID {client_id}: {e}") + return False + except Exception as e: status = "включении" if enable else "отключении" logger.error(f"Ошибка при {status} клиента с email {email} и ID {client_id}: {e}") diff --git a/handlers/admin/admin_servers.py b/handlers/admin/admin_servers.py index 4ddae1a9..b44edbc3 100644 --- a/handlers/admin/admin_servers.py +++ b/handlers/admin/admin_servers.py @@ -279,7 +279,7 @@ async def handle_servers_availability( total_online_users = 0 for server in cluster_servers: - xui = AsyncApi(server["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD) + xui = AsyncApi(server["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, logger=logger) try: await xui.login() @@ -383,6 +383,7 @@ async def handle_clusters_backup( server["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) await create_backup_and_send_to_admins(xui) diff --git a/handlers/keys/key_management.py b/handlers/keys/key_management.py index 84fe05bc..a63d17df 100644 --- a/handlers/keys/key_management.py +++ b/handlers/keys/key_management.py @@ -449,6 +449,7 @@ async def finalize_key_creation( old_server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) deletion_success = await delete_client( xui, diff --git a/handlers/keys/key_utils.py b/handlers/keys/key_utils.py index c08ccc85..ce38ab1f 100644 --- a/handlers/keys/key_utils.py +++ b/handlers/keys/key_utils.py @@ -69,6 +69,7 @@ async def create_client_on_server( server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) inbound_id = server_info.get("inbound_id") @@ -129,6 +130,7 @@ async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, to server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) inbound_id = server_info.get("inbound_id") @@ -180,6 +182,7 @@ async def delete_key_from_cluster(cluster_id, email, client_id): server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) inbound_id = server_info.get("inbound_id") @@ -230,6 +233,7 @@ async def update_key_on_cluster(tg_id, client_id, email, expiry_time, cluster_id server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) inbound_id = server_info.get("inbound_id") @@ -357,7 +361,7 @@ async def get_user_traffic(session: Any, tg_id: int, email: str) -> dict[str, An Получает трафик с сервера для заданного client_id. Возвращает кортеж: (server, used_gb) или (server, ошибка). """ - xui = AsyncApi(api_url, username=ADMIN_USERNAME, password=ADMIN_PASSWORD) + xui = AsyncApi(api_url, username=ADMIN_USERNAME, password=ADMIN_PASSWORD, logger=logger) try: traffic_info = await get_client_traffic(xui, client_id) if traffic_info["status"] == "success" and traffic_info["traffic"]: @@ -424,6 +428,7 @@ async def toggle_client_on_cluster(cluster_id: str, email: str, client_id: str, server_info["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, + logger=logger, ) inbound_id = server_info.get("inbound_id") diff --git a/requirements.txt b/requirements.txt index 01cb074e..9d6b76c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,3 +42,4 @@ urllib3==2.2.3 wrapt==1.16.0 yarl==1.15.5 yookassa==3.3.0 +httpx