Skip to content

Commit 6419bb1

Browse files
committed
feat(metrics): add MetricsModule with endpoint for Prometheus metrics
1 parent 264bf1b commit 6419bb1

5 files changed

Lines changed: 36 additions & 9 deletions

File tree

libs/metrics/metrics.controller.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Controller, Get, Header } from '@nestjs/common';
2+
import * as client from 'prom-client';
3+
import { SkipResponseValidation } from '@shared/decorators';
4+
5+
@Controller()
6+
export class MetricsController {
7+
@Get('dump')
8+
@Header('Content-Type', client.register.contentType)
9+
@SkipResponseValidation()
10+
async getMetrics() {
11+
return client.register.metrics();
12+
}
13+
}

libs/metrics/metrics.module.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Module } from '@nestjs/common';
2+
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
3+
import { MetricsController } from './metrics.controller';
4+
5+
@Module({
6+
imports: [
7+
PrometheusModule.registerAsync({
8+
useFactory: () => ({
9+
defaultMetrics: {
10+
enabled: process.env.NODE_ENV !== 'test',
11+
},
12+
}),
13+
}),
14+
],
15+
controllers: [MetricsController],
16+
})
17+
export class MetricsModule {}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"passport": "^0.7.0",
7878
"passport-jwt": "^4.0.1",
7979
"postgres": "^3.4.9",
80+
"prom-client": "^15.1.3",
8081
"reflect-metadata": "^0.2.0",
8182
"rxjs": "^7.8.1",
8283
"transliteration": "^2.6.1",

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app.module.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { ConfigService } from '@nestjs/config';
55
import * as schema from './shared/entities';
66
import { APP_FILTER, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core';
77
import { ZodValidationPipe } from 'nestjs-zod';
8-
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
98
import { HealthModule } from '@libs/health';
109
import { UserModule } from './user';
1110
import { GlobalExceptionFilter } from '@shared/error';
@@ -24,18 +23,12 @@ import { CACHE_SERVICE } from '@shared/adapters/cache/constants';
2423
import { ICacheService } from '@shared/adapters/cache/ports';
2524
import { DatabaseHealthService } from '@libs/database';
2625
import { ZodValidationInterceptor } from '@shared/interceptors/zod-validation.interceptor';
26+
import { MetricsModule } from '../libs/metrics/metrics.module';
2727

2828
@Module({
2929
imports: [
3030
ConfigModule,
31-
PrometheusModule.registerAsync({
32-
useFactory: () => ({
33-
path: 'dump',
34-
defaultMetrics: {
35-
enabled: process.env.NODE_ENV !== 'test',
36-
},
37-
}),
38-
}),
31+
MetricsModule,
3932
DatabaseModule.registerAsync({
4033
global: true,
4134
inject: [ConfigService],

0 commit comments

Comments
 (0)