Skip to content

Commit 2da0ca9

Browse files
committed
Add basic query performance monitoring to the TableRepository
1 parent aea8824 commit 2da0ca9

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "strontium",
3-
"version": "2.7.9",
3+
"version": "2.7.10",
44
"description": "Strontium is a TypeScript toolkit for High Performance API servers built for Production not Projects.",
55
"main": "lib/src/index.js",
66
"types": "lib/src/index.d.ts",

src/query/drivers/sql/TableRepository.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from "../../../datastore"
99
import { injectable } from "inversify"
1010
import { isUndefined, omitBy } from "lodash"
11+
import { Logger } from "../../../logging"
1112

1213
import { Filter, compileSQLFilter } from "../.."
1314

@@ -31,7 +32,8 @@ export abstract class TableRepository<
3132
protected store: SQLStore,
3233
protected tableName: string,
3334
protected queryFields: Array<keyof T>,
34-
protected primaryKeyField: K
35+
protected primaryKeyField: K,
36+
protected logger?: Logger
3537
) {
3638
super()
3739

@@ -114,6 +116,7 @@ export abstract class TableRepository<
114116
} = {},
115117
connection: SQLStore = this.store
116118
): Promise<Array<T>> {
119+
let startTime = process.hrtime()
117120
let [filterQuery, filterParameters] = compileSQLFilter(filter)
118121
let parameters = [this.tableName, ...filterParameters]
119122

@@ -150,6 +153,8 @@ export abstract class TableRepository<
150153
processedQuery,
151154
processedParameters
152155
)
156+
157+
this.recordQueryTime(processedQuery, startTime)
153158
return results
154159
}
155160

@@ -208,4 +213,25 @@ export abstract class TableRepository<
208213
async generateID(): Promise<any> {
209214
return undefined
210215
}
216+
217+
protected recordQueryTime(
218+
queryString: string,
219+
startTime: [number, number]
220+
): void {
221+
if (this.logger !== undefined) {
222+
let runtime = process.hrtime(startTime)
223+
224+
this.logger.debug(
225+
`[REPOSITORY - QUERY - DIAGNOSTICS] ${
226+
this.tableName
227+
} query complete - ${runtime[0]} s and ${runtime[1] /
228+
1000000} ms`,
229+
{
230+
query: queryString,
231+
seconds: runtime[0],
232+
milliseconds: runtime[1] / 1000000,
233+
}
234+
)
235+
}
236+
}
211237
}

0 commit comments

Comments
 (0)