diff --git a/cmd_chat/server/factory.py b/cmd_chat/server/factory.py index adb81dd..e3b396d 100644 --- a/cmd_chat/server/factory.py +++ b/cmd_chat/server/factory.py @@ -7,7 +7,6 @@ from sanic_ext import Extend from .managers import ConnectionManager from .stores import MessageStore, UserSessionStore from .srp_auth import SRPAuthManager -from .logger import logger from .routes import register_routes @@ -32,12 +31,10 @@ def create_app(password: str = "", name: str = "cmd-chat-server") -> Sanic: def register_lifecycle(app: Sanic) -> None: @app.before_server_start async def setup(app: Sanic): - logger.info("Server starting...") app.ctx.cleanup_task = asyncio.create_task(cleanup_stale_sessions(app)) @app.after_server_stop async def teardown(app: Sanic): - logger.info("Server shutting down...") if app.ctx.cleanup_task: app.ctx.cleanup_task.cancel() with suppress(asyncio.CancelledError): diff --git a/cmd_chat/server/logger.py b/cmd_chat/server/logger.py deleted file mode 100644 index 6eca880..0000000 --- a/cmd_chat/server/logger.py +++ /dev/null @@ -1,6 +0,0 @@ -import logging - -logging.basicConfig( - level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" -) -logger = logging.getLogger(__name__) diff --git a/cmd_chat/server/managers.py b/cmd_chat/server/managers.py index a1c56dc..089d40d 100644 --- a/cmd_chat/server/managers.py +++ b/cmd_chat/server/managers.py @@ -1,7 +1,6 @@ import asyncio from typing import Optional from sanic import Websocket -from .logger import logger class ConnectionManager: @@ -12,13 +11,11 @@ class ConnectionManager: async def connect(self, user_id: str, websocket: Websocket) -> None: async with self._lock: self.active_connections[user_id] = websocket - logger.info(f"Client connected: {user_id}") async def disconnect(self, user_id: str) -> None: async with self._lock: if user_id in self.active_connections: del self.active_connections[user_id] - logger.info(f"Client disconnected: {user_id}") async def broadcast(self, message: str, exclude_user: Optional[str] = None) -> None: async with self._lock: @@ -29,7 +26,6 @@ class ConnectionManager: try: await connection.send(message) except Exception: - logger.exception(f"Failed to send message to {user_id}") disconnected.append(user_id) for user_id in disconnected: @@ -43,6 +39,5 @@ class ConnectionManager: await connection.send(message) return True except Exception: - logger.exception(f"Failed to send personal message to {user_id}") return False return False diff --git a/cmd_chat/server/server.py b/cmd_chat/server/server.py index 99df7fa..87e03c0 100644 --- a/cmd_chat/server/server.py +++ b/cmd_chat/server/server.py @@ -1,5 +1,4 @@ from typing import Optional -from .logger import logger from .factory import create_app @@ -10,7 +9,6 @@ def run_server( workers: int = 1, ) -> None: app = create_app(password=password or "") - logger.info(f"Starting server on {host}:{port}") app.run( host=host, diff --git a/cmd_chat/server/stores.py b/cmd_chat/server/stores.py index 2b19949..3294300 100644 --- a/cmd_chat/server/stores.py +++ b/cmd_chat/server/stores.py @@ -1,6 +1,5 @@ from typing import Optional from .models import Message, UserSession -from .logger import logger class MessageStore: @@ -9,7 +8,7 @@ class MessageStore: def add(self, message: Message) -> None: self._messages.append(message) - logger.info(f"Message added: {message.id} from {message.username}") + def get_all(self) -> list[Message]: return self._messages.copy() @@ -17,7 +16,7 @@ class MessageStore: def clear(self) -> None: count = len(self._messages) self._messages.clear() - logger.info(f"Cleared {count} messages") + def count(self) -> int: return len(self._messages) @@ -29,7 +28,7 @@ class UserSessionStore: def add(self, session: UserSession) -> None: self._sessions[session.user_id] = session - logger.info(f"Session created: {session.user_id} ({session.username})") + def get(self, user_id: str) -> Optional[UserSession]: return self._sessions.get(user_id) @@ -41,7 +40,7 @@ class UserSessionStore: def remove(self, user_id: str) -> None: if user_id in self._sessions: del self._sessions[user_id] - logger.info(f"Session removed: {user_id}") + def cleanup_stale(self, timeout_seconds: int = 3600) -> int: stale_ids = [ @@ -49,8 +48,6 @@ class UserSessionStore: ] for uid in stale_ids: del self._sessions[uid] - if stale_ids: - logger.info(f"Cleaned up {len(stale_ids)} stale sessions") return len(stale_ids) def get_all(self) -> list[UserSession]: diff --git a/cmd_chat/server/views.py b/cmd_chat/server/views.py index 827ee5e..755c4da 100644 --- a/cmd_chat/server/views.py +++ b/cmd_chat/server/views.py @@ -7,7 +7,6 @@ from sanic import Sanic, Request, response, Websocket from sanic.response import HTTPResponse, json as json_response from .models import Message, UserSession -from .logger import logger from .helpers import ( get_client_ip, send_state, @@ -31,8 +30,6 @@ async def srp_init(request: Request, app: Sanic) -> HTTPResponse: user_id, B, salt = app.ctx.srp_manager.init_auth(username, client_public) - logger.info(f"SRP init: {username} ({user_id[:8]}...)") - return response.json( { "user_id": user_id, @@ -42,7 +39,6 @@ async def srp_init(request: Request, app: Sanic) -> HTTPResponse: ) except Exception: - logger.exception("SRP init failed") return response.json({"error": "SRP init failed"}, status=500) @@ -70,7 +66,6 @@ async def srp_verify(request: Request, app: Sanic) -> HTTPResponse: ) app.ctx.session_store.add(session) - logger.info(f"SRP verified: {username} ({user_id[:8]}...)") return response.json( { @@ -80,10 +75,8 @@ async def srp_verify(request: Request, app: Sanic) -> HTTPResponse: ) except ValueError as e: - logger.warning(f"SRP verify failed: {e}") return response.json({"error": str(e)}, status=401) except Exception: - logger.exception("SRP verify failed") return response.json({"error": "SRP verify failed"}, status=500) @@ -128,7 +121,7 @@ async def chat_ws(request: Request, ws: Websocket, app: Sanic) -> None: ) except Exception: - logger.exception(f"WebSocket error for {user_id}") + pass finally: await manager.disconnect(user_id) await manager.broadcast(