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:
+35
@@ -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
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user