chore(infra): gate DB pool debug logs and de-duplicate rate-limit cleanup timer

This commit is contained in:
Yusuf İpek
2026-02-24 18:10:36 +03:00
parent 644b239ab3
commit 59b766d071
3 changed files with 26 additions and 11 deletions
+2
View File
@@ -5,6 +5,8 @@
# ============================================================================
# PostgreSQL connection string
DATABASE_URL="postgresql://user:password@localhost:5432/openframe?schema=public"
# Enable PostgreSQL pool connect/acquire debug logs (set to "true" only when debugging)
DB_POOL_DEBUG="false"
# ============================================================================
# AUTHENTICATION - NextAuth.js
+10 -6
View File
@@ -10,6 +10,8 @@ const globalForPool = globalThis as unknown as {
pgPool: Pool | undefined;
};
const isDbPoolDebugEnabled = process.env.DB_POOL_DEBUG === 'true';
function createPool(connectionString: string): Pool {
// Prevent multiple pools from being created during development (Next.js hot reload)
if (globalForPool.pgPool) {
@@ -31,13 +33,15 @@ function createPool(connectionString: string): Pool {
// Don't crash the app on unexpected pool errors
});
pool.on('connect', () => {
console.debug('New database connection established');
});
if (isDbPoolDebugEnabled) {
pool.on('connect', () => {
console.debug('New database connection established');
});
pool.on('acquire', () => {
console.debug('Connection acquired from pool');
});
pool.on('acquire', () => {
console.debug('Connection acquired from pool');
});
}
// Store pool globally to prevent multiple instances during development
if (process.env.NODE_ENV !== 'production') {
+14 -5
View File
@@ -1,6 +1,12 @@
import { db } from '@/lib/db';
import { NextResponse } from 'next/server';
const RATE_LIMIT_CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
const globalForRateLimitCleanup = globalThis as unknown as {
rateLimitCleanupIntervalStarted?: boolean;
};
interface RateLimitConfig {
windowMs: number; // Time window in milliseconds
maxRequests: number; // Max requests per window
@@ -172,12 +178,15 @@ export async function cleanupRateLimits(): Promise<void> {
}
}
// Start cleanup interval when the module is loaded (for self-hosted servers)
// Cleanup runs every 5 minutes to remove expired rate limit entries
if (typeof setInterval !== 'undefined') {
setInterval(() => {
// Start cleanup interval once per process to avoid duplicate scheduling on module reload.
if (!globalForRateLimitCleanup.rateLimitCleanupIntervalStarted && typeof setInterval !== 'undefined') {
const interval = setInterval(() => {
cleanupRateLimits().catch(console.error);
}, 5 * 60 * 1000);
}, RATE_LIMIT_CLEANUP_INTERVAL_MS);
// Avoid keeping Node.js process alive because of housekeeping timers.
interval.unref?.();
globalForRateLimitCleanup.rateLimitCleanupIntervalStarted = true;
}
/**