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
JavaScript
/**
* @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;