summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.js6
-rw-r--r--docs/content/dev/api.md7
-rw-r--r--lib/prometheus.js49
-rw-r--r--package.json2
-rw-r--r--public/docs/release-notes.md5
-rw-r--r--yarn.lock162
6 files changed, 221 insertions, 10 deletions
diff --git a/app.js b/app.js
index 51b5f093..31d671f9 100644
--- a/app.js
+++ b/app.js
@@ -18,6 +18,7 @@ const passportSocketIo = require('passport.socketio')
const helmet = require('helmet')
const i18n = require('i18n')
const flash = require('connect-flash')
+const apiMetrics = require('prometheus-api-metrics')
// core
const config = require('./lib/config')
@@ -25,6 +26,7 @@ const logger = require('./lib/logger')
const errors = require('./lib/errors')
const models = require('./lib/models')
const csp = require('./lib/csp')
+const metrics = require('./lib/prometheus')
// server setup
const app = express()
@@ -63,6 +65,10 @@ app.use(morgan('combined', {
stream: logger.stream
}))
+// Register prometheus metrics endpoint
+app.use(apiMetrics())
+metrics.setupCustomPrometheusMetrics()
+
// socket io
const io = require('socket.io')(server, { cookie: false })
io.engine.ws = new (require('ws').Server)({
diff --git a/docs/content/dev/api.md b/docs/content/dev/api.md
index 0700ecc3..a8cd22a2 100644
--- a/docs/content/dev/api.md
+++ b/docs/content/dev/api.md
@@ -36,6 +36,7 @@ These endpoints return information about the current logged-in user and it's not
## HedgeDoc-server
These endpoints return information about the running HedgeDoc instance.
-| Endpoint | HTTP-Method | Description |
-| --------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `/status` | `GET` | **Returns the current status of the HedgeDoc instance.**<br>The data is returned as a JSON object containing the number of notes stored on the server, (distinct) online users and more. |
+| Endpoint | HTTP-Method | Description |
+| ---------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `/status` | `GET` | **Returns the current status of the HedgeDoc instance.**<br>The data is returned as a JSON object containing the number of notes stored on the server, (distinct) online users and more. |
+| `/metrics` | `GET` | **Prometheus-compatible endpoint**<br>Exposes the same stats as `/status` in addition to various Node.js performance figures. Available since HedgeDoc 1.8 |
diff --git a/lib/prometheus.js b/lib/prometheus.js
new file mode 100644
index 00000000..1ffb9ad7
--- /dev/null
+++ b/lib/prometheus.js
@@ -0,0 +1,49 @@
+const promClient = require('prom-client')
+const realtime = require('./realtime')
+
+exports.setupCustomPrometheusMetrics = function () {
+ const onlineNotes = new promClient.Gauge({
+ name: 'hedgedoc_online_notes',
+ help: 'Notes currently being edited'
+ })
+ const onlineSessions = new promClient.Gauge({
+ name: 'hedgedoc_online_sessions',
+ help: 'Sessions currently editing notes',
+ labelNames: ['type']
+ })
+ const onlineUsers = new promClient.Gauge({
+ name: 'hedgedoc_online_users',
+ help: 'Distinct users currently editing notes',
+ labelNames: ['type']
+ })
+ const notesCount = new promClient.Gauge({
+ name: 'hedgedoc_notes',
+ help: 'Notes in the instance'
+ })
+ const registeredUsers = new promClient.Gauge({
+ name: 'hedgedoc_registered_users',
+ help: 'Users that registered in the instance'
+ })
+ const isConnectionBusy = new promClient.Gauge({
+ name: 'hedgedoc_connection_busy',
+ help: 'Indicates that realtime currently connecting'
+ })
+ const connectionSocketQueueLength = new promClient.Gauge({
+ name: 'hedgedoc_connection_socket_queue_length',
+ help: 'Length of connection socket queue',
+ // The last gauge provides the collect callback for all metrics
+ collect () {
+ realtime.getStatus(function (data) {
+ onlineNotes.set(data.onlineNotes)
+ onlineSessions.set({ type: 'all' }, data.onlineUsers)
+ onlineSessions.set({ type: 'signed-in' }, data.onlineRegisteredUsers)
+ onlineUsers.set({ type: 'all' }, data.distinctOnlineUsers)
+ onlineUsers.set({ type: 'signed-in' }, data.distinctOnlineRegisteredUsers)
+ notesCount.set(data.notesCount)
+ registeredUsers.set(data.registeredUsers)
+ isConnectionBusy.set(data.isConnectionBusy ? 1 : 0)
+ connectionSocketQueueLength.set(data.connectionSocketQueueLength)
+ })
+ }
+ })
+}
diff --git a/package.json b/package.json
index 2dd5a36a..596b6029 100644
--- a/package.json
+++ b/package.json
@@ -108,6 +108,8 @@
"pg": "^8.2.1",
"pg-hstore": "^2.3.3",
"prismjs": "^1.21.0",
+ "prom-client": "^13.1.0",
+ "prometheus-api-metrics": "^3.2.0",
"randomcolor": "^0.6.0",
"raphael": "^2.3.0",
"readline-sync": "^1.4.7",
diff --git a/public/docs/release-notes.md b/public/docs/release-notes.md
index 86f7b979..26257541 100644
--- a/public/docs/release-notes.md
+++ b/public/docs/release-notes.md
@@ -6,10 +6,13 @@
### Features
- Database migrations are now automatically applied on application startup.
The separate `.sequelizerc` configuration file is no longer necessary and can be safely deleted.
-
+- A Prometheus-endpoint is now available at `/metrics`, exposing the same stats as `/status`
+ in addition to various Node.js performance figures.
+
### Enhancements
- Removed dependency on external imgur library
+
## <i class="fa fa-tag"></i> 1.7.2 <i class="fa fa-calendar-o"></i> 2021-01-15
This release fixes a security issue. We recommend upgrading as soon as possible.
### Security Fixes
diff --git a/yarn.lock b/yarn.lock
index 8641616a..ed4b3aa5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -154,16 +154,72 @@
resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3"
integrity sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==
+"@types/accepts@*":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
+ integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+"@types/body-parser@*":
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
+ integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/connect@*":
+ version "3.4.34"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901"
+ integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/content-disposition@*":
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96"
+ integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==
+
+"@types/cookies@*":
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504"
+ integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==
+ dependencies:
+ "@types/connect" "*"
+ "@types/express" "*"
+ "@types/keygrip" "*"
+ "@types/node" "*"
+
"@types/debug@^4.1.5":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
+"@types/express-serve-static-core@^4.17.12", "@types/express-serve-static-core@^4.17.18":
+ version "4.17.19"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz#00acfc1632e729acac4f1530e9e16f6dd1508a1d"
+ integrity sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+
+"@types/express@*", "@types/express@^4.17.8":
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545"
+ integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.18"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
"@types/geojson@^7946.0.7":
version "7946.0.7"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad"
@@ -174,6 +230,16 @@
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50"
integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==
+"@types/http-assert@*":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b"
+ integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==
+
+"@types/http-errors@*":
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69"
+ integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==
+
"@types/json-schema@^7.0.6":
version "7.0.7"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
@@ -184,6 +250,32 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+"@types/keygrip@*":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
+ integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
+
+"@types/koa-compose@*":
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d"
+ integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
+ dependencies:
+ "@types/koa" "*"
+
+"@types/koa@*", "@types/koa@^2.11.4":
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.1.tgz#e29877a6b5ad3744ab1024f6ec75b8cbf6ec45db"
+ integrity sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q==
+ dependencies:
+ "@types/accepts" "*"
+ "@types/content-disposition" "*"
+ "@types/cookies" "*"
+ "@types/http-assert" "*"
+ "@types/http-errors" "*"
+ "@types/keygrip" "*"
+ "@types/koa-compose" "*"
+ "@types/node" "*"
+
"@types/ldapjs@^1.0.9":
version "1.0.10"
resolved "https://registry.yarnpkg.com/@types/ldapjs/-/ldapjs-1.0.10.tgz#bac705c9e154b97d69496b5213cc28dbe9715a37"
@@ -198,6 +290,11 @@
dependencies:
"@types/unist" "*"
+"@types/mime@^1":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
+ integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+
"@types/node@*", "@types/node@^14.14.28":
version "14.14.41"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615"
@@ -218,6 +315,16 @@
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
+"@types/qs@*":
+ version "6.9.6"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1"
+ integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==
+
+"@types/range-parser@*":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
+ integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
+
"@types/readable-stream@^2.3.5", "@types/readable-stream@^2.3.9":
version "2.3.9"
resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.9.tgz#40a8349e6ace3afd2dd1b6d8e9b02945de4566a9"
@@ -226,6 +333,14 @@
"@types/node" "*"
safe-buffer "*"
+"@types/serve-static@*":
+ version "1.13.9"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e"
+ integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
+
"@types/source-list-map@*":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
@@ -448,7 +563,6 @@
"Idle.Js@git+https://github.com/shawnmclean/Idle.js":
version "0.0.1"
- uid db9beb3483a460ad638ec947867720f0ed066a62
resolved "git+https://github.com/shawnmclean/Idle.js#db9beb3483a460ad638ec947867720f0ed066a62"
JSV@^4.0.x:
@@ -1531,6 +1645,11 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
+bintrees@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524"
+ integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ=
+
bl@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.1.tgz#1cbb439299609e419b5a74d7fce2f8b37d8e5c6f"
@@ -2186,7 +2305,6 @@ code-point-at@^1.0.0:
"codemirror@git+https://github.com/hedgedoc/CodeMirror.git":
version "5.58.2"
- uid f780b569b3717cdff4c8507538cc63101bfa02e1
resolved "git+https://github.com/hedgedoc/CodeMirror.git#f780b569b3717cdff4c8507538cc63101bfa02e1"
collection-visit@^1.0.0:
@@ -3217,7 +3335,6 @@ detect-libc@^1.0.2:
"diff-match-patch@git+https://github.com/hackmdio/diff-match-patch.git":
version "1.1.1"
- uid c2f8fb9d69aa9490b764850aa86ba442c93ccf78
resolved "git+https://github.com/hackmdio/diff-match-patch.git#c2f8fb9d69aa9490b764850aa86ba442c93ccf78"
diff@5.0.0:
@@ -5510,7 +5627,6 @@ js-cookie@^2.1.3:
"js-sequence-diagrams@git+https://github.com/hedgedoc/js-sequence-diagrams.git":
version "2.0.1"
- uid bda0e49b6c2754f3c7158b1dfb9ccf26efc24b39
resolved "git+https://github.com/hedgedoc/js-sequence-diagrams.git#bda0e49b6c2754f3c7158b1dfb9ccf26efc24b39"
dependencies:
lodash "4.17.x"
@@ -5945,6 +6061,11 @@ lodash.foreach@^4.3.0:
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
+lodash.get@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
lodash.isplainobject@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
@@ -6084,7 +6205,6 @@ lutim@^1.0.2:
"lz-string@git+https://github.com/hackmdio/lz-string.git":
version "1.4.4"
- uid efd1f64676264d6d8871b01f4f375fc6ef4f9022
resolved "git+https://github.com/hackmdio/lz-string.git#efd1f64676264d6d8871b01f4f375fc6ef4f9022"
make-dir@^1.0.0:
@@ -6398,7 +6518,6 @@ messageformat@^2.3.0:
"meta-marked@git+https://github.com/hedgedoc/meta-marked":
version "0.4.5"
- uid "4fb5cb5a204969cc91e66eee92c0211188e69a2b"
resolved "git+https://github.com/hedgedoc/meta-marked#4fb5cb5a204969cc91e66eee92c0211188e69a2b"
dependencies:
js-yaml "~3.14.0"
@@ -7746,6 +7865,11 @@ pkginfo@^0.2.3:
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8"
integrity sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg=
+pkginfo@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
+ integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
+
please-upgrade-node@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
@@ -8164,6 +8288,25 @@ progress@^2.0.0:
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+prom-client@^13.1.0:
+ version "13.1.0"
+ resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45"
+ integrity sha512-jT9VccZCWrJWXdyEtQddCDszYsiuWj5T0ekrPszi/WEegj3IZy6Mm09iOOVM86A4IKMWq8hZkT2dD9MaSe+sng==
+ dependencies:
+ tdigest "^0.1.1"
+
+prometheus-api-metrics@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/prometheus-api-metrics/-/prometheus-api-metrics-3.2.0.tgz#3af90989271abb55b7e0405bdfcb161f403a361c"
+ integrity sha512-JekPhtIBLGX8HxD2EndvBsLU6ZQ1JVVqyHWVfm5CposUOqgBHXnUVFW6x5Ux2gykpdej/5LLM3dU9V8Ma7GfkA==
+ dependencies:
+ "@types/express" "^4.17.8"
+ "@types/express-serve-static-core" "^4.17.12"
+ "@types/koa" "^2.11.4"
+ debug "^3.2.6"
+ lodash.get "^4.4.2"
+ pkginfo "^0.4.1"
+
promise-inflight@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -10121,6 +10264,13 @@ tar@^6.0.2:
mkdirp "^1.0.3"
yallist "^4.0.0"
+tdigest@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021"
+ integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=
+ dependencies:
+ bintrees "1.0.1"
+
tedious@^6.6.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/tedious/-/tedious-6.7.0.tgz#ad02365f16f9e0416b216e13d3f83c53addd42ca"