import mysql from "mysql2/promise"; // Variablen für den Singleton-Pool let cachedPool; let connectionCount = 0; // Zähler für die aktiven Verbindungen // Funktion zum Abrufen des Pools function getPool() { if (!cachedPool) { cachedPool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT, connectionLimit: 20, // Setze ein Limit für gleichzeitige Verbindungen waitForConnections: true, queueLimit: 10, // Warteschlangenlimit für Verbindungen connectTimeout: 5000, // Timeout für Verbindungsversuche (5 Sekunden) //acquireTimeout: 10000, // Timeout für Verbindungsanforderungen aus dem Pool (10 Sekunden) idleTimeout: 60000, // 1 Minute }); // Ereignisse für das Protokollieren der Verbindungsstatistiken let maxUsed = 0; cachedPool.on("acquire", () => { connectionCount++; if (process.env.NODE_ENV === "development") { console.log("\x1b[36m%s\x1b[0m", `➕ Connection acquired (${connectionCount} total)`); if (connectionCount > maxUsed) { maxUsed = connectionCount; console.log(`📈 Neue Höchstzahl aktiver gleichzeitiger Verbindungen: ${maxUsed}`); } } }); cachedPool.on("release", () => { connectionCount--; if (process.env.NODE_ENV === "development") { console.log("\x1b[32m%s\x1b[0m", `➖ Connection released (${connectionCount} total)`); } }); cachedPool.on("enqueue", () => { if (process.env.NODE_ENV === "development") { console.warn("\x1b[33m%s\x1b[0m", "⏳ Pool voll – Anfrage in Warteschlange"); } }); } return cachedPool; } // Optionale Funktion zum Schließen aller Verbindungen im Pool (manuell aufzurufen) export function closePool() { if (cachedPool) { cachedPool.end(() => { console.log("All pool connections closed."); }); cachedPool = null; // Setze den Pool auf null, um sicherzustellen, dass er neu erstellt wird, falls benötigt. } } export default getPool;