UNPKG

@clickup/ent-framework

Version:

A PostgreSQL graph-database-alike library with microsharding and row-level security

61 lines (56 loc) 1.74 kB
import type { ClientRole } from "./Client"; import type { QueryAnnotation } from "./QueryAnnotation"; /** * Loggers are called at different stages of the query lifecycle. We do not use * EventEmitter for several reasons: * 1. It is not friendly to mocking in Jest. * 2. The built-in EventEmitter is not strongly typed. */ export interface Loggers { /** Logs actual queries to the database (after batching). */ clientQueryLogger?: (props: ClientQueryLoggerProps) => void; /** Logs errors which did not throw through (typically recoverable). */ swallowedErrorLogger: (props: SwallowedErrorLoggerProps) => void; /** Called when Island-from-Shard location fails (on every retry). */ locateIslandErrorLogger?: (props: LocateIslandErrorLoggerProps) => void; } export interface ClientQueryLoggerProps { annotations: QueryAnnotation[]; op: string; shard: string; table: string; batchFactor: number; msg: string; output: unknown; elapsed: { total: number; acquire: number; }; connStats: { id: string; queriesSent: number; }; poolStats: { /** Total number of connections in the pool. */ totalConns: number; /** Connections not busy running a query. */ idleConns: number; /** Once all idle connections are over, requests are queued waiting for a * new available connection. This is the number of such queued requests. */ queuedReqs: number; }; error: string | undefined; role: ClientRole; backend: string; address: string; } export interface SwallowedErrorLoggerProps { where: string; error: unknown; elapsed: number | null; importance: "low" | "normal"; } export interface LocateIslandErrorLoggerProps { attempt: number; error: unknown; }