Skip to content

Commit

Permalink
fix: add env and project labels to feature updated metrics. (#2043)
Browse files Browse the repository at this point in the history
  • Loading branch information
ivarconr committed Sep 8, 2022
1 parent 6e52718 commit a7ed755
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 18 deletions.
3 changes: 2 additions & 1 deletion src/lib/metrics.test.ts
Expand Up @@ -57,12 +57,13 @@ test('should collect metrics for requests', async () => {
test('should collect metrics for updated toggles', async () => {
stores.eventStore.emit(FEATURE_UPDATED, {
featureName: 'TestToggle',
project: 'default',
data: { name: 'TestToggle' },
});

const metrics = await prometheusRegister.metrics();
expect(metrics).toMatch(
/feature_toggle_update_total{toggle="TestToggle"} 1/,
/feature_toggle_update_total{toggle="TestToggle",project="default",environment="default"} 1/,
);
});

Expand Down
77 changes: 60 additions & 17 deletions src/lib/metrics.ts
Expand Up @@ -10,6 +10,10 @@ import {
FEATURE_STRATEGY_ADD,
FEATURE_STRATEGY_REMOVE,
FEATURE_STRATEGY_UPDATE,
FEATURE_ENVIRONMENT_ENABLED,
FEATURE_ENVIRONMENT_DISABLED,
FEATURE_VARIANTS_UPDATED,
FEATURE_METADATA_UPDATED,
FEATURE_UPDATED,
CLIENT_METRICS,
CLIENT_REGISTER,
Expand Down Expand Up @@ -68,8 +72,8 @@ export default class MetricsMonitor {
});
const featureToggleUpdateTotal = new client.Counter({
name: 'feature_toggle_update_total',
help: 'Number of times a toggle has been updated',
labelNames: ['toggle'],
help: 'Number of times a toggle has been updated. Environment label would be "n/a" when it is not available, e.g. when a feature toggle is created.',
labelNames: ['toggle', 'project', 'environment'],
});
const featureToggleUsageTotal = new client.Counter({
name: 'feature_toggle_usage_total',
Expand Down Expand Up @@ -148,26 +152,65 @@ export default class MetricsMonitor {
dbDuration.labels(store, action).observe(time);
});

eventStore.on(FEATURE_CREATED, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(FEATURE_CREATED, ({ featureName, project }) => {
featureToggleUpdateTotal.labels(featureName, project, 'n/a').inc();
});
eventStore.on(FEATURE_UPDATED, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(FEATURE_VARIANTS_UPDATED, ({ featureName, project }) => {
featureToggleUpdateTotal.labels(featureName, project, 'n/a').inc();
});
eventStore.on(FEATURE_STRATEGY_ADD, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(FEATURE_METADATA_UPDATED, ({ featureName, project }) => {
featureToggleUpdateTotal.labels(featureName, project, 'n/a').inc();
});
eventStore.on(FEATURE_STRATEGY_REMOVE, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(FEATURE_UPDATED, ({ featureName, project }) => {
featureToggleUpdateTotal
.labels(featureName, project, 'default')
.inc();
});
eventStore.on(FEATURE_STRATEGY_UPDATE, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
});
eventStore.on(FEATURE_ARCHIVED, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(
FEATURE_STRATEGY_ADD,
({ featureName, project, environment }) => {
featureToggleUpdateTotal
.labels(featureName, project, environment)
.inc();
},
);
eventStore.on(
FEATURE_STRATEGY_REMOVE,
({ featureName, project, environment }) => {
featureToggleUpdateTotal
.labels(featureName, project, environment)
.inc();
},
);
eventStore.on(
FEATURE_STRATEGY_UPDATE,
({ featureName, project, environment }) => {
featureToggleUpdateTotal
.labels(featureName, project, environment)
.inc();
},
);
eventStore.on(
FEATURE_ENVIRONMENT_DISABLED,
({ featureName, project, environment }) => {
featureToggleUpdateTotal
.labels(featureName, project, environment)
.inc();
},
);
eventStore.on(
FEATURE_ENVIRONMENT_ENABLED,
({ featureName, project, environment }) => {
featureToggleUpdateTotal
.labels(featureName, project, environment)
.inc();
},
);
eventStore.on(FEATURE_ARCHIVED, ({ featureName, project }) => {
featureToggleUpdateTotal.labels(featureName, project, 'n/a').inc();
});
eventStore.on(FEATURE_REVIVED, ({ featureName }) => {
featureToggleUpdateTotal.labels(featureName).inc();
eventStore.on(FEATURE_REVIVED, ({ featureName, project }) => {
featureToggleUpdateTotal.labels(featureName, project, 'n/a').inc();
});

eventBus.on(CLIENT_METRICS, (m) => {
Expand Down

0 comments on commit a7ed755

Please sign in to comment.