mirror of
https://github.com/grafana/grafana.git
synced 2025-09-20 00:00:43 +08:00
182 lines
5.2 KiB
TypeScript
182 lines
5.2 KiB
TypeScript
import { DataFrame, FieldType, MutableDataFrame } from '@grafana/data';
|
|
|
|
import { mapDataFrameToAlertPreview } from './preview';
|
|
|
|
describe('mapDataFrameToAlertPreview', () => {
|
|
it('should convert data frame fields into set of labels, state and info', () => {
|
|
const frame: DataFrame = new MutableDataFrame({
|
|
fields: [
|
|
{
|
|
name: 'severity',
|
|
type: FieldType.string,
|
|
values: ['error', 'error', 'warning', 'warning'],
|
|
},
|
|
{
|
|
name: 'node',
|
|
type: FieldType.string,
|
|
values: ['cpu-0', 'cpu-1', 'cpu-0', 'cpu-1'],
|
|
},
|
|
{
|
|
name: 'State',
|
|
type: FieldType.string,
|
|
values: ['Alerting', 'Alerting', 'Alerting', 'Alerting'],
|
|
},
|
|
{
|
|
name: 'Info',
|
|
type: FieldType.string,
|
|
values: ['value=0.34', 'value=0.2', 'value=0.1', 'value=0.66'],
|
|
},
|
|
],
|
|
});
|
|
|
|
const alertPreview = mapDataFrameToAlertPreview(frame);
|
|
|
|
expect(alertPreview.instances).toHaveLength(4);
|
|
expect(alertPreview.instances[0]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.34',
|
|
labels: { severity: 'error', node: 'cpu-0' },
|
|
});
|
|
expect(alertPreview.instances[1]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.2',
|
|
labels: { severity: 'error', node: 'cpu-1' },
|
|
});
|
|
expect(alertPreview.instances[2]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.1',
|
|
labels: { severity: 'warning', node: 'cpu-0' },
|
|
});
|
|
expect(alertPreview.instances[3]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.66',
|
|
labels: { severity: 'warning', node: 'cpu-1' },
|
|
});
|
|
});
|
|
|
|
it('should return 0 instances if there is no State field', () => {
|
|
const frame: DataFrame = new MutableDataFrame({
|
|
fields: [
|
|
{
|
|
name: 'severity',
|
|
type: FieldType.string,
|
|
values: ['error', 'warning'],
|
|
},
|
|
{
|
|
name: 'Info',
|
|
type: FieldType.string,
|
|
values: ['value=0.34', 'value=0.2'],
|
|
},
|
|
],
|
|
});
|
|
|
|
const alertPreview = mapDataFrameToAlertPreview(frame);
|
|
|
|
expect(alertPreview.instances).toHaveLength(0);
|
|
});
|
|
|
|
it('should return instances with labels if there is no Info field', () => {
|
|
const frame: DataFrame = new MutableDataFrame({
|
|
fields: [
|
|
{
|
|
name: 'severity',
|
|
type: FieldType.string,
|
|
values: ['error', 'warning'],
|
|
},
|
|
{
|
|
name: 'State',
|
|
type: FieldType.string,
|
|
values: ['Alerting', 'Alerting'],
|
|
},
|
|
],
|
|
});
|
|
|
|
const alertPreview = mapDataFrameToAlertPreview(frame);
|
|
|
|
expect(alertPreview.instances).toHaveLength(2);
|
|
expect(alertPreview.instances[0]).toEqual({
|
|
state: 'Alerting',
|
|
labels: { severity: 'error' },
|
|
});
|
|
expect(alertPreview.instances[1]).toEqual({
|
|
state: 'Alerting',
|
|
labels: { severity: 'warning' },
|
|
});
|
|
});
|
|
|
|
it('should limit number of instances to number of State values', () => {
|
|
const frame: DataFrame = new MutableDataFrame({
|
|
fields: [
|
|
{
|
|
name: 'severity',
|
|
type: FieldType.string,
|
|
values: ['critical', 'error', 'warning', 'info'],
|
|
},
|
|
{
|
|
name: 'State',
|
|
type: FieldType.string,
|
|
values: ['Alerting', 'Alerting'],
|
|
},
|
|
],
|
|
});
|
|
|
|
const alertPreview = mapDataFrameToAlertPreview(frame);
|
|
|
|
expect(alertPreview.instances).toHaveLength(2);
|
|
expect(alertPreview.instances[0]).toEqual({ state: 'Alerting', labels: { severity: 'critical' } });
|
|
expect(alertPreview.instances[1]).toEqual({ state: 'Alerting', labels: { severity: 'error' } });
|
|
});
|
|
|
|
// Just to be resistant to incomplete data in data frames
|
|
it('should return instances with labels if number of fields values do not match', () => {
|
|
const frame: DataFrame = new MutableDataFrame({
|
|
fields: [
|
|
{
|
|
name: 'severity',
|
|
type: FieldType.string,
|
|
values: ['error', 'error', 'warning', 'warning'],
|
|
},
|
|
{
|
|
name: 'node',
|
|
type: FieldType.string,
|
|
values: ['cpu-0', 'cpu-1', 'cpu-1'],
|
|
},
|
|
{
|
|
name: 'State',
|
|
type: FieldType.string,
|
|
values: ['Alerting', 'Alerting', 'Alerting', 'Alerting'],
|
|
},
|
|
{
|
|
name: 'Info',
|
|
type: FieldType.string,
|
|
values: ['value=0.34', 'value=0.2', 'value=0.66'],
|
|
},
|
|
],
|
|
});
|
|
|
|
const alertPreview = mapDataFrameToAlertPreview(frame);
|
|
|
|
expect(alertPreview.instances).toHaveLength(4);
|
|
expect(alertPreview.instances[0]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.34',
|
|
labels: { severity: 'error', node: 'cpu-0' },
|
|
});
|
|
expect(alertPreview.instances[1]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.2',
|
|
labels: { severity: 'error', node: 'cpu-1' },
|
|
});
|
|
expect(alertPreview.instances[2]).toEqual({
|
|
state: 'Alerting',
|
|
info: 'value=0.66',
|
|
labels: { severity: 'warning', node: 'cpu-1' },
|
|
});
|
|
expect(alertPreview.instances[3]).toEqual({
|
|
state: 'Alerting',
|
|
info: undefined,
|
|
labels: { severity: 'warning', node: undefined },
|
|
});
|
|
});
|
|
});
|