SuperNode/SyncTimeout/pytz

This commit is contained in:
Vladless
2025-01-14 23:35:19 +03:00
parent 7e8a36d7ad
commit a626a1d882
2 changed files with 32 additions and 29 deletions
+1 -3
View File
@@ -383,14 +383,12 @@ async def sync_cluster_handler(callback_query: types.CallbackQuery):
for key in keys_to_sync:
for server_info in cluster_servers:
server_name = server_info.get("server_name", "unknown")
email = f"{key['email']}_{server_name.lower()}" if SUPERNODE else key['email']
try:
await create_key_on_cluster(
cluster_name,
key["tg_id"],
key["client_id"],
email,
key["email"],
key["expiry_time"],
)
await asyncio.sleep(0.6)
+31 -26
View File
@@ -13,38 +13,39 @@ async def create_key_on_cluster(cluster_id, tg_id, client_id, email, expiry_time
Создает ключ на всех серверах указанного кластера с одинаковым sub_id и уникальным email при активном SUPERNODE.
"""
try:
tasks = []
servers = await get_servers_from_db()
cluster = servers.get(cluster_id)
if not cluster:
raise ValueError(f"Кластер с ID {cluster_id} не найден.")
for server_info in cluster:
xui = AsyncApi(
server_info["api_url"],
username=ADMIN_USERNAME,
password=ADMIN_PASSWORD,
)
semaphore = asyncio.Semaphore(2)
inbound_id = server_info.get("inbound_id")
server_name = server_info.get("server_name", "unknown")
if not inbound_id:
logger.warning(
f"INBOUND_ID отсутствует для сервера {server_name}. Пропуск."
async def create_client_on_server(server_info):
async with semaphore:
xui = AsyncApi(
server_info["api_url"],
username=ADMIN_USERNAME,
password=ADMIN_PASSWORD,
)
continue
if SUPERNODE:
unique_email = f"{email}_{server_name.lower()}"
sub_id = email
else:
unique_email = email
sub_id = unique_email
inbound_id = server_info.get("inbound_id")
server_name = server_info.get("server_name", "unknown")
tasks.append(
add_client(
if not inbound_id:
logger.warning(
f"INBOUND_ID отсутствует для сервера {server_name}. Пропуск."
)
return
if SUPERNODE:
unique_email = f"{email}_{server_name.lower()}"
sub_id = email
else:
unique_email = email
sub_id = unique_email
await add_client(
xui,
client_id,
unique_email,
@@ -57,12 +58,15 @@ async def create_key_on_cluster(cluster_id, tg_id, client_id, email, expiry_time
inbound_id=int(inbound_id),
sub_id=sub_id
)
)
if SUPERNODE:
await asyncio.sleep(0.2)
if SUPERNODE:
await asyncio.sleep(0.7)
await asyncio.gather(*tasks)
if SUPERNODE:
for server_info in cluster:
await create_client_on_server(server_info)
else:
await asyncio.gather(*(create_client_on_server(server) for server in cluster))
except Exception as e:
logger.error(f"Ошибка при создании ключа: {e}")
@@ -70,6 +74,7 @@ async def create_key_on_cluster(cluster_id, tg_id, client_id, email, expiry_time
async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, total_gb):
try:
servers = await get_servers_from_db()