mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-24 17:51:14 +02:00
feat: infinity representation serializable
This commit is contained in:
parent
2b9c580a29
commit
4a2b4dbd49
@ -26,7 +26,7 @@ describe('BatchHistogram', () => {
|
||||
{ le: 1, count: 7 },
|
||||
{ le: 2.5, count: 9 },
|
||||
{ le: 5, count: 10 },
|
||||
{ le: Number.POSITIVE_INFINITY, count: 10 },
|
||||
{ le: '+Inf', count: 10 },
|
||||
],
|
||||
},
|
||||
);
|
||||
@ -71,7 +71,7 @@ describe('BatchHistogram', () => {
|
||||
{ le: 1, count: 4 },
|
||||
{ le: 2.5, count: 5 },
|
||||
{ le: 5, count: 5 },
|
||||
{ le: Number.POSITIVE_INFINITY, count: 5 },
|
||||
{ le: '+Inf', count: 5 },
|
||||
],
|
||||
},
|
||||
);
|
||||
@ -87,7 +87,7 @@ describe('BatchHistogram', () => {
|
||||
{ le: 1, count: 2 },
|
||||
{ le: 2.5, count: 3 },
|
||||
{ le: 5, count: 3 },
|
||||
{ le: Number.POSITIVE_INFINITY, count: 3 },
|
||||
{ le: '+Inf', count: 3 },
|
||||
],
|
||||
},
|
||||
);
|
||||
@ -125,7 +125,7 @@ describe('BatchHistogram', () => {
|
||||
sum: 1.5,
|
||||
buckets: [
|
||||
{ le: 1, count: 2 },
|
||||
{ le: Number.POSITIVE_INFINITY, count: 3 },
|
||||
{ le: '+Inf', count: 3 },
|
||||
],
|
||||
},
|
||||
);
|
||||
@ -137,7 +137,7 @@ describe('BatchHistogram', () => {
|
||||
sum: 3.0,
|
||||
buckets: [
|
||||
{ le: 1, count: 1 },
|
||||
{ le: Number.POSITIVE_INFINITY, count: 2 },
|
||||
{ le: '+Inf', count: 2 },
|
||||
],
|
||||
},
|
||||
);
|
||||
@ -170,4 +170,27 @@ describe('BatchHistogram', () => {
|
||||
/test_histogram_count{app="my_app",service="web"} 2/,
|
||||
);
|
||||
});
|
||||
|
||||
test('should handle "+Inf" string from SDK serialization', async () => {
|
||||
histogram.recordBatch(
|
||||
{ client: 'sdk' },
|
||||
{
|
||||
count: 5,
|
||||
sum: 12.3,
|
||||
buckets: [
|
||||
{ le: 1, count: 3 },
|
||||
{ le: '+Inf', count: 5 }, // String instead of Infinity
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
const metrics = await registry.metrics();
|
||||
|
||||
expect(metrics).toMatch(/test_histogram_bucket{client="sdk",le="1"} 3/);
|
||||
expect(metrics).toMatch(
|
||||
/test_histogram_bucket{client="sdk",le="\+Inf"} 5/,
|
||||
);
|
||||
expect(metrics).toMatch(/test_histogram_sum{client="sdk"} 12\.3/);
|
||||
expect(metrics).toMatch(/test_histogram_count{client="sdk"} 5/);
|
||||
});
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
import type { Registry } from 'prom-client';
|
||||
|
||||
interface BucketData {
|
||||
le: number;
|
||||
le: number | '+Inf';
|
||||
count: number;
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ export class BatchHistogram {
|
||||
{
|
||||
count: number;
|
||||
sum: number;
|
||||
buckets: Map<number, number>;
|
||||
buckets: Map<number | '+Inf', number>;
|
||||
}
|
||||
> = new Map();
|
||||
|
||||
@ -86,15 +86,17 @@ export class BatchHistogram {
|
||||
|
||||
for (const [le, cumulativeCount] of Array.from(
|
||||
data.buckets.entries(),
|
||||
).sort((a, b) => a[0] - b[0])) {
|
||||
).sort((a, b) => {
|
||||
// Sort buckets: numbers first (ascending), then '+Inf' last
|
||||
if (a[0] === '+Inf') return 1;
|
||||
if (b[0] === '+Inf') return -1;
|
||||
return (a[0] as number) - (b[0] as number);
|
||||
})) {
|
||||
values.push({
|
||||
value: cumulativeCount,
|
||||
labels: {
|
||||
...labels,
|
||||
le:
|
||||
le === Number.POSITIVE_INFINITY
|
||||
? '+Inf'
|
||||
: le.toString(),
|
||||
le: le.toString(),
|
||||
},
|
||||
metricName: `${this.name}_bucket`,
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user