diff --git a/packages/core/src/metrics/internal.ts b/packages/core/src/metrics/internal.ts index 5371ecba8dfd..e94da7f36cd8 100644 --- a/packages/core/src/metrics/internal.ts +++ b/packages/core/src/metrics/internal.ts @@ -88,14 +88,16 @@ function setMetricAttribute( */ export function _INTERNAL_captureSerializedMetric(client: Client, serializedMetric: SerializedMetric): void { const bufferMap = _getBufferMap(); - const metricBuffer = _INTERNAL_getMetricBuffer(client); + if (metricBuffer === undefined) { bufferMap.set(client, [serializedMetric]); } else { - bufferMap.set(client, [...metricBuffer, serializedMetric]); if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) { _INTERNAL_flushMetricsBuffer(client, metricBuffer); + bufferMap.set(client, [serializedMetric]); + } else { + bufferMap.set(client, [...metricBuffer, serializedMetric]); } } } diff --git a/packages/core/test/lib/metrics/internal.test.ts b/packages/core/test/lib/metrics/internal.test.ts index d9d123b63e99..3e479e282a0c 100644 --- a/packages/core/test/lib/metrics/internal.test.ts +++ b/packages/core/test/lib/metrics/internal.test.ts @@ -256,7 +256,10 @@ describe('_INTERNAL_captureMetric', () => { // Add one more to trigger flush _INTERNAL_captureMetric({ type: 'counter', name: 'trigger.flush', value: 999 }, { scope }); - expect(_INTERNAL_getMetricBuffer(client)).toEqual([]); + // After flushing the 1000 metrics, the new metric starts a fresh buffer with 1 item + const buffer = _INTERNAL_getMetricBuffer(client); + expect(buffer).toHaveLength(1); + expect(buffer?.[0]?.name).toBe('trigger.flush'); }); it('does not flush metrics buffer when it is empty', () => {