ваше сообщение коммита

This commit is contained in:
2025-08-16 22:12:00 +03:00
parent fe0dc6509b
commit 1d636c113f
28 changed files with 6809 additions and 525 deletions

View File

@@ -30,8 +30,39 @@ let pool = new Pool({
user: process.env.DB_USER || 'dapp_user',
password: process.env.DB_PASSWORD,
ssl: false,
// Настройки для предотвращения утечек памяти
max: 10, // Максимальное количество клиентов в пуле
min: 0, // Минимальное количество клиентов в пуле
idleTimeoutMillis: 30000, // Время жизни неактивного клиента (30 сек)
connectionTimeoutMillis: 2000, // Таймаут подключения (2 сек)
maxUses: 7500, // Максимальное количество использований клиента
allowExitOnIdle: true, // Разрешить выход при отсутствии активных клиентов
});
// Увеличиваем лимит обработчиков событий для предотвращения предупреждений
pool.setMaxListeners(20);
// Добавляем обработчики для правильного закрытия пула
pool.on('error', (err) => {
console.error('Unexpected error on idle client', err);
process.exit(-1);
});
// Обработчик для очистки при завершении процесса
process.on('SIGINT', async () => {
console.log('Closing database pool...');
await pool.end();
process.exit(0);
});
process.on('SIGTERM', async () => {
console.log('Closing database pool...');
await pool.end();
process.exit(0);
});
console.log('Пул создан:', pool.options || pool);
// Проверяем подключение к базе данных
pool.query('SELECT NOW()')
.then(res => {
@@ -41,8 +72,6 @@ pool.query('SELECT NOW()')
console.error('Ошибка подключения к базе данных:', err);
});
console.log('Пул создан:', pool.options || pool);
function getPool() {
return pool;
}
@@ -69,10 +98,11 @@ async function reinitPoolFromDbSettings() {
if (!res.rows.length) throw new Error('DB settings not found');
const dbSettings = res.rows[0];
// Закрываем старый пул
// Закрываем старый пул правильно
console.log('Закрываем старый пул подключений...');
await pool.end();
// Создаём новый пул с расшифрованными настройками
// Создаём новый пул с расшифрованными настройками и теми же параметрами для предотвращения утечек
pool = new Pool({
host: dbSettings.db_host_encrypted ? await decryptValue(dbSettings.db_host_encrypted) : process.env.DB_HOST || 'postgres',
port: parseInt(dbSettings.db_port || process.env.DB_PORT || '5432'),
@@ -80,6 +110,22 @@ async function reinitPoolFromDbSettings() {
user: dbSettings.db_user_encrypted ? await decryptValue(dbSettings.db_user_encrypted) : process.env.DB_USER || 'dapp_user',
password: dbSettings.db_password_encrypted ? await decryptValue(dbSettings.db_password_encrypted) : process.env.DB_PASSWORD,
ssl: false,
// Те же настройки для предотвращения утечек
max: 10,
min: 0,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
maxUses: 7500,
allowExitOnIdle: true,
});
// Устанавливаем лимит обработчиков для нового пула
pool.setMaxListeners(20);
// Добавляем обработчики ошибок для нового пула
pool.on('error', (err) => {
console.error('Unexpected error on idle client', err);
process.exit(-1);
});
// Пересоздаём session middleware