From 65b87f4e0bb3451f9f39cc580df85d467e2ba162 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Tue, 2 Nov 2021 21:03:55 +0200 Subject: [PATCH] fix: add missing queryLogger.ts --- backend/src/data/queryLogger.ts | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 backend/src/data/queryLogger.ts diff --git a/backend/src/data/queryLogger.ts b/backend/src/data/queryLogger.ts new file mode 100644 index 00000000..bc38cc0e --- /dev/null +++ b/backend/src/data/queryLogger.ts @@ -0,0 +1,42 @@ +import { AdvancedConsoleLogger } from "typeorm/logger/AdvancedConsoleLogger"; +import type { QueryRunner } from "typeorm"; + +let groupedQueryStats: Map = new Map(); + +const selectTableRegex = /FROM `?([^\s`]+)/i; +const updateTableRegex = /UPDATE `?([^\s`]+)/i; +const deleteTableRegex = /FROM `?([^\s`]+)/; +const insertTableRegex = /INTO `?([^\s`]+)/; + +export class QueryLogger extends AdvancedConsoleLogger { + logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner): any { + let type: string | undefined; + let table: string | undefined; + + if (query.startsWith("SELECT")) { + type = "SELECT"; + table = query.match(selectTableRegex)?.[1]; + } else if (query.startsWith("UPDATE")) { + type = "UPDATE"; + table = query.match(updateTableRegex)?.[1]; + } else if (query.startsWith("DELETE")) { + type = "DELETE"; + table = query.match(deleteTableRegex)?.[1]; + } else if (query.startsWith("INSERT")) { + type = "INSERT"; + table = query.match(insertTableRegex)?.[1]; + } else { + return; + } + + const key = `${type} ${table}`; + const newCount = (groupedQueryStats.get(key) ?? 0) + 1; + groupedQueryStats.set(key, newCount); + } +} + +export function consumeQueryStats() { + const map = groupedQueryStats; + groupedQueryStats = new Map(); + return map; +}