diff --git a/src/lib/features/metrics/impact/impact-metrics.e2e.test.ts b/src/lib/features/metrics/impact/impact-metrics.e2e.test.ts index 87f3deaa4d..18e3a57187 100644 --- a/src/lib/features/metrics/impact/impact-metrics.e2e.test.ts +++ b/src/lib/features/metrics/impact/impact-metrics.e2e.test.ts @@ -118,7 +118,7 @@ test('should store impact metrics in memory and be able to retrieve them', async '# TYPE unleash_counter_labeled_counter counter', ); expect(metricsText).toMatch( - /unleash_counter_labeled_counter{foo="bar"} 15/, + /unleash_counter_labeled_counter{unleash_foo="bar"} 15/, ); }); @@ -167,6 +167,6 @@ test('should store impact metrics sent via bulk metrics endpoint', async () => { '# TYPE unleash_counter_bulk_counter counter', ); expect(metricsText).toMatch( - /unleash_counter_bulk_counter{source="bulk"} 15/, + /unleash_counter_bulk_counter{unleash_source="bulk"} 15/, ); }); diff --git a/src/lib/features/metrics/impact/metrics-translator.test.ts b/src/lib/features/metrics/impact/metrics-translator.test.ts index 05f4e53129..84e7b5ab2d 100644 --- a/src/lib/features/metrics/impact/metrics-translator.test.ts +++ b/src/lib/features/metrics/impact/metrics-translator.test.ts @@ -39,9 +39,11 @@ describe('MetricsTranslator', () => { '# TYPE unleash_counter_labeled_counter counter', ); expect(result).toContain( - 'unleash_counter_labeled_counter{foo="bar"} 5', + 'unleash_counter_labeled_counter{unleash_foo="bar"} 5', + ); + expect(result).toContain( + 'unleash_gauge_test_gauge{unleash_env="prod"} 10', ); - expect(result).toContain('unleash_gauge_test_gauge{env="prod"} 10'); }); it('should ignore unsupported metric types', async () => { @@ -110,10 +112,10 @@ describe('MetricsTranslator', () => { const result1 = await translator.translateAndSerializeMetrics(metrics1); expect(result1).toContain( - 'unleash_counter_counter_with_labels{foo="bar"} 5', + 'unleash_counter_counter_with_labels{unleash_foo="bar"} 5', ); expect(result1).toContain( - 'unleash_gauge_gauge_with_labels{env="prod"} 10', + 'unleash_gauge_gauge_with_labels{unleash_env="prod"} 10', ); const metrics2 = [ @@ -144,10 +146,10 @@ describe('MetricsTranslator', () => { const result2 = await translator.translateAndSerializeMetrics(metrics2); expect(result2).toContain( - 'unleash_counter_counter_with_labels{foo="bar",baz="qux"} 15', + 'unleash_counter_counter_with_labels{unleash_foo="bar",unleash_baz="qux"} 15', ); expect(result2).toContain( - 'unleash_gauge_gauge_with_labels{env="prod",region="us-east"} 20', + 'unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_region="us-east"} 20', ); }); }); diff --git a/src/lib/features/metrics/impact/metrics-translator.ts b/src/lib/features/metrics/impact/metrics-translator.ts index 276bff7301..455d8ab6cc 100644 --- a/src/lib/features/metrics/impact/metrics-translator.ts +++ b/src/lib/features/metrics/impact/metrics-translator.ts @@ -30,6 +30,17 @@ export class MetricsTranslator { ); } + private transformLabels( + labels: Record, + ): Record { + return Object.fromEntries( + Object.entries(labels).map(([labelKey, value]) => [ + `unleash_${labelKey}`, + value, + ]), + ); + } + translateMetric(metric: Metric): Counter | Gauge | null { const prefixedName = `unleash_${metric.type}_${metric.name}`; const existingMetric = this.registry.getSingleMetric(prefixedName); @@ -38,7 +49,7 @@ export class MetricsTranslator { for (const sample of metric.samples) { if (sample.labels) { Object.keys(sample.labels).forEach((label) => - allLabelNames.add(label), + allLabelNames.add(`unleash_${label}`), ); } } @@ -71,7 +82,10 @@ export class MetricsTranslator { for (const sample of metric.samples) { if (sample.labels) { - counter.inc(sample.labels, sample.value); + counter.inc( + this.transformLabels(sample.labels), + sample.value, + ); } else { counter.inc(sample.value); } @@ -105,7 +119,10 @@ export class MetricsTranslator { for (const sample of metric.samples) { if (sample.labels) { - gauge.set(sample.labels, sample.value); + gauge.set( + this.transformLabels(sample.labels), + sample.value, + ); } else { gauge.set(sample.value); }