update ts util lib with new express metrics registration

This commit is contained in:
Hailey
2025-09-23 10:22:59 -07:00
parent bec44fc983
commit cd6feb8d59
3 changed files with 48 additions and 29 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
"dependencies": {
"@atproto/api": "^0.16.7",
"@atproto/common": "^0.4.11",
"@haileyok/ts-util": "^1.0.0",
"@haileyok/ts-util": "^1.3.3",
"@types/escape-html": "^1.0.4",
"body-parser": "^1.20.2",
"cors": "^2.8.5",
+2 -23
View File
@@ -2,7 +2,7 @@ import events from 'node:events'
import type http from 'node:http'
import cors from 'cors'
import express, {type Response} from 'express'
import express from 'express'
import {createHttpTerminator, type HttpTerminator} from 'http-terminator'
import {type Config} from './config.js'
@@ -32,28 +32,7 @@ export class LinkService {
app = routes(ctx, app)
app.use(errorHandler)
// request duration logging
app.use((req, res, next) => {
const start = process.hrtime.bigint()
const originalEnd = res.end.bind(res) as Response['end']
res.end = function (
this: Response,
...args: Parameters<Response['end']>
): ReturnType<Response['end']> {
const end = process.hrtime.bigint()
const respTimeMs = Number(end - start) / 1_000_000 // ns to ms :3
if (req.route) {
ctx.metrics
.getHistogram('requestDuration')
.labels(req.route.path, req.method, res.statusCode.toString())
.observe(respTimeMs)
}
return originalEnd(...args)
} as Response['end']
next()
})
ctx.metrics.registerExpressMetrics(app)
return new LinkService(app, ctx)
}
+45 -5
View File
@@ -113,14 +113,16 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@haileyok/ts-util@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@haileyok/ts-util/-/ts-util-1.0.0.tgz#30ea08c8cfdcd673d821a35a670285e83c2ac4b1"
integrity sha512-tszfjVXXFJt93ii7COtlJzGsjkI6trNgXd3hbhvTvs9muIbbd4F7zkB3RzNVARytyK4emlMa7hj7jscBIGogSA==
"@haileyok/ts-util@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@haileyok/ts-util/-/ts-util-1.3.3.tgz#2bc5005c58ef9251765676f9707e1671bd712d33"
integrity sha512-1Djml2jn7hG8pniQfN3TaZQJ+IijIdNzlcEFhB3bBBoGz7/vjHNDfWMwbGLCpsP0vdGrbhjE7YIZy0U1CGLUXw==
dependencies:
cors "^2.8.5"
events "^3.3.0"
express "^5.1.0"
express-prom-bundle "^8.0.0"
kafkajs "^2.2.4"
prom-client "^15.1.3"
tslint "^6.1.3"
typescript "^5.9.2"
@@ -249,6 +251,16 @@
"@types/range-parser" "*"
"@types/send" "*"
"@types/express-serve-static-core@^5.0.0":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6"
integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
"@types/send" "*"
"@types/express@^4.17.21":
version "4.17.23"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef"
@@ -259,6 +271,15 @@
"@types/qs" "*"
"@types/serve-static" "*"
"@types/express@^5.0.0":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956"
integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^5.0.0"
"@types/serve-static" "*"
"@types/http-errors@*":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472"
@@ -734,6 +755,15 @@ events@^3.3.0:
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
express-prom-bundle@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/express-prom-bundle/-/express-prom-bundle-8.0.0.tgz#22a434b87854d98a1ea75c487c9d65f669e8e93e"
integrity sha512-UHdpaMks6Z/tvxQsNzhsE7nkdXb4/zEh/jwN0tfZSZOEF+aD0dlfl085EU4jveOq09v01c5sIUfjV4kJODZ2eQ==
dependencies:
"@types/express" "^5.0.0"
on-finished "^2.3.0"
url-value-parser "^2.0.0"
express@^4.19.2:
version "4.19.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
@@ -1071,6 +1101,11 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
kafkajs@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/kafkajs/-/kafkajs-2.2.4.tgz#59e6e16459d87fdf8b64be73970ed5aa42370a5b"
integrity sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==
kysely@^0.27.3:
version "0.27.3"
resolved "https://registry.yarnpkg.com/kysely/-/kysely-0.27.3.tgz#6cc6c757040500b43c4ac596cdbb12be400ee276"
@@ -1246,7 +1281,7 @@ on-exit-leak-free@^2.1.0:
resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8"
integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==
on-finished@2.4.1, on-finished@^2.4.1:
on-finished@2.4.1, on-finished@^2.3.0, on-finished@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
@@ -1942,6 +1977,11 @@ unpipe@1.0.0, unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
url-value-parser@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/url-value-parser/-/url-value-parser-2.2.0.tgz#f38ae8cd24604ec69bc219d66929ddbbd93a2b32"
integrity sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"