diff --git a/packages/metrics/src/Metrics.ts b/packages/metrics/src/Metrics.ts index 7d96fa470a..29926584c0 100644 --- a/packages/metrics/src/Metrics.ts +++ b/packages/metrics/src/Metrics.ts @@ -282,7 +282,7 @@ class Metrics extends Utility implements MetricsInterface { const newDimensions = this.#sanitizeDimensions(dimensions); const currentCount = this.#dimensionsStore.getDimensionCount(); const newSetCount = Object.keys(newDimensions).length; - if (currentCount + newSetCount >= MAX_DIMENSION_COUNT) { + if (currentCount + newSetCount > MAX_DIMENSION_COUNT) { throw new RangeError( `The number of metric dimensions must be lower than ${MAX_DIMENSION_COUNT}` ); diff --git a/packages/metrics/tests/unit/dimensions.test.ts b/packages/metrics/tests/unit/dimensions.test.ts index d7c6febd3c..274e3edfba 100644 --- a/packages/metrics/tests/unit/dimensions.test.ts +++ b/packages/metrics/tests/unit/dimensions.test.ts @@ -389,6 +389,35 @@ describe('Working with dimensions', () => { ); }); + it('allows adding a dimension set when it reaches the limit exactly', () => { + // Prepare + const metrics = new Metrics({ + singleMetric: true, + }); + + // Act + // We start with 1 dimension because service name is already added + for (let i = 1; i < MAX_DIMENSION_COUNT - 1; i++) { + metrics.addDimension(`dimension-${i}`, 'test'); + } + + metrics.addDimensions({ + final: 'test', + }); + + // Assess + metrics.addMetric('foo', MetricUnit.Count, 1); + metrics.publishStoredMetrics(); + + expect(console.log).toHaveEmittedEMFWith( + expect.objectContaining({ + service: 'hello-world', + final: 'test', + foo: 1, + }) + ); + }); + it('handles dimension overrides across multiple dimension sets', () => { // Prepare const metrics = new Metrics({