feat: auto delete server if it is inactive for more than 5 minutes, minor fix
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
from fastapi import HTTPException
|
||||
from app.db.database import db, users_collection
|
||||
from app.models.server.prank import PrankCommand, PrankCommandUpdate
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
import uuid
|
||||
from app.services.server.command import CommandService
|
||||
|
||||
@ -124,6 +124,29 @@ class PrankService:
|
||||
|
||||
async def get_all_servers(self):
|
||||
"""Получение списка всех доступных серверов"""
|
||||
# Проверяем и удаляем неактивные серверы (более 5 минут без данных)
|
||||
current_time = datetime.utcnow()
|
||||
inactive_threshold = 5 * 60 # 5 минут в секундах
|
||||
|
||||
# Находим серверы, которые не отправляли данные больше 5 минут
|
||||
# Учитываем, что у некоторых серверов может не быть поля last_activity
|
||||
inactive_servers = await game_servers_collection.find({
|
||||
"last_activity": {
|
||||
"$exists": True,
|
||||
"$lt": current_time - timedelta(seconds=inactive_threshold)
|
||||
}
|
||||
}).to_list(100)
|
||||
|
||||
# Удаляем неактивные серверы
|
||||
if inactive_servers:
|
||||
server_ids = [server["id"] for server in inactive_servers]
|
||||
await game_servers_collection.delete_many({"id": {"$in": server_ids}})
|
||||
|
||||
# Опционально: логирование удаленных серверов
|
||||
for server in inactive_servers:
|
||||
print(f"Удален неактивный сервер: {server['name']} (ID: {server['id']})")
|
||||
|
||||
# Получаем актуальный список серверов
|
||||
servers = await game_servers_collection.find().to_list(100)
|
||||
|
||||
# Если нет зарегистрированных серверов, вернем пустой список
|
||||
@ -144,7 +167,8 @@ class PrankService:
|
||||
"port": server.get("port"),
|
||||
"description": server.get("description", ""),
|
||||
"online_players": online_count,
|
||||
"max_players": server.get("max_players", 0)
|
||||
"max_players": server.get("max_players", 0),
|
||||
"last_activity": server.get("last_activity")
|
||||
})
|
||||
|
||||
return result
|
||||
|
Reference in New Issue
Block a user