mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
157 lines
3.9 KiB
TypeScript
157 lines
3.9 KiB
TypeScript
import { Field, FieldType, createDataFrame } from '@grafana/data';
|
|
|
|
import { getDiffTooltipData, getTooltipData } from './FlameGraphTooltip';
|
|
import { FlameGraphDataContainer } from './dataTransform';
|
|
|
|
function setupData(unit?: string) {
|
|
const flameGraphData = createDataFrame({
|
|
fields: [
|
|
{ name: 'level', values: [0] },
|
|
unit ? makeField('value', unit, [8_624_078_250]) : { name: 'value', values: [8_624_078_250] },
|
|
{ name: 'self', values: [978_250] },
|
|
{ name: 'label', values: ['total'] },
|
|
],
|
|
});
|
|
return new FlameGraphDataContainer(flameGraphData);
|
|
}
|
|
|
|
function setupDiffData() {
|
|
const flameGraphData = createDataFrame({
|
|
fields: [
|
|
{ name: 'level', values: [0, 1] },
|
|
{ name: 'value', values: [200, 90] },
|
|
{ name: 'valueRight', values: [100, 40] },
|
|
{ name: 'self', values: [110, 90] },
|
|
{ name: 'selfRight', values: [60, 40] },
|
|
{ name: 'label', values: ['total', 'func1'] },
|
|
],
|
|
});
|
|
return new FlameGraphDataContainer(flameGraphData);
|
|
}
|
|
|
|
describe('FlameGraphTooltip', () => {
|
|
it('for bytes', () => {
|
|
const tooltipData = getTooltipData(
|
|
setupData('bytes'),
|
|
{ start: 0, itemIndexes: [0], value: 8_624_078_250, children: [] },
|
|
8_624_078_250
|
|
);
|
|
expect(tooltipData).toEqual({
|
|
percentSelf: 0.01,
|
|
percentValue: 100,
|
|
unitTitle: 'RAM',
|
|
unitSelf: '955 KiB',
|
|
unitValue: '8.03 GiB',
|
|
samples: '8,624,078,250',
|
|
});
|
|
});
|
|
|
|
it('with default unit', () => {
|
|
const tooltipData = getTooltipData(
|
|
setupData('none'),
|
|
{ start: 0, itemIndexes: [0], value: 8_624_078_250, children: [] },
|
|
8_624_078_250
|
|
);
|
|
expect(tooltipData).toEqual({
|
|
percentSelf: 0.01,
|
|
percentValue: 100,
|
|
unitSelf: '978250',
|
|
unitTitle: 'Count',
|
|
unitValue: '8624078250',
|
|
samples: '8,624,078,250',
|
|
});
|
|
});
|
|
|
|
it('without unit', () => {
|
|
const tooltipData = getTooltipData(
|
|
setupData('none'),
|
|
{ start: 0, itemIndexes: [0], value: 8_624_078_250, children: [] },
|
|
8_624_078_250
|
|
);
|
|
expect(tooltipData).toEqual({
|
|
percentSelf: 0.01,
|
|
percentValue: 100,
|
|
unitTitle: 'Count',
|
|
unitSelf: '978250',
|
|
unitValue: '8624078250',
|
|
samples: '8,624,078,250',
|
|
});
|
|
});
|
|
|
|
it('for objects', () => {
|
|
const tooltipData = getTooltipData(
|
|
setupData('short'),
|
|
{ start: 0, itemIndexes: [0], value: 8_624_078_250, children: [] },
|
|
8_624_078_250
|
|
);
|
|
expect(tooltipData).toEqual({
|
|
percentSelf: 0.01,
|
|
percentValue: 100,
|
|
unitTitle: 'Count',
|
|
unitSelf: '978 K',
|
|
unitValue: '8.62 Bil',
|
|
samples: '8,624,078,250',
|
|
});
|
|
});
|
|
|
|
it('for nanoseconds', () => {
|
|
const tooltipData = getTooltipData(
|
|
setupData('ns'),
|
|
{ start: 0, itemIndexes: [0], value: 8_624_078_250, children: [] },
|
|
8_624_078_250
|
|
);
|
|
expect(tooltipData).toEqual({
|
|
percentSelf: 0.01,
|
|
percentValue: 100,
|
|
unitTitle: 'Time',
|
|
unitSelf: '978 µs',
|
|
unitValue: '8.62 s',
|
|
samples: '8,624,078,250',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getDiffTooltipData', () => {
|
|
it('works with diff data', () => {
|
|
const tooltipData = getDiffTooltipData(
|
|
setupDiffData(),
|
|
{ start: 0, itemIndexes: [1], value: 90, valueRight: 40, children: [] },
|
|
200
|
|
);
|
|
expect(tooltipData).toEqual([
|
|
{
|
|
rowId: '1',
|
|
label: '% of total',
|
|
baseline: '50%',
|
|
comparison: '40%',
|
|
diff: '-20%',
|
|
},
|
|
{
|
|
rowId: '2',
|
|
label: 'Value',
|
|
baseline: '50',
|
|
comparison: '40',
|
|
diff: '-10',
|
|
},
|
|
{
|
|
rowId: '3',
|
|
label: 'Samples',
|
|
baseline: '50',
|
|
comparison: '40',
|
|
diff: '-10',
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
function makeField(name: string, unit: string, values: number[]): Field {
|
|
return {
|
|
name,
|
|
type: FieldType.number,
|
|
config: {
|
|
unit,
|
|
},
|
|
values: values,
|
|
};
|
|
}
|