Files
Iain Sproat 1f7620a281 chore(logging): log migration of databases (#3700)
- tidy up Database error handling context data
2024-12-16 13:40:29 +00:00

44 lines
1.5 KiB
TypeScript

import type { Knex } from 'knex'
import { numberOfFreeConnections } from '@/modules/shared/helpers/dbHelper'
export const retrieveMetadataFromDatabaseClient = (
dbClient: Knex | undefined
): Record<string, unknown> => {
const additionalInfo: Record<string, unknown> = {}
if (!dbClient) {
return additionalInfo
}
const dbClientClient = dbClient.client
// attempt to get more info about the connection string (without exposing the password!)
try {
const connectionURL = new URL(dbClientClient.config?.connection?.connectionString)
additionalInfo.databaseHost = connectionURL.hostname
additionalInfo.databasePort = connectionURL.port
additionalInfo.databaseUser = connectionURL.username
additionalInfo.databaseOrConnectionPoolName = connectionURL.pathname
.split('/')
.pop()
} catch {
// ignore problems and move on
}
// attempt to get more info about the state of the connection pool
try {
const connPool = dbClientClient?.pool
additionalInfo.databasePoolConnectionsUsed = connPool.numUsed()
additionalInfo.databasePoolConnectionsPendingAcquires =
connPool.numPendingAcquires()
additionalInfo.databasePoolConnectionsPendingCreates = connPool.numPendingCreates()
additionalInfo.databasePoolConnectionsPendingValidations =
connPool.numPendingValidations()
additionalInfo.databasePoolConnectionsRemainingCapacity =
numberOfFreeConnections(dbClient)
} catch {
// ignore problems and move on
}
return additionalInfo
}