diff --git a/dev-packages/browser-integration-tests/suites/metrics/init.js b/dev-packages/browser-integration-tests/suites/metrics/init.js index 8a5032c05eef..97182a9af6e7 100644 --- a/dev-packages/browser-integration-tests/suites/metrics/init.js +++ b/dev-packages/browser-integration-tests/suites/metrics/init.js @@ -7,10 +7,11 @@ Sentry.init({ }); Sentry.metrics.increment('increment'); -Sentry.metrics.increment('increment'); +Sentry.metrics.increment('increment', 2); +Sentry.metrics.increment('increment', '3'); Sentry.metrics.distribution('distribution', 42); -Sentry.metrics.distribution('distribution', 45); +Sentry.metrics.distribution('distribution', '45'); Sentry.metrics.gauge('gauge', 5); -Sentry.metrics.gauge('gauge', 15); +Sentry.metrics.gauge('gauge', '15'); Sentry.metrics.set('set', 'nope'); Sentry.metrics.set('set', 'another'); diff --git a/dev-packages/browser-integration-tests/suites/metrics/test.ts b/dev-packages/browser-integration-tests/suites/metrics/test.ts index d73235d876c8..5c6ff8bb13a4 100644 --- a/dev-packages/browser-integration-tests/suites/metrics/test.ts +++ b/dev-packages/browser-integration-tests/suites/metrics/test.ts @@ -12,6 +12,6 @@ sentryTest('collects metrics', async ({ getLocalTestUrl, page }) => { const normalisedStatsdString = statsdString.replace(/T\d+\n?/g, 'T000000'); expect(normalisedStatsdString).toEqual( - 'increment@none:2|c|T000000distribution@none:42:45|d|T000000gauge@none:15:5:15:20:2|g|T000000set@none:3387254:3443787523|s|T000000', + 'increment@none:6|c|T000000distribution@none:42:45|d|T000000gauge@none:15:5:15:20:2|g|T000000set@none:3387254:3443787523|s|T000000', ); }); diff --git a/packages/core/src/metrics/exports.ts b/packages/core/src/metrics/exports.ts index 4fb088287a40..f062b65f72d9 100644 --- a/packages/core/src/metrics/exports.ts +++ b/packages/core/src/metrics/exports.ts @@ -90,7 +90,7 @@ function addToMetricsAggregator( * @experimental This API is experimental and might have breaking changes in the future. */ function increment(aggregator: MetricsAggregatorConstructor, name: string, value: number = 1, data?: MetricData): void { - addToMetricsAggregator(aggregator, COUNTER_METRIC_TYPE, name, value, data); + addToMetricsAggregator(aggregator, COUNTER_METRIC_TYPE, name, ensureNumber(value), data); } /** @@ -99,7 +99,7 @@ function increment(aggregator: MetricsAggregatorConstructor, name: string, value * @experimental This API is experimental and might have breaking changes in the future. */ function distribution(aggregator: MetricsAggregatorConstructor, name: string, value: number, data?: MetricData): void { - addToMetricsAggregator(aggregator, DISTRIBUTION_METRIC_TYPE, name, value, data); + addToMetricsAggregator(aggregator, DISTRIBUTION_METRIC_TYPE, name, ensureNumber(value), data); } /** @@ -117,7 +117,7 @@ function set(aggregator: MetricsAggregatorConstructor, name: string, value: numb * @experimental This API is experimental and might have breaking changes in the future. */ function gauge(aggregator: MetricsAggregatorConstructor, name: string, value: number, data?: MetricData): void { - addToMetricsAggregator(aggregator, GAUGE_METRIC_TYPE, name, value, data); + addToMetricsAggregator(aggregator, GAUGE_METRIC_TYPE, name, ensureNumber(value), data); } export const metrics = { @@ -130,3 +130,8 @@ export const metrics = { */ getMetricsAggregatorForClient, }; + +// Although this is typed to be a number, we try to handle strings as well here +function ensureNumber(number: number | string): number { + return typeof number === 'string' ? parseInt(number) : number; +}