mirror of
https://github.com/gadgethd/ukmesh.git
synced 2026-09-02 19:23:45 +00:00
fix: honor chart analytics timeout
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import pg from 'pg';
|
||||
import fs from 'node:fs';
|
||||
import { databaseConfig } from '../platform/config/database.js';
|
||||
import {
|
||||
analyticsStatementTimeoutMs,
|
||||
databaseConfig,
|
||||
} from '../platform/config/database.js';
|
||||
import { resolveDbAssetPath } from './assets.js';
|
||||
import { runMigrations } from './migrations.js';
|
||||
import { UKMESH_NETWORKS } from '../networks.js';
|
||||
@@ -58,8 +61,8 @@ const analyticsPool = new Pool({
|
||||
max: 2,
|
||||
idleTimeoutMillis: databaseConfig.idleTimeoutMs,
|
||||
connectionTimeoutMillis: databaseConfig.connectionTimeoutMs,
|
||||
statement_timeout: 300_000, // 5 minutes — analytics queries are intentionally slow
|
||||
query_timeout: 300_000,
|
||||
statement_timeout: analyticsStatementTimeoutMs(databaseConfig.statementTimeoutMs),
|
||||
query_timeout: analyticsStatementTimeoutMs(databaseConfig.statementTimeoutMs),
|
||||
});
|
||||
|
||||
analyticsPool.on('error', (err) => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { boundedIntegerSetting } from './boundedNumber.js';
|
||||
import { loadDatabaseConfig } from './database.js';
|
||||
import { analyticsStatementTimeoutMs, loadDatabaseConfig } from './database.js';
|
||||
|
||||
test('database numeric settings use bounded deployment-safe defaults', () => {
|
||||
assert.deepEqual(loadDatabaseConfig({}), {
|
||||
@@ -48,3 +48,9 @@ test('database configuration rejects invalid pool, timeout, and schema settings
|
||||
/Invalid DATABASE_SCHEMA/,
|
||||
);
|
||||
});
|
||||
|
||||
test('analytics queries honor a longer configured timeout while retaining a safe floor', () => {
|
||||
assert.equal(analyticsStatementTimeoutMs(30_000), 300_000);
|
||||
assert.equal(analyticsStatementTimeoutMs(900_000), 900_000);
|
||||
assert.equal(analyticsStatementTimeoutMs(0), 0);
|
||||
});
|
||||
|
||||
@@ -37,4 +37,8 @@ export function loadDatabaseConfig(env: NodeJS.ProcessEnv) {
|
||||
} as const;
|
||||
}
|
||||
|
||||
export function analyticsStatementTimeoutMs(configuredTimeoutMs: number): number {
|
||||
return configuredTimeoutMs === 0 ? 0 : Math.max(300_000, configuredTimeoutMs);
|
||||
}
|
||||
|
||||
export const databaseConfig = loadDatabaseConfig(process.env);
|
||||
|
||||
Reference in New Issue
Block a user