58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
const { Pool, Client } = require('pg');
|
|
const { Client: SSHClient } = require('ssh2');
|
|
|
|
let pool;
|
|
|
|
function initPool(config) {
|
|
// Log config without sensitive data
|
|
const safeConfig = {
|
|
host: config.host || process.env.DB_HOST,
|
|
user: config.user || process.env.DB_USER,
|
|
database: config.database || process.env.DB_NAME,
|
|
port: config.port || process.env.DB_PORT || 5432,
|
|
max: config.max || 10,
|
|
idleTimeoutMillis: config.idleTimeoutMillis || 30000,
|
|
connectionTimeoutMillis: config.connectionTimeoutMillis || 2000,
|
|
ssl: config.ssl || false,
|
|
password: (config.password || process.env.DB_PASSWORD) ? '[password set]' : '[no password]'
|
|
};
|
|
console.log('[Database] Initializing pool with config:', safeConfig);
|
|
|
|
// Create the pool with the configuration
|
|
pool = new Pool({
|
|
host: config.host || process.env.DB_HOST,
|
|
user: config.user || process.env.DB_USER,
|
|
password: config.password || process.env.DB_PASSWORD,
|
|
database: config.database || process.env.DB_NAME,
|
|
port: config.port || process.env.DB_PORT || 5432,
|
|
max: config.max || 10,
|
|
idleTimeoutMillis: config.idleTimeoutMillis || 30000,
|
|
connectionTimeoutMillis: config.connectionTimeoutMillis || 2000,
|
|
ssl: config.ssl || false
|
|
});
|
|
|
|
// Test the pool connection
|
|
return pool.connect()
|
|
.then(client => {
|
|
console.log('[Database] Pool connection successful');
|
|
client.release();
|
|
return pool;
|
|
})
|
|
.catch(err => {
|
|
console.error('[Database] Connection failed:', err);
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
async function getConnection() {
|
|
if (!pool) {
|
|
throw new Error('Database pool not initialized');
|
|
}
|
|
return pool.connect();
|
|
}
|
|
|
|
module.exports = {
|
|
initPool,
|
|
getConnection,
|
|
getPool: () => pool
|
|
};
|