Add server management functionality by introducing add_server_to_db function for streamlined database interactions. Refactor server addition logic in sync_servers_with_db and admin handlers to utilize the new function, enhancing code clarity and session management.

This commit is contained in:
Zakhar Izmaylov
2025-01-23 08:03:58 +03:00
parent a1d051a3f1
commit 4addb772a0
3 changed files with 53 additions and 25 deletions
+35
View File
@@ -1295,3 +1295,38 @@ async def delete_key(identifier, session):
logger.info(f"Ключ с идентификатором {identifier} успешно удалён")
except Exception as e:
logger.error(f"Ошибка при удалении ключа с идентификатором {identifier} из базы данных: {e}")
async def add_server_to_db(
cluster_name: str, server_name: str, api_url: str, subscription_url: str, inbound_id: int, session: Any
):
"""
Добавляет новый сервер в базу данных.
Args:
cluster_name (str): Название кластера
server_name (str): Название сервера
api_url (str): URL API сервера
subscription_url (str): URL подписки
inbound_id (int): ID входящего подключения
session (Any): Сессия базы данных
Raises:
Exception: В случае ошибки при добавлении сервера
"""
try:
await session.execute(
"""
INSERT INTO servers (cluster_name, server_name, api_url, subscription_url, inbound_id)
VALUES ($1, $2, $3, $4, $5)
""",
cluster_name,
server_name,
api_url,
subscription_url,
inbound_id,
)
logger.info(f"Сервер {server_name} успешно добавлен в кластер {cluster_name}")
except Exception as e:
logger.error(f"Ошибка при добавлении сервера {server_name} в кластер {cluster_name}: {e}")
raise
+10 -14
View File
@@ -1,4 +1,5 @@
import asyncio
from typing import Any
import asyncpg
from aiogram import F, Router, types
@@ -10,7 +11,7 @@ from py3xui import AsyncApi
from backup import create_backup_and_send_to_admins
from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL
from database import check_unique_server_name, get_servers_from_db
from database import add_server_to_db, check_unique_server_name, get_servers_from_db
from filters.admin import IsAdminFilter
from handlers.keys.key_utils import create_key_on_cluster
from logger import logger
@@ -211,7 +212,7 @@ async def handle_subscription_url_input(message: types.Message, state: FSMContex
@router.message(UserEditorState.waiting_for_inbound_id, IsAdminFilter())
async def handle_inbound_id_input(message: types.Message, state: FSMContext):
async def handle_inbound_id_input(message: types.Message, state: FSMContext, session: Any):
inbound_id = message.text.strip()
if not inbound_id.isdigit():
@@ -224,19 +225,14 @@ async def handle_inbound_id_input(message: types.Message, state: FSMContext):
api_url = user_data.get("api_url")
subscription_url = user_data.get("subscription_url")
conn = await asyncpg.connect(DATABASE_URL)
await conn.execute(
"""
INSERT INTO servers (cluster_name, server_name, api_url, subscription_url, inbound_id)
VALUES ($1, $2, $3, $4, $5)
""",
cluster_name,
server_name,
api_url,
subscription_url,
inbound_id,
await add_server_to_db(
cluster_name=cluster_name,
server_name=server_name,
api_url=api_url,
subscription_url=subscription_url,
inbound_id=inbound_id,
session=session,
)
await conn.close()
builder = InlineKeyboardBuilder()
builder.row(InlineKeyboardButton(text="🔙 Назад к кластерам", callback_data="servers_editor"))
+8 -11
View File
@@ -9,7 +9,7 @@ from ping3 import ping
from bot import bot
from config import ADMIN_ID, DATABASE_URL, PING_TIME
from database import get_servers_from_db
from database import add_server_to_db, get_servers_from_db
from logger import logger
try:
@@ -44,16 +44,13 @@ async def sync_servers_with_db():
)
if not exists:
await conn.execute(
"""
INSERT INTO servers (cluster_name, server_name, api_url, subscription_url, inbound_id)
VALUES ($1, $2, $3, $4, $5)
""",
cluster_name,
server_info["name"],
server_info["API_URL"],
server_info["SUBSCRIPTION"],
server_info["INBOUND_ID"],
await add_server_to_db(
cluster_name=cluster_name,
server_name=server_info["name"],
api_url=server_info["API_URL"],
subscription_url=server_info["SUBSCRIPTION"],
inbound_id=server_info["INBOUND_ID"],
session=conn,
)
logger.info(f"Сервер {server_info['name']} из кластера {cluster_name} добавлен в базу данных.")
else: