fix: parse DATABASE_URL in pool clients + extend Ollama health timeout to 15s

Gateway and learning DB clients now prefer DATABASE_URL connection string
over individual DB_* env vars — matches ecosystem.config.cjs convention.
Ollama health check timeout increased 5→15s for Cloudflare tunnel latency.
This commit is contained in:
Rene Fichtmueller 2026-04-02 23:03:31 +02:00
parent 4c5003f9fc
commit 773fd368e0
3 changed files with 45 additions and 20 deletions

View File

@ -5,18 +5,35 @@ const { Pool } = pg;
let pool: pg.Pool | null = null;
export function getPool(): pg.Pool {
if (!pool) {
pool = new Pool({
host: process.env['DB_HOST'] ?? 'localhost',
port: parseInt(process.env['DB_PORT'] ?? '5432', 10),
database: process.env['DB_NAME'] ?? 'llm_gateway',
user: process.env['DB_USER'] ?? 'llm_gateway',
password: process.env['DB_PASSWORD'] ?? '',
/**
* Build pool config from DATABASE_URL (preferred) or individual DB_* env vars.
* DATABASE_URL format: postgresql://user:password@host:port/database
*/
function buildPoolConfig(): pg.PoolConfig {
const databaseUrl = process.env['DATABASE_URL'];
if (databaseUrl) {
return {
connectionString: databaseUrl,
max: 10,
idleTimeoutMillis: 30_000,
connectionTimeoutMillis: 5_000,
});
};
}
return {
host: process.env['DB_HOST'] ?? 'localhost',
port: parseInt(process.env['DB_PORT'] ?? '5432', 10),
database: process.env['DB_NAME'] ?? 'llm_gateway',
user: process.env['DB_USER'] ?? 'llm',
password: process.env['DB_PASSWORD'] ?? '',
max: 10,
idleTimeoutMillis: 30_000,
connectionTimeoutMillis: 5_000,
};
}
export function getPool(): pg.Pool {
if (!pool) {
pool = new Pool(buildPoolConfig());
pool.on('error', (err) => {
logger.error({ err }, 'PostgreSQL pool error');

View File

@ -21,7 +21,7 @@ async function checkOllama(baseUrl: string): Promise<{ status: 'ok' | 'down'; la
const start = Date.now();
try {
const response = await fetch(`${baseUrl}/api/tags`, {
signal: AbortSignal.timeout(5000),
signal: AbortSignal.timeout(15000),
});
const latency_ms = Date.now() - start;
if (!response.ok) {

View File

@ -5,18 +5,26 @@ const { Pool } = pg;
let pool: pg.Pool | null = null;
function buildPoolConfig(): pg.PoolConfig {
const databaseUrl = process.env['DATABASE_URL'];
if (databaseUrl) {
return { connectionString: databaseUrl, max: 5, idleTimeoutMillis: 30_000, connectionTimeoutMillis: 5_000 };
}
return {
host: process.env['DB_HOST'] ?? 'localhost',
port: parseInt(process.env['DB_PORT'] ?? '5432', 10),
database: process.env['DB_NAME'] ?? 'llm_gateway',
user: process.env['DB_USER'] ?? 'llm',
password: process.env['DB_PASSWORD'] ?? '',
max: 5,
idleTimeoutMillis: 30_000,
connectionTimeoutMillis: 5_000,
};
}
export function getPool(): pg.Pool {
if (!pool) {
pool = new Pool({
host: process.env['DB_HOST'] ?? 'localhost',
port: parseInt(process.env['DB_PORT'] ?? '5432', 10),
database: process.env['DB_NAME'] ?? 'llm_gateway',
user: process.env['DB_USER'] ?? 'llm',
password: process.env['DB_PASSWORD'] ?? '',
max: 5,
idleTimeoutMillis: 30_000,
connectionTimeoutMillis: 5_000,
});
pool = new Pool(buildPoolConfig());
pool.on('error', (err) => {
logger.error({ err }, 'PostgreSQL pool error (learning engine)');