{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/opt\/mcp-servers\/mcp-db\/infrastructure\/protokoll_logger.py"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/opt\/mcp-servers\/mcp-db\/infrastructure\/db_connection.py",
"content": "\"\"\"Database Connection Pool\"\"\"\nimport sys\nfrom contextlib import contextmanager\n\nimport mysql.connector\nfrom mysql.connector import pooling\n\nsys.path.insert(0, \"\/opt\/mcp-servers\/mcp-db\")\nfrom config import Config\n\n\nclass DatabaseConnection:\n \"\"\"Singleton Connection Pool - SRP: Nur Verbindungsmanagement\"\"\"\n\n _pool = None\n\n @classmethod\n def get_pool(cls):\n \"\"\"Erstellt oder gibt existierenden Connection Pool zurück\"\"\"\n if cls._pool is None:\n cls._pool = pooling.MySQLConnectionPool(\n pool_name=\"mcp_pool\",\n pool_size=5,\n host=Config.DB_HOST,\n user=Config.DB_USER,\n password=Config.DB_PASSWORD,\n charset=\"utf8mb4\",\n connection_timeout=10,\n autocommit=True,\n )\n return cls._pool\n\n @classmethod\n @contextmanager\n def get_connection(cls, database: str):\n \"\"\"\n Context Manager für DB Connection.\n\n Args:\n database: Datenbankname (bereits validiert)\n \"\"\"\n conn = cls.get_pool().get_connection()\n try:\n # Datenbank wechseln (USE statement statt property)\n cursor = conn.cursor()\n cursor.execute(f\"USE {database}\")\n\n # Query Timeout setzen (MariaDB verwendet max_statement_time in Sekunden)\n try:\n cursor.execute(\n f\"SET SESSION max_statement_time = {Config.QUERY_TIMEOUT_SEC}\"\n )\n except Exception:\n pass # Falls Variable nicht unterstützt wird\n cursor.close()\n\n yield conn\n finally:\n conn.close()\n",
"numLines": 60,
"startLine": 1,
"totalLines": 60
}
}
}