diff --git a/main.py b/main.py index 6c23e88d..e19abfe7 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,7 @@ from handlers.payments.freekassa_pay import freekassa_webhook from handlers.payments.robokassa_pay import robokassa_webhook from handlers.payments.yookassa_pay import yookassa_webhook from logger import logger +from servers import sync_servers_with_db async def periodic_notifications(): @@ -66,6 +67,7 @@ async def shutdown_site(site): async def main(): dp.include_router(router) + await sync_servers_with_db() if DEV_MODE: logger.info("Запуск в режиме разработки...") diff --git a/servers.py b/servers.py new file mode 100644 index 00000000..99baf6b0 --- /dev/null +++ b/servers.py @@ -0,0 +1,47 @@ +import asyncpg + +from config import CLUSTERS, DATABASE_URL # Импортируем конфиг с серверами +from logger import logger + + +async def sync_servers_with_db(): + """ + Синхронизирует сервера из конфигурации CLUSTERS с базой данных. + """ + try: + conn = await asyncpg.connect(DATABASE_URL) + logger.info("Подключение к базе данных для синхронизации серверов успешно.") + + for cluster_name, servers in CLUSTERS.items(): + for server_key, server_info in servers.items(): + # Проверяем, существует ли сервер в базе данных + exists = await conn.fetchval( + """ + SELECT 1 FROM servers + WHERE cluster_name = $1 AND server_name = $2 + """, + cluster_name, + server_info["name"], + ) + + # Если сервера нет, добавляем его + 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"], + ) + logger.info(f"Сервер {server_info['name']} из кластера {cluster_name} добавлен в базу данных.") + else: + logger.info(f"Сервер {server_info['name']} из кластера {cluster_name} уже существует.") + + except Exception as e: + logger.error(f"Ошибка при синхронизации серверов: {e}") + finally: + await conn.close()