2025-04-01 10:38:02 +09:00

102 lines
3.8 KiB
TypeScript

import { AutoQueryContext } from '../types';
import { createHistogramMetricQueryDefs } from './histogram';
describe('createHistogramMetricQueryDefs utf8=false', () => {
const ctx: AutoQueryContext = {
metricParts: ['test', 'latency', 'seconds', 'bucket'],
isUtf8Metric: false,
suffix: 'bucket',
unitSuffix: 'seconds',
unit: 's',
};
it('should create the correct title and unit for metricParts', () => {
const result = createHistogramMetricQueryDefs(ctx);
expect(result.preview.title).toBe('${metric}');
expect(result.preview.unit).toBe('s');
});
it('should generate correct p50 AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const p50Query = result.breakdown.queries[0];
expect(p50Query.expr).toBe(
'histogram_quantile(0.5, sum by(le, ${groupby}) (rate(${metric}{${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(p50Query.legendFormat).toBe('{{${groupby}}}');
});
it('should generate correct percentiles AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const percentileQueries = result.variants[0].queries;
expect(percentileQueries[0].expr).toBe(
'histogram_quantile(0.99, sum by(le) (rate(${metric}{${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(percentileQueries[1].expr).toBe(
'histogram_quantile(0.9, sum by(le) (rate(${metric}{${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(percentileQueries[2].expr).toBe(
'histogram_quantile(0.5, sum by(le) (rate(${metric}{${filters}}[$__rate_interval]) ${otel_join_query}))'
);
});
it('should generate correct heatmap AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const heatmapQuery = result.preview.queries[0];
expect(heatmapQuery.expr).toBe('sum by(le) (rate(${metric}{${filters}}[$__rate_interval]) ${otel_join_query})');
expect(result.preview.variant).toBe('heatmap');
});
});
describe('createHistogramMetricQueryDefs utf8=true', () => {
const ctx: AutoQueryContext = {
metricParts: ['test', 'latency', 'seconds', 'bucket'],
isUtf8Metric: true,
suffix: 'bucket',
unitSuffix: 'seconds',
unit: 's',
};
it('should create the correct title and unit for metricParts', () => {
const result = createHistogramMetricQueryDefs(ctx);
expect(result.preview.title).toBe('${metric}');
expect(result.preview.unit).toBe('s');
});
it('should generate correct p50 AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const p50Query = result.breakdown.queries[0];
expect(p50Query.expr).toBe(
'histogram_quantile(0.5, sum by(le, ${groupby}) (rate({"${metric}", ${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(p50Query.legendFormat).toBe('{{${groupby}}}');
});
it('should generate correct percentiles AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const percentileQueries = result.variants[0].queries;
expect(percentileQueries[0].expr).toBe(
'histogram_quantile(0.99, sum by(le) (rate({"${metric}", ${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(percentileQueries[1].expr).toBe(
'histogram_quantile(0.9, sum by(le) (rate({"${metric}", ${filters}}[$__rate_interval]) ${otel_join_query}))'
);
expect(percentileQueries[2].expr).toBe(
'histogram_quantile(0.5, sum by(le) (rate({"${metric}", ${filters}}[$__rate_interval]) ${otel_join_query}))'
);
});
it('should generate correct heatmap AutoQueryDef', () => {
const result = createHistogramMetricQueryDefs(ctx);
const heatmapQuery = result.preview.queries[0];
expect(heatmapQuery.expr).toBe('sum by(le) (rate({"${metric}", ${filters}}[$__rate_interval]) ${otel_join_query})');
expect(result.preview.variant).toBe('heatmap');
});
});