mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-21 09:38:01 +02:00
Server: Added way to debug slow queries
This commit is contained in:
parent
1c597883ef
commit
e8532441bc
@ -13,3 +13,11 @@ services:
|
|||||||
- POSTGRES_PASSWORD=joplin
|
- POSTGRES_PASSWORD=joplin
|
||||||
- POSTGRES_USER=joplin
|
- POSTGRES_USER=joplin
|
||||||
- POSTGRES_DB=joplin
|
- POSTGRES_DB=joplin
|
||||||
|
|
||||||
|
# Use this to specify additional Postgres
|
||||||
|
# config parameters:
|
||||||
|
#
|
||||||
|
# command:
|
||||||
|
# - "postgres"
|
||||||
|
# - "-c"
|
||||||
|
# - "log_min_duration_statement=0"
|
||||||
|
@ -94,7 +94,27 @@ export async function waitForConnection(dbConfig: DatabaseConfig): Promise<Conne
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function connectDb(dbConfig: DatabaseConfig): Promise<DbConnection> {
|
export async function connectDb(dbConfig: DatabaseConfig): Promise<DbConnection> {
|
||||||
return knex(makeKnexConfig(dbConfig));
|
const connection = knex(makeKnexConfig(dbConfig));
|
||||||
|
|
||||||
|
const debugSlowQueries = false;
|
||||||
|
|
||||||
|
if (debugSlowQueries) {
|
||||||
|
const startTimes: Record<string, number> = {};
|
||||||
|
|
||||||
|
const slowQueryDuration = 10;
|
||||||
|
|
||||||
|
connection.on('query', (data) => {
|
||||||
|
startTimes[data.__knexQueryUid] = Date.now();
|
||||||
|
});
|
||||||
|
|
||||||
|
connection.on('query-response', (_response, data) => {
|
||||||
|
const duration = Date.now() - startTimes[data.__knexQueryUid];
|
||||||
|
if (duration < slowQueryDuration) return;
|
||||||
|
console.info(`SQL: ${data.sql} (${duration}ms)`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function disconnectDb(db: DbConnection) {
|
export async function disconnectDb(db: DbConnection) {
|
||||||
|
@ -186,7 +186,7 @@ export async function execRequest(routes: Routers, ctx: AppContext) {
|
|||||||
if (!match) throw new ErrorNotFound();
|
if (!match) throw new ErrorNotFound();
|
||||||
|
|
||||||
const endPoint = match.route.findEndPoint(ctx.request.method as HttpMethod, match.subPath.schema);
|
const endPoint = match.route.findEndPoint(ctx.request.method as HttpMethod, match.subPath.schema);
|
||||||
if (ctx.URL && !isValidOrigin(ctx.URL.origin, baseUrl(endPoint.type), endPoint.type)) throw new ErrorNotFound('Invalid origin', 'invalidOrigin');
|
if (ctx.URL && !isValidOrigin(ctx.URL.origin, baseUrl(endPoint.type), endPoint.type)) throw new ErrorNotFound(`Invalid origin: ${ctx.URL.origin}`, 'invalidOrigin');
|
||||||
|
|
||||||
// This is a generic catch-all for all private end points - if we
|
// This is a generic catch-all for all private end points - if we
|
||||||
// couldn't get a valid session, we exit now. Individual end points
|
// couldn't get a valid session, we exit now. Individual end points
|
||||||
|
Loading…
Reference in New Issue
Block a user