- FastAPI REST API with JWT auth - aiogram 3 Telegram bot with admin middleware - APScheduler daily tasks (expiry, reminders, revoke, sync) - SQLAlchemy 2 async ORM with Alembic migrations - Jinja2 admin panel (Dashboard, Users, Payments, Servers, Tariffs) - VPN provider abstraction with MockProvider - Stats service with revenue/subscription analytics - Docker Compose (PostgreSQL + Redis + app) - Healthcheck endpoint
34 lines
972 B
Python
34 lines
972 B
Python
from loguru import logger
|
|
|
|
from app.database import async_session_factory
|
|
from app.repositories.server import ServerRepository
|
|
from app.services.server import ServerService
|
|
|
|
|
|
async def sync_servers() -> None:
|
|
logger.info("[Scheduler] Syncing server status")
|
|
|
|
async with async_session_factory() as session:
|
|
server_repo = ServerRepository(session)
|
|
server_service = ServerService(server_repo)
|
|
|
|
active = await server_service.get_active()
|
|
|
|
if not active:
|
|
logger.info("[Scheduler] No active servers found")
|
|
return
|
|
|
|
for server in active:
|
|
logger.info(
|
|
"[Scheduler] Server {}: {}:{}, protocol={}, load={}%",
|
|
server.name,
|
|
server.host,
|
|
server.port,
|
|
server.protocol.value,
|
|
server.load_percent,
|
|
)
|
|
|
|
logger.info(
|
|
"[Scheduler] Synced {} active servers", len(active)
|
|
)
|