diff --git a/src/lib/metrics.test.ts b/src/lib/metrics.test.ts index be2574d228..f1be259d33 100644 --- a/src/lib/metrics.test.ts +++ b/src/lib/metrics.test.ts @@ -8,6 +8,7 @@ import { CLIENT_REGISTER, FEATURE_ENVIRONMENT_ENABLED, FEATURE_UPDATED, + PROJECT_ENVIRONMENT_REMOVED, } from './types/events'; import { createMetricsMonitor } from './metrics'; import createStores from '../test/fixtures/store'; @@ -258,3 +259,19 @@ test('Should not collect client sdk version if sdkVersion is of wrong format or ); expect(metrics).not.toMatch(/unleash-client-rust/); }); + +test('should collect metrics for project disabled numbers', async () => { + eventStore.emit(PROJECT_ENVIRONMENT_REMOVED, { + project: 'default', + environment: 'staging', + createdBy: 'Jay', + createdByUserId: 26, + }); + + const recordedMetric = await prometheusRegister.getSingleMetricAsString( + 'project_environments_disabled', + ); + expect(recordedMetric).toMatch( + /project_environments_disabled{project_id=\"default\"} 1/, + ); +}); diff --git a/src/lib/metrics.ts b/src/lib/metrics.ts index 33f025a97f..186a18caa8 100644 --- a/src/lib/metrics.ts +++ b/src/lib/metrics.ts @@ -18,6 +18,7 @@ import { FEATURE_UPDATED, CLIENT_METRICS, CLIENT_REGISTER, + PROJECT_ENVIRONMENT_REMOVED, } from './types/events'; import type { IUnleashConfig } from './types/option'; import type { IUnleashStores } from './types/stores'; @@ -258,6 +259,12 @@ export default class MetricsMonitor { help: 'Duration of mapFeaturesForClient function', }); + const projectEnvironmentsDisabled = createCounter({ + name: 'project_environments_disabled', + help: 'How many "environment disabled" events we have received for each project', + labelNames: ['project_id'], + }); + async function collectStaticCounters() { try { const stats = await instanceStatsService.getStats(); @@ -607,6 +614,9 @@ export default class MetricsMonitor { }); } }); + eventStore.on(PROJECT_ENVIRONMENT_REMOVED, ({ project }) => { + projectEnvironmentsDisabled.increment({ project_id: project }); + }); await this.configureDbMetrics(db, eventBus, schedulerService);