iss #19 - Get IT service data and handle response.
This commit is contained in:
@@ -94,93 +94,103 @@ function (angular, _, kbn) {
|
|||||||
// Create request for each target
|
// Create request for each target
|
||||||
var promises = _.map(options.targets, function(target) {
|
var promises = _.map(options.targets, function(target) {
|
||||||
|
|
||||||
// Don't show undefined and hidden targets
|
if (!target.ITService) {
|
||||||
if (target.hide || !target.group || !target.host
|
// Don't show undefined and hidden targets
|
||||||
|| !target.application || !target.item) {
|
if (target.hide || !target.group || !target.host
|
||||||
return [];
|
|| !target.application || !target.item) {
|
||||||
}
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
// Replace templated variables
|
// Replace templated variables
|
||||||
var groupname = templateSrv.replace(target.group.name);
|
var groupname = templateSrv.replace(target.group.name);
|
||||||
var hostname = templateSrv.replace(target.host.name);
|
var hostname = templateSrv.replace(target.host.name);
|
||||||
var appname = templateSrv.replace(target.application.name);
|
var appname = templateSrv.replace(target.application.name);
|
||||||
var itemname = templateSrv.replace(target.item.name);
|
var itemname = templateSrv.replace(target.item.name);
|
||||||
|
|
||||||
// Extract zabbix groups, hosts and apps from string:
|
// Extract zabbix groups, hosts and apps from string:
|
||||||
// "{host1,host2,...,hostN}" --> [host1, host2, ..., hostN]
|
// "{host1,host2,...,hostN}" --> [host1, host2, ..., hostN]
|
||||||
var groups = zabbixHelperSrv.splitMetrics(groupname);
|
var groups = zabbixHelperSrv.splitMetrics(groupname);
|
||||||
var hosts = zabbixHelperSrv.splitMetrics(hostname);
|
var hosts = zabbixHelperSrv.splitMetrics(hostname);
|
||||||
var apps = zabbixHelperSrv.splitMetrics(appname);
|
var apps = zabbixHelperSrv.splitMetrics(appname);
|
||||||
|
|
||||||
// Remove hostnames from item names and then
|
// Remove hostnames from item names and then
|
||||||
// extract item names
|
// extract item names
|
||||||
// "hostname: itemname" --> "itemname"
|
// "hostname: itemname" --> "itemname"
|
||||||
var delete_hostname_pattern = /(?:\[[\w\.]+]:\s)/g;
|
var delete_hostname_pattern = /(?:\[[\w\.]+]:\s)/g;
|
||||||
var itemnames = zabbixHelperSrv.splitMetrics(itemname.replace(delete_hostname_pattern, ''));
|
var itemnames = zabbixHelperSrv.splitMetrics(itemname.replace(delete_hostname_pattern, ''));
|
||||||
|
|
||||||
// Find items by item names and perform queries
|
// Find items by item names and perform queries
|
||||||
var self = this;
|
var self = this;
|
||||||
return this.zabbixAPI.itemFindQuery(groups, hosts, apps)
|
return this.zabbixAPI.itemFindQuery(groups, hosts, apps)
|
||||||
.then(function (items) {
|
.then(function (items) {
|
||||||
|
|
||||||
// Filter hosts by regex
|
// Filter hosts by regex
|
||||||
if (target.host.visible_name === 'All') {
|
if (target.host.visible_name === 'All') {
|
||||||
if (target.hostFilter && _.every(items, _.identity.hosts)) {
|
if (target.hostFilter && _.every(items, _.identity.hosts)) {
|
||||||
|
|
||||||
// Use templated variables in filter
|
// Use templated variables in filter
|
||||||
var host_pattern = new RegExp(templateSrv.replace(target.hostFilter));
|
var host_pattern = new RegExp(templateSrv.replace(target.hostFilter));
|
||||||
items = _.filter(items, function (item) {
|
items = _.filter(items, function (item) {
|
||||||
return _.some(item.hosts, function (host) {
|
return _.some(item.hosts, function (host) {
|
||||||
return host_pattern.test(host.name);
|
return host_pattern.test(host.name);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (itemnames[0] === 'All') {
|
if (itemnames[0] === 'All') {
|
||||||
|
|
||||||
// Filter items by regex
|
// Filter items by regex
|
||||||
if (target.itemFilter) {
|
if (target.itemFilter) {
|
||||||
|
|
||||||
// Use templated variables in filter
|
// Use templated variables in filter
|
||||||
var item_pattern = new RegExp(templateSrv.replace(target.itemFilter));
|
var item_pattern = new RegExp(templateSrv.replace(target.itemFilter));
|
||||||
|
return _.filter(items, function (item) {
|
||||||
|
return item_pattern.test(zabbixHelperSrv.expandItemName(item));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Filtering items
|
||||||
return _.filter(items, function (item) {
|
return _.filter(items, function (item) {
|
||||||
return item_pattern.test(zabbixHelperSrv.expandItemName(item));
|
return _.contains(itemnames, zabbixHelperSrv.expandItemName(item));
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
return items;
|
|
||||||
}
|
}
|
||||||
} else {
|
}).then(function (items) {
|
||||||
|
|
||||||
// Filtering items
|
// Don't perform query for high number of items
|
||||||
return _.filter(items, function (item) {
|
// to prevent Grafana slowdown
|
||||||
return _.contains(itemnames, zabbixHelperSrv.expandItemName(item));
|
if (items.length > self.limitmetrics) {
|
||||||
});
|
var message = "Try to increase limitmetrics parameter in datasource config.<br>"
|
||||||
}
|
+ "Current limitmetrics value is " + self.limitmetrics;
|
||||||
}).then(function (items) {
|
alertSrv.set("Metrics limit exceeded", message, "warning", 10000);
|
||||||
|
return [];
|
||||||
// Don't perform query for high number of items
|
|
||||||
// to prevent Grafana slowdown
|
|
||||||
if (items.length > self.limitmetrics) {
|
|
||||||
var message = "Try to increase limitmetrics parameter in datasource config.<br>"
|
|
||||||
+ "Current limitmetrics value is " + self.limitmetrics;
|
|
||||||
alertSrv.set("Metrics limit exceeded", message, "warning", 10000);
|
|
||||||
return [];
|
|
||||||
} else {
|
|
||||||
items = _.flatten(items);
|
|
||||||
|
|
||||||
// Use alias only for single metric, otherwise use item names
|
|
||||||
var alias = target.item.name === 'All' || itemnames.length > 1 ? undefined : templateSrv.replace(target.alias);
|
|
||||||
|
|
||||||
if ((from < useTrendsFrom) && self.trends) {
|
|
||||||
return self.zabbixAPI.getTrends(items, from, to)
|
|
||||||
.then(_.bind(zabbixHelperSrv.handleTrendResponse, zabbixHelperSrv, items, alias, target.scale));
|
|
||||||
} else {
|
} else {
|
||||||
return self.zabbixAPI.getHistory(items, from, to)
|
items = _.flatten(items);
|
||||||
.then(_.bind(zabbixHelperSrv.handleHistoryResponse, zabbixHelperSrv, items, alias, target.scale));
|
|
||||||
|
// Use alias only for single metric, otherwise use item names
|
||||||
|
var alias = target.item.name === 'All' || itemnames.length > 1 ? undefined : templateSrv.replace(target.alias);
|
||||||
|
|
||||||
|
if ((from < useTrendsFrom) && self.trends) {
|
||||||
|
return self.zabbixAPI.getTrends(items, from, to)
|
||||||
|
.then(_.bind(zabbixHelperSrv.handleTrendResponse, zabbixHelperSrv, items, alias, target.scale));
|
||||||
|
} else {
|
||||||
|
return self.zabbixAPI.getHistory(items, from, to)
|
||||||
|
.then(_.bind(zabbixHelperSrv.handleHistoryResponse, zabbixHelperSrv, items, alias, target.scale));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
} else {
|
||||||
|
// Don't show undefined and hidden targets
|
||||||
|
if (target.hide || !target.itservice || !target.slaProperty) {
|
||||||
|
return [];
|
||||||
|
} else {
|
||||||
|
return this.zabbixAPI.getSLA(target.itservice.serviceid, from, to)
|
||||||
|
.then(_.bind(zabbixHelperSrv.handleSLAResponse, zabbixHelperSrv, target.itservice, target.slaProperty));
|
||||||
|
}
|
||||||
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
return $q.all(_.flatten(promises)).then(function (results) {
|
return $q.all(_.flatten(promises)).then(function (results) {
|
||||||
|
|||||||
@@ -109,6 +109,24 @@ function (angular, _) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert Zabbix API service.getsla response to Grafana format
|
||||||
|
*
|
||||||
|
* @param itservice
|
||||||
|
* @param slaProperty
|
||||||
|
* @param slaObject
|
||||||
|
* @returns {{target: *, datapoints: *[]}}
|
||||||
|
*/
|
||||||
|
this.handleSLAResponse = function (itservice, slaProperty, slaObject) {
|
||||||
|
var targetSLA = slaObject[itservice.serviceid].sla[0];
|
||||||
|
return {
|
||||||
|
target: itservice.name,
|
||||||
|
datapoints: [
|
||||||
|
[targetSLA[slaProperty.property], targetSLA.to * 1000]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expand item parameters, for example:
|
* Expand item parameters, for example:
|
||||||
* CPU $2 time ($3) --> CPU system time (avg1)
|
* CPU $2 time ($3) --> CPU system time (avg1)
|
||||||
|
|||||||
Reference in New Issue
Block a user