mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
perf(api): bound worker pools and add telemetry
Share one configured PostgreSQL pool across worker repositories and make API and worker connection budgets explicit. Add privacy-safe aggregate request, query, pool, sync, and outbox telemetry, a loopback-only representative load fixture, bounded worker shutdown, and focused regression and integration coverage. Document the database-wide budget formula and defer pg_stat_statements activation to a reviewed migration and planned restart.
This commit is contained in:
1 parent
a13bbc3f65
commit
5c973c4ac5
25 files changed
+471
-16
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import { Pool } from 'pg';
|
||||
import { instrumentPool, type TelemetryProcess } from '../telemetry.js';
|
||||
|
||||
/**
|
||||
* A repository is constructed either from a connection string, in which case it
|
||||
@@ -23,13 +24,14 @@ export interface DatabasePoolOptions {
|
||||
*/
|
||||
export const DEFAULT_POOL_MAX = 10;
|
||||
|
||||
export function createDatabasePool(databaseUrl: string, options: DatabasePoolOptions = {}): Pool {
|
||||
return new Pool({
|
||||
export function createDatabasePool(databaseUrl: string, options: DatabasePoolOptions = {}, telemetryProcess?: TelemetryProcess): Pool {
|
||||
const pool = new Pool({
|
||||
connectionString: databaseUrl,
|
||||
max: options.max ?? DEFAULT_POOL_MAX,
|
||||
...(options.idleTimeoutMillis === undefined ? {} : { idleTimeoutMillis: options.idleTimeoutMillis }),
|
||||
...(options.connectionTimeoutMillis === undefined ? {} : { connectionTimeoutMillis: options.connectionTimeoutMillis }),
|
||||
});
|
||||
return telemetryProcess ? instrumentPool(telemetryProcess, pool) : pool;
|
||||
}
|
||||
|
||||
export interface ResolvedPool {
|
||||
|
||||
Reference in new issue
Block a user