import { Module, type OnApplicationBootstrap } from '@nestjs/common'; import client from 'prom-client'; import { MetricsModuleConfig } from './metrics.config'; @Module({}) export class MetricInitializingModule implements OnApplicationBootstrap { private static isBootstrapped = false; constructor(private readonly config: MetricsModuleConfig) {} /** * Configures prom-client */ onApplicationBootstrap(): void { /** * This module initializes many times: forRoot, forFeature * but real prom-client should occur only once. */ if (MetricInitializingModule.isBootstrapped) { return; } if (this.config.includeDefault) { client.collectDefaultMetrics(); } MetricInitializingModule.isBootstrapped = true; } }