46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { getPoolStats } from "./database"
|
|
|
|
let monitoringInterval: NodeJS.Timeout | null = null
|
|
|
|
export function startConnectionMonitoring() {
|
|
if (monitoringInterval) {
|
|
return // Already monitoring
|
|
}
|
|
|
|
console.log("Starting database connection monitoring...")
|
|
|
|
monitoringInterval = setInterval(() => {
|
|
const stats = getPoolStats()
|
|
if (stats) {
|
|
const utilizationRate = (stats.totalConnections - stats.freeConnections) / stats.connectionLimit
|
|
|
|
console.log(
|
|
`DB Pool Stats: ${stats.totalConnections}/${stats.connectionLimit} total, ${stats.freeConnections} free, ${stats.acquiringConnections} acquiring (${Math.round(utilizationRate * 100)}% utilization)`,
|
|
)
|
|
|
|
// Warn if utilization is high
|
|
if (utilizationRate > 0.8) {
|
|
console.warn("⚠️ High database connection utilization detected!")
|
|
}
|
|
|
|
// Warn if many connections are waiting
|
|
if (stats.acquiringConnections > 3) {
|
|
console.warn("⚠️ Many connections waiting for pool!")
|
|
}
|
|
}
|
|
}, 30000) // Every 30 seconds
|
|
}
|
|
|
|
export function stopConnectionMonitoring() {
|
|
if (monitoringInterval) {
|
|
clearInterval(monitoringInterval)
|
|
monitoringInterval = null
|
|
console.log("Stopped database connection monitoring")
|
|
}
|
|
}
|
|
|
|
// Auto-start monitoring in production
|
|
if (process.env.NODE_ENV === "production") {
|
|
startConnectionMonitoring()
|
|
}
|