import os import asyncio import logging from aiohttp import web #-----------------------Local Imports-------------------------# from .API import api from .APP import app from .Authentication import auth from .routes_main import routes from FileStream.bot import MULTI_CLIENTS, WORK_LOADS, ACTIVE_CLIENTS """ from .Middlewares.jwt_middleware import jwt_middleware from .Middlewares.app_token_middleware import app_token_middleware from .Middlewares.logging_middleware import logging_middleware #from .Middlewares.rate_limit_middleware import rate_limit_middleware """ # Set time to consider a client inactive (e.g., 10 minutes) INACTIVITY_TIMEOUT = 180 # 3 minutes # Define the path to the template (static) folder template_folder = os.path.join(os.path.dirname(__file__), 'template') 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=50) web_app.router.add_get('/', root_route_handler) web_app.add_routes(routes) web_app.add_subapp('/app', app) web_app.add_subapp('/api', api) web_app.add_subapp('/auth', auth) # Add static file handler web_app.router.add_static('/static/', template_folder) return web_app