diff --git a/src/lib/features/metrics/impact/metrics-translator.test.ts b/src/lib/features/metrics/impact/metrics-translator.test.ts index 84e7b5ab2d..302da2dbaf 100644 --- a/src/lib/features/metrics/impact/metrics-translator.test.ts +++ b/src/lib/features/metrics/impact/metrics-translator.test.ts @@ -39,10 +39,10 @@ describe('MetricsTranslator', () => { '# TYPE unleash_counter_labeled_counter counter', ); expect(result).toContain( - 'unleash_counter_labeled_counter{unleash_foo="bar"} 5', + 'unleash_counter_labeled_counter{unleash_foo="bar",unleash_origin="sdk"} 5', ); expect(result).toContain( - 'unleash_gauge_test_gauge{unleash_env="prod"} 10', + 'unleash_gauge_test_gauge{unleash_env="prod",unleash_origin="sdk"} 10', ); }); @@ -112,10 +112,10 @@ describe('MetricsTranslator', () => { const result1 = await translator.translateAndSerializeMetrics(metrics1); expect(result1).toContain( - 'unleash_counter_counter_with_labels{unleash_foo="bar"} 5', + 'unleash_counter_counter_with_labels{unleash_foo="bar",unleash_origin="sdk"} 5', ); expect(result1).toContain( - 'unleash_gauge_gauge_with_labels{unleash_env="prod"} 10', + 'unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_origin="sdk"} 10', ); const metrics2 = [ @@ -146,10 +146,10 @@ describe('MetricsTranslator', () => { const result2 = await translator.translateAndSerializeMetrics(metrics2); expect(result2).toContain( - 'unleash_counter_counter_with_labels{unleash_foo="bar",unleash_baz="qux"} 15', + 'unleash_counter_counter_with_labels{unleash_foo="bar",unleash_baz="qux",unleash_origin="sdk"} 15', ); expect(result2).toContain( - 'unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_region="us-east"} 20', + 'unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_region="us-east",unleash_origin="sdk"} 20', ); }); }); diff --git a/src/lib/features/metrics/impact/metrics-translator.ts b/src/lib/features/metrics/impact/metrics-translator.ts index 455d8ab6cc..f04586b687 100644 --- a/src/lib/features/metrics/impact/metrics-translator.ts +++ b/src/lib/features/metrics/impact/metrics-translator.ts @@ -41,11 +41,21 @@ export class MetricsTranslator { ); } + private addOriginLabel( + sample: MetricSample, + ): Record { + return { + ...(sample.labels || {}), + origin: (sample.labels && sample.labels.origin) || 'sdk', // Default to 'sdk' if not provided + }; + } + translateMetric(metric: Metric): Counter | Gauge | null { const prefixedName = `unleash_${metric.type}_${metric.name}`; const existingMetric = this.registry.getSingleMetric(prefixedName); const allLabelNames = new Set(); + allLabelNames.add('unleash_origin'); for (const sample of metric.samples) { if (sample.labels) { Object.keys(sample.labels).forEach((label) => @@ -81,14 +91,10 @@ export class MetricsTranslator { } for (const sample of metric.samples) { - if (sample.labels) { - counter.inc( - this.transformLabels(sample.labels), - sample.value, - ); - } else { - counter.inc(sample.value); - } + counter.inc( + this.transformLabels(this.addOriginLabel(sample)), + sample.value, + ); } return counter; @@ -118,14 +124,10 @@ export class MetricsTranslator { } for (const sample of metric.samples) { - if (sample.labels) { - gauge.set( - this.transformLabels(sample.labels), - sample.value, - ); - } else { - gauge.set(sample.value); - } + gauge.set( + this.transformLabels(this.addOriginLabel(sample)), + sample.value, + ); } return gauge;