UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

60 lines (53 loc) 2.1 kB
/** * @file Detect connection leak patterns * @description Single responsibility: Identify potential database connection leaks */ const findPatternInRange = require('../helpers/findPatternInRange'); function detectConnectionLeaks(lines, filePath) { const issues = []; for (let i = 0; i < lines.length; i++) { const line = lines[i]; const lineNumber = i + 1; const trimmed = line.trim(); // Database connections without proper cleanup if (/\.createConnection\s*\(|\.getConnection\s*\(/.test(trimmed)) { // Look for connection close/release const hasCleanup = findPatternInRange(lines, i, i + 30, /\.close\s*\(|\.release\s*\(|\.end\s*\(/); if (!hasCleanup) { issues.push({ type: 'connection_leak', severity: 'HIGH', category: 'Database', location: `${filePath}:${lineNumber}`, line: lineNumber, code: trimmed, description: 'Database connection created without proper cleanup', summary: 'Potential connection leak', recommendation: 'Add connection.close() or connection.release() in finally block', effort: 1, impact: 'Prevents connection pool exhaustion', estimatedSavings: 'prevents connection leaks' }); } } // Connection pooling issues if (/new\s+\w*Connection\s*\(/i.test(trimmed) && /for\s*\(|while\s*\(/.test(trimmed)) { issues.push({ type: 'connection_creation_in_loop', severity: 'CRITICAL', category: 'Database', location: `${filePath}:${lineNumber}`, line: lineNumber, code: trimmed, description: 'Creating database connections in loop - connection pool exhaustion', summary: 'Connection creation in loop', recommendation: 'Use connection pooling or create connection once outside loop', effort: 2, impact: 'Prevents connection pool exhaustion', estimatedSavings: 'proper connection management' }); } } return issues; } module.exports = detectConnectionLeaks;