начало сап системы и помойму всё

This commit is contained in:
Disledg
2025-01-04 21:17:24 +03:00
parent 3544562b96
commit 9407806cc2
8 changed files with 507 additions and 18 deletions

51
main.py
View File

@@ -1,8 +1,12 @@
from fastapi import FastAPI
from instance.configdb import init_postgresql, init_mongodb, close_connections
from app.routes import user_router, subscription_router
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from app.routes import user_router, subscription_router, sup_router
from app.services.db_manager import DatabaseManager
from instance.configdb import get_postgres_session
from app.services.mongo_rep import MongoDBRepository
from app.services.xui_rep import PanelInteraction
import logging
logging.basicConfig(level=logging.INFO)
@@ -11,6 +15,47 @@ logger = logging.getLogger(__name__)
app = FastAPI()
database_manager = DatabaseManager(session_generator=get_postgres_session)
mongo_repo = MongoDBRepository()
async def delete_depleted_clients_task():
"""
Удаляет исчерпанных клиентов на всех серверах из MongoDB.
"""
try:
# Получаем список серверов из MongoDB
servers = await mongo_repo.list_servers()
if not servers:
logger.warning("Список серверов пуст. Задача пропущена.")
return
# Проходим по каждому серверу и вызываем delete_depleted_clients
for server in servers:
base_url = server.get("base_url")
login_data = server.get("login_data")
certificate = server.get("certificate")
if not base_url or not login_data:
logger.error(f"Пропуск сервера из-за отсутствия данных: {server}")
continue
# Создаём экземпляр PanelInteraction
panel = PanelInteraction(
base_url=base_url,
login_data=login_data,
logger=logger,
certificate=certificate
)
# Выполняем удаление исчерпанных клиентов
response = await panel.delete_depleted_clients()
if response:
logger.info(f"Удаление клиентов завершено успешно для сервера: {base_url}")
else:
logger.warning(f"Не удалось удалить клиентов для сервера: {base_url}")
except Exception as e:
logger.error(f"Ошибка при выполнении задачи delete_depleted_clients: {e}")
scheduler = AsyncIOScheduler()
@app.on_event("startup")
async def startup():
@@ -18,6 +63,8 @@ async def startup():
Инициализация подключения к базам данных.
"""
try:
scheduler.add_job(delete_depleted_clients_task, CronTrigger(hour=23, minute=59))
scheduler.start()
logger.info("Инициализация PostgreSQL...")
await init_postgresql()
logger.info("PostgreSQL успешно инициализирован.")
@@ -44,7 +91,7 @@ async def shutdown():
app.include_router(user_router, prefix="/api")
#app.include_router(payment_router, prefix="/api")
app.include_router(subscription_router, prefix="/api")
app.include_router(sup_router, prefix="/api")
@app.get("/")
def read_root():
return {"message": "FastAPI приложение работает!"}