Streaming: add development logging of database queries (#32945)

This commit is contained in:
Emelia Smith 2024-11-18 10:34:34 +01:00 committed by GitHub
parent 03ee08c2da
commit 9a46329fbd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 34 additions and 2 deletions

View file

@ -116,13 +116,44 @@ let pool;
/**
*
* @param {pg.PoolConfig} config
* @param {string} environment
* @param {import('pino').Logger} logger
* @returns {pg.Pool}
*/
export function getPool(config) {
export function getPool(config, environment, logger) {
if (pool) {
return pool;
}
pool = new pg.Pool(config);
// Setup logging on pool.query and client.query for checked out clients:
// This is taken from: https://node-postgres.com/guides/project-structure
if (environment === 'development') {
const logQuery = (originalQuery) => {
return async (queryTextOrConfig, values, ...rest) => {
const start = process.hrtime();
const result = await originalQuery.apply(pool, [queryTextOrConfig, values, ...rest]);
const duration = process.hrtime(start);
const durationInMs = (duration[0] * 1000000000 + duration[1]) / 1000000;
logger.debug({
query: queryTextOrConfig,
values,
duration: durationInMs
}, 'Executed database query');
return result;
};
};
pool.on('connect', (client) => {
const originalQuery = client.query.bind(client);
client.query = logQuery(originalQuery);
});
}
return pool;
}

View file

@ -101,7 +101,8 @@ const CHANNEL_NAMES = [
];
const startServer = async () => {
const pgPool = Database.getPool(Database.configFromEnv(process.env, environment));
const pgConfig = Database.configFromEnv(process.env, environment);
const pgPool = Database.getPool(pgConfig, environment, logger);
const metrics = setupMetrics(CHANNEL_NAMES, pgPool);