{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/mcp-servers\/mcp_db\/infrastructure\/__init__.py"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/mcp-servers\/mcp_db\/infrastructure\/protokoll_logger.py",
"content": "\"\"\"Protokoll Logger - Logging in ki_protokoll.mcp_log\"\"\"\nimport sys\n\nimport mysql.connector.pooling as pooling\n\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/mcp_db\")\nfrom config import Config\nfrom domain.log_contract import LogEntry\n\n\nclass ProtokollLogger:\n \"\"\"Schreibt in ki_protokoll.mcp_log - SRP: Nur Logging\"\"\"\n\n def __init__(self):\n self._pool = None\n\n def _get_pool(self):\n \"\"\"Erstellt oder gibt existierenden Logging Pool zurück\"\"\"\n if self._pool is None:\n self._pool = pooling.MySQLConnectionPool(\n pool_name=\"log_pool\",\n pool_size=2,\n host=Config.LOG_DB_HOST,\n database=Config.LOG_DB_NAME,\n user=Config.LOG_DB_USER,\n password=Config.LOG_DB_PASSWORD,\n charset=\"utf8mb4\",\n )\n return self._pool\n\n def log(self, entry: LogEntry) -> None:\n \"\"\"\n Schreibt LogEntry in Datenbank.\n\n Wirft Exception bei Fehler (kein silent failure).\n \"\"\"\n try:\n conn = self._get_pool().get_connection()\n cursor = conn.cursor()\n cursor.execute(\n \"\"\"INSERT INTO mcp_log\n (timestamp, client_name, request, status, duration_ms, error_message)\n VALUES (%s, %s, %s, %s, %s, %s)\"\"\",\n (\n entry.timestamp,\n entry.client_name,\n entry.request,\n entry.status,\n entry.duration_ms,\n entry.error_message,\n ),\n )\n conn.commit()\n cursor.close()\n conn.close()\n except Exception as e:\n # Fail-Safe: Exception werfen + stderr\n error_msg = f\"CRITICAL: Failed to write to mcp_log: {str(e)}\"\n print(error_msg, file=sys.stderr)\n raise RuntimeError(error_msg) from e\n",
"numLines": 61,
"startLine": 1,
"totalLines": 61
}
}
}