Spaces:
Running
Running
import asyncio | |
import logging | |
from aiohttp import web | |
#-----------------------Local Imports-------------------------# | |
from .API import api | |
from .APP import sub_app | |
from .routes_main import routes | |
from FileStream.bot import MULTI_CLIENTS, WORK_LOADS, ACTIVE_CLIENTS | |
# Set time to consider a client inactive (e.g., 10 minutes) | |
INACTIVITY_TIMEOUT = 180 # 3 minutes | |
async def clear_inactive_clients(): | |
"""Clear inactive clients from ACTIVE_CLIENTS.""" | |
await asyncio.sleep(INACTIVITY_TIMEOUT) # Check every INACTIVITY_TIMEOUT seconds | |
now = asyncio.get_event_loop().time() # Get current time | |
inactive_clients = [ | |
client_id for client_id, tg_connect in ACTIVE_CLIENTS.items() | |
if now - tg_connect.last_activity > INACTIVITY_TIMEOUT # Compare with last_activity timestamp | |
] | |
for client in inactive_clients: | |
# Log and clear the inactive client | |
logging.info(f"** Clearing inactive client: {client.name}") | |
del ACTIVE_CLIENTS[client] # Remove inactive client from ACTIVE_CLIENTS | |
async def root_route_handler(request): | |
return web.json_response({"status": "alive", "message": "Server is running","active_clients":[{"client_name": tg_connect.client.name} for client_id, tg_connect in ACTIVE_CLIENTS.items()],"public_ip":request.remote}) | |
def web_server(): | |
web_app = web.Application(client_max_size=500) | |
web_app.router.add_get('/', root_route_handler) | |
web_app.add_routes(routes) | |
web_app.add_subapp('/app', sub_app) | |
web_app.add_subapp('/api', api) | |
# Return the app to be used with AppRunner | |
return web_app | |