Skip to content

Commit

Permalink
return thresholds for expressions with less/greater than or equal
Browse files Browse the repository at this point in the history
  • Loading branch information
akotynski committed Oct 23, 2017
1 parent c8205b3 commit a15d704
Show file tree
Hide file tree
Showing 7 changed files with 329 additions and 11 deletions.
2 changes: 1 addition & 1 deletion dist/datasource-zabbix/datasource.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/datasource-zabbix/datasource.js.map

Large diffs are not rendered by default.

107 changes: 105 additions & 2 deletions dist/datasource-zabbix/specs/datasource_specs.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ describe('ZabbixDatasource', () => {
beforeEach(() => {
ctx.instanceSettings = {
jsonData: {
alerting: true,
username: 'zabbix',
password: 'zabbix',
trends: true,
Expand All @@ -28,12 +29,12 @@ describe('ZabbixDatasource', () => {
ctx.zabbix = () => {};

ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.dashboardSrv, ctx.zabbixAlertingSrv, ctx.zabbix);
ctx.ds.alertQuery = () => Q.when([]);
});

describe('When querying data', () => {
beforeEach(() => {
ctx.ds.replaceTemplateVars = (str) => str;
ctx.ds.alertQuery = () => Q.when([]);
});

ctx.options = {
Expand Down Expand Up @@ -147,7 +148,7 @@ describe('ZabbixDatasource', () => {
describe('When invoking metricFindQuery()', () => {
beforeEach(() => {
ctx.ds.replaceTemplateVars = (str) => str;
ctx.ds.zabbix = {
ctx.ds.zabbix = {
getGroups: () => Q.when([]),
getHosts: () => Q.when([]),
getApps: () => Q.when([]),
Expand Down Expand Up @@ -234,4 +235,106 @@ describe('ZabbixDatasource', () => {
});
});

describe('When quering alerts', () => {
let options = {};

beforeEach(() => {
ctx.ds.replaceTemplateVars = (str) => str;

let targetItems = [{
"itemid": "1",
"name": "test item",
"key_": "test.key",
"value_type": "3",
"hostid": "10631",
"status": "0",
"state": "0",
"hosts": [{"hostid": "10631", "name": "Test host"}],
"item": "Test item"
}];
ctx.ds.zabbix.getItemsFromTarget = () => Promise.resolve(targetItems);

options = {
"panelId": 10,
"targets": [{
"application": {"filter": ""},
"group": {"filter": "Test group"},
"host": {"filter": "Test host"},
"item": {"filter": "Test item"},
}]
};
});

it('should return threshold when comparative symbol is `less than`', () => {

let itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}<100",
}];

ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);

return ctx.ds.alertQuery(options)
.then(resp => {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(100);
return resp;
});
});

it('should return threshold when comparative symbol is `less than or equal`', () => {

let itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}<=100",
}];

ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);

return ctx.ds.alertQuery(options)
.then(resp => {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(100);
return resp;
});
});

it('should return threshold when comparative symbol is `greater than or equal`', () => {

let itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}>=30",
}];

ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);

return ctx.ds.alertQuery(options)
.then(resp => {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(30);
return resp;
});
});

it('should return threshold when comparative symbol is `equal`', () => {

let itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}=50",
}];

ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);

return ctx.ds.alertQuery(options)
.then(resp => {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(50);
return resp;
});
});
});
});
2 changes: 1 addition & 1 deletion dist/test/datasource-zabbix/datasource.js
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ function filterEnabledTargets(targets) {
}

function getTriggerThreshold(expression) {
var thresholdPattern = /.*[<>]([\d\.]+)/;
var thresholdPattern = /.*[<>=]{1,2}([\d\.]+)/;
var finded_thresholds = expression.match(thresholdPattern);
if (finded_thresholds && finded_thresholds.length >= 2) {
var threshold = finded_thresholds[1];
Expand Down
118 changes: 115 additions & 3 deletions dist/test/datasource-zabbix/specs/datasource_specs.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ describe('ZabbixDatasource', function () {
beforeEach(function () {
ctx.instanceSettings = {
jsonData: {
alerting: true,
username: 'zabbix',
password: 'zabbix',
trends: true,
Expand All @@ -42,16 +43,16 @@ describe('ZabbixDatasource', function () {
ctx.zabbix = function () {};

ctx.ds = new _module.Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.dashboardSrv, ctx.zabbixAlertingSrv, ctx.zabbix);
ctx.ds.alertQuery = function () {
return _q2.default.when([]);
};
});

describe('When querying data', function () {
beforeEach(function () {
ctx.ds.replaceTemplateVars = function (str) {
return str;
};
ctx.ds.alertQuery = function () {
return _q2.default.when([]);
};
});

ctx.options = {
Expand Down Expand Up @@ -323,4 +324,115 @@ describe('ZabbixDatasource', function () {
done();
});
});

describe('When quering alerts', function () {
var options = {};

beforeEach(function () {
ctx.ds.replaceTemplateVars = function (str) {
return str;
};

var targetItems = [{
"itemid": "1",
"name": "test item",
"key_": "test.key",
"value_type": "3",
"hostid": "10631",
"status": "0",
"state": "0",
"hosts": [{ "hostid": "10631", "name": "Test host" }],
"item": "Test item"
}];
ctx.ds.zabbix.getItemsFromTarget = function () {
return Promise.resolve(targetItems);
};

options = {
"panelId": 10,
"targets": [{
"application": { "filter": "" },
"group": { "filter": "Test group" },
"host": { "filter": "Test host" },
"item": { "filter": "Test item" }
}]
};
});

it('should return threshold when comparative symbol is `less than`', function () {

var itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}<100"
}];

ctx.ds.zabbix.getAlerts = function () {
return Promise.resolve(itemTriggers);
};

return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(100);
return resp;
});
});

it('should return threshold when comparative symbol is `less than or equal`', function () {

var itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}<=100"
}];

ctx.ds.zabbix.getAlerts = function () {
return Promise.resolve(itemTriggers);
};

return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(100);
return resp;
});
});

it('should return threshold when comparative symbol is `greater than or equal`', function () {

var itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}>=30"
}];

ctx.ds.zabbix.getAlerts = function () {
return Promise.resolve(itemTriggers);
};

return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(30);
return resp;
});
});

it('should return threshold when comparative symbol is `equal`', function () {

var itemTriggers = [{
"triggerid": "15383",
"priority": "4",
"expression": "{15915}=50"
}];

ctx.ds.zabbix.getAlerts = function () {
return Promise.resolve(itemTriggers);
};

return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).to.equal(1);
expect(resp.thresholds[0]).to.equal(50);
return resp;
});
});
});
});
2 changes: 1 addition & 1 deletion src/datasource-zabbix/datasource.js
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ function filterEnabledTargets(targets) {
}

function getTriggerThreshold(expression) {
let thresholdPattern = /.*[<>]([\d\.]+)/;
let thresholdPattern = /.*[<>=]{1,2}([\d\.]+)/;
let finded_thresholds = expression.match(thresholdPattern);
if (finded_thresholds && finded_thresholds.length >= 2) {
let threshold = finded_thresholds[1];
Expand Down
Loading

0 comments on commit a15d704

Please sign in to comment.