diff --git a/apps/api/package.json b/apps/api/package.json index 665019f0..ae30c30c 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -24,6 +24,7 @@ "@openpanel/trpc": "workspace:*", "@trpc/server": "^10.45.1", "fastify": "^4.25.2", + "fastify-metrics": "^11.0.0", "ico-to-png": "^0.2.1", "pino": "^8.17.2", "pino-pretty": "^10.3.1", diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 65964561..5410a2fd 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -4,6 +4,7 @@ import cors from '@fastify/cors'; import type { FastifyTRPCPluginOptions } from '@trpc/server/adapters/fastify'; import { fastifyTRPCPlugin } from '@trpc/server/adapters/fastify'; import Fastify from 'fastify'; +import metricsPlugin from 'fastify-metrics'; import type { IServiceClient } from '@openpanel/db'; import { redisPub } from '@openpanel/redis'; @@ -33,6 +34,8 @@ const startServer = async () => { maxParamLength: 15_000, }); + await fastify.register(metricsPlugin, { endpoint: '/metrics' }); + fastify.register(cors, { origin: '*', credentials: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e608286..be6bda4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,6 +65,9 @@ importers: fastify: specifier: ^4.25.2 version: 4.26.1 + fastify-metrics: + specifier: ^11.0.0 + version: 11.0.0(fastify@4.26.1) ico-to-png: specifier: ^0.2.1 version: 0.2.1 @@ -8511,6 +8514,10 @@ packages: resolution: {integrity: sha512-PJvH288AWQhKs2v9zyfYdPzlPqf5bXbGMmhmUIY9x4dAUGIWgomO771oBQNwJnMQSnUIXhKu6sgzpBRXTlvb8Q==} dev: false + /bintrees@1.0.2: + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + dev: false + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -11068,6 +11075,16 @@ packages: strnum: 1.0.5 dev: false + /fastify-metrics@11.0.0(fastify@4.26.1): + resolution: {integrity: sha512-2nv0pzkuRVRuAmW3fR2vh1FQF7sV/mgzOJ8cz3HjUzByudWvx2IOHKnJLWtUohiD1AaI2QxtLQKTDZv/nASBRQ==} + peerDependencies: + fastify: '>=4' + dependencies: + fastify: 4.26.1 + fastify-plugin: 4.5.1 + prom-client: 15.1.2 + dev: false + /fastify-plugin@4.5.1: resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} dev: false @@ -15484,6 +15501,14 @@ packages: engines: {node: '>=0.4.0'} dev: false + /prom-client@15.1.2: + resolution: {integrity: sha512-on3h1iXb04QFLLThrmVYg1SChBQ9N1c+nKAjebBjokBqipddH3uxmOUcEkTnzmJ8Jh/5TSUnUqS40i2QB2dJHQ==} + engines: {node: ^16 || ^18 || >=20} + dependencies: + '@opentelemetry/api': 1.8.0 + tdigest: 0.1.2 + dev: false + /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -17329,6 +17354,12 @@ packages: yallist: 4.0.0 dev: false + /tdigest@0.1.2: + resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + dependencies: + bintrees: 1.0.2 + dev: false + /temp-dir@1.0.0: resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} engines: {node: '>=4'}