The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/panel/graph/specs/threshold_manager.test.ts

148 lines
4.7 KiB

import angular from 'angular';
import TimeSeries from 'app/core/time_series2';
import { ThresholdManager } from '../threshold_manager';
describe('ThresholdManager', () => {
function plotOptionsScenario(desc: string, func: any) {
describe(desc, () => {
const ctx: any = {
panel: {
thresholds: [],
},
options: {
grid: { markings: [] },
},
panelCtrl: {},
};
ctx.setup = (thresholds: any, data: any) => {
ctx.panel.thresholds = thresholds;
const manager = new ThresholdManager(ctx.panelCtrl);
if (data !== undefined) {
const element = angular.element('<div grafana-graph><div>');
manager.prepare(element, data);
}
manager.addFlotOptions(ctx.options, ctx.panel);
};
func(ctx);
});
}
describe('When creating plot markings', () => {
plotOptionsScenario('for simple gt threshold', (ctx: any) => {
ctx.setup([{ op: 'gt', value: 300, fill: true, line: true, colorMode: 'critical' }]);
it('should add fill for threshold with fill: true', () => {
const markings = ctx.options.grid.markings;
expect(markings[0].yaxis.from).toBe(300);
expect(markings[0].yaxis.to).toBe(Infinity);
expect(markings[0].color).toBe('rgba(234, 112, 112, 0.12)');
});
it('should add line', () => {
const markings = ctx.options.grid.markings;
expect(markings[1].yaxis.from).toBe(300);
expect(markings[1].yaxis.to).toBe(300);
expect(markings[1].color).toBe('rgba(237, 46, 24, 0.60)');
});
});
plotOptionsScenario('for two gt thresholds', (ctx: any) => {
ctx.setup([
{ op: 'gt', value: 200, fill: true, colorMode: 'warning' },
{ op: 'gt', value: 300, fill: true, colorMode: 'critical' },
]);
it('should add fill for first thresholds to next threshold', () => {
const markings = ctx.options.grid.markings;
expect(markings[0].yaxis.from).toBe(200);
expect(markings[0].yaxis.to).toBe(300);
});
it('should add fill for last thresholds to infinity', () => {
const markings = ctx.options.grid.markings;
expect(markings[1].yaxis.from).toBe(300);
expect(markings[1].yaxis.to).toBe(Infinity);
});
});
plotOptionsScenario('for lt then gt threshold (inside)', (ctx: any) => {
ctx.setup([
{ op: 'lt', value: 300, fill: true, colorMode: 'critical' },
{ op: 'gt', value: 200, fill: true, colorMode: 'critical' },
]);
it('should add fill for first thresholds to next threshold', () => {
const markings = ctx.options.grid.markings;
expect(markings[0].yaxis.from).toBe(300);
expect(markings[0].yaxis.to).toBe(200);
});
it('should add fill for last thresholds to itself', () => {
const markings = ctx.options.grid.markings;
expect(markings[1].yaxis.from).toBe(200);
expect(markings[1].yaxis.to).toBe(200);
});
});
plotOptionsScenario('for gt then lt threshold (outside)', (ctx: any) => {
ctx.setup([
{ op: 'gt', value: 300, fill: true, colorMode: 'critical' },
{ op: 'lt', value: 200, fill: true, colorMode: 'critical' },
]);
it('should add fill for first thresholds to next threshold', () => {
const markings = ctx.options.grid.markings;
expect(markings[0].yaxis.from).toBe(300);
expect(markings[0].yaxis.to).toBe(Infinity);
});
it('should add fill for last thresholds to itself', () => {
const markings = ctx.options.grid.markings;
expect(markings[1].yaxis.from).toBe(200);
expect(markings[1].yaxis.to).toBe(-Infinity);
});
});
plotOptionsScenario('for threshold on two Y axes', (ctx: any) => {
const data = new Array(2);
data[0] = new TimeSeries({
datapoints: [
[0, 1],
[300, 2],
],
alias: 'left',
});
data[0].yaxis = 1;
data[1] = new TimeSeries({
datapoints: [
[0, 1],
[300, 2],
],
alias: 'right',
});
data[1].yaxis = 2;
ctx.setup(
[
{ op: 'gt', value: 100, line: true, colorMode: 'critical' },
{ op: 'gt', value: 200, line: true, colorMode: 'critical', yaxis: 'right' },
],
data
);
it('should add first threshold for left axis', () => {
const markings = ctx.options.grid.markings;
expect(markings[0].yaxis.from).toBe(100);
});
it('should add second threshold for right axis', () => {
const markings = ctx.options.grid.markings;
expect(markings[1].y2axis.from).toBe(200);
});
});
});
});