Updated datasource.metricFindQuery() for working with cache.

This commit is contained in:
Alexander Zobnin
2016-01-30 22:30:23 +03:00
parent 075fed6668
commit 4231d3769a
3 changed files with 147 additions and 36 deletions

View File

@@ -277,6 +277,8 @@ function (angular, _, dateMath, utils, metricFunctions) {
* of metrics in "{metric1,metcic2,...,metricN}" format.
*/
this.metricFindQuery = function (query) {
var metrics;
// Split query. Query structure:
// group.host.app.item
var parts = [];
@@ -294,49 +296,22 @@ function (angular, _, dateMath, utils, metricFunctions) {
// Get items
if (parts.length === 4) {
return this.zabbixAPI.itemFindQuery(template.group, template.host, template.app)
.then(function (result) {
return _.map(result, function (item) {
var itemname = zabbixHelperSrv.expandItemName(item);
return {
text: itemname,
expandable: false
};
});
});
var items = this.queryProcessor.filterItems(template.host, template.app, true);
metrics = _.map(items, formatMetric);
}
// Get applications
else if (parts.length === 3) {
return this.zabbixAPI.appFindQuery(template.host, template.group).then(function (result) {
return _.map(result, function (app) {
return {
text: app.name,
expandable: false
};
});
});
var apps = this.queryProcessor.filterApplications(template.host);
metrics = _.map(apps, formatMetric);
}
// Get hosts
else if (parts.length === 2) {
return this.zabbixAPI.hostFindQuery(template.group).then(function (result) {
return _.map(result, function (host) {
return {
text: host.name,
expandable: false
};
});
});
var hosts = this.queryProcessor.filterHosts(template.group);
metrics = _.map(hosts, formatMetric);
}
// Get groups
else if (parts.length === 1) {
return this.zabbixAPI.getGroupByName(template.group).then(function (result) {
return _.map(result, function (hostgroup) {
return {
text: hostgroup.name,
expandable: false
};
});
});
metrics = _.map(this.zabbixCache.getGroups(template.group), formatMetric);
}
// Return empty object for invalid request
else {
@@ -344,8 +319,17 @@ function (angular, _, dateMath, utils, metricFunctions) {
d.resolve([]);
return d.promise;
}
return $q.when(metrics);
};
function formatMetric(metricObj) {
return {
text: metricObj.name,
expandable: false
};
}
/////////////////
// Annotations //
/////////////////

View File

@@ -28,6 +28,133 @@ function (angular, _, utils) {
}
};
this.filterHosts = function(groupFilter) {
var groups = [];
var hosts = [];
var groupList = self.cache.getGroups();
// Filter groups by regex
if (utils.isRegex(groupFilter)) {
var filterPattern = utils.buildRegex(groupFilter);
groups = _.filter(groupList, function (groupObj) {
return filterPattern.test(groupObj.name);
});
}
// Find hosts in selected group
else {
var finded = _.find(groupList, {'name': groupFilter});
if (finded) {
groups.push(finded);
} else {
groups = undefined;
}
}
if (groups) {
var groupids = _.map(groups, 'groupid');
hosts = _.filter(self.cache.getHosts(), function (hostObj) {
return _.intersection(groupids, hostObj.groups).length;
});
}
return hosts;
};
this.filterApplications = function(hostFilter) {
var hosts = [];
var apps = [];
var hostList = this.cache.getHosts();
// Filter hosts by regex
if (utils.isRegex(hostFilter)) {
var filterPattern = utils.buildRegex(hostFilter);
hosts = _.filter(hostList, function (hostObj) {
return filterPattern.test(hostObj.name);
});
}
// Find applications in selected host
else {
var finded = _.find(hostList, {'name': hostFilter});
if (finded) {
hosts.push(finded);
} else {
hosts = undefined;
}
}
if (hosts) {
var hostsids = _.map(hosts, 'hostid');
apps = _.filter(this.cache.getApplications(), function (appObj) {
return _.intersection(hostsids, appObj.hosts).length;
});
}
return apps;
};
this.filterItems = function (hostFilter, appFilter, showDisabledItems) {
var hosts = [];
var apps = [];
var items = [];
var hostList = this.cache.getHosts();
var applicationList = this.cache.getApplications();
// Filter hosts by regex
if (utils.isRegex(hostFilter)) {
var hostFilterPattern = utils.buildRegex(hostFilter);
hosts = _.filter(hostList, function (hostObj) {
return hostFilterPattern.test(hostObj.name);
});
}
else {
var findedHosts = _.find(hostList, {'name': hostFilter});
if (findedHosts) {
hosts.push(findedHosts);
} else {
hosts = undefined;
}
}
// Filter applications by regex
if (utils.isRegex(appFilter)) {
var filterPattern = utils.buildRegex(appFilter);
apps = _.filter(applicationList, function (appObj) {
return filterPattern.test(appObj.name);
});
}
// Find items in selected application
else if (appFilter) {
var finded = _.find(applicationList, {'name': appFilter});
if (finded) {
apps.push(finded);
} else {
apps = undefined;
}
} else {
apps = undefined;
if (hosts) {
items = _.filter(this.cache.getItems(), function (itemObj) {
return _.find(hosts, {'hostid': itemObj.hostid });
});
}
}
if (apps) {
var appids = _.flatten(_.map(apps, 'applicationids'));
items = _.filter(this.cache.getItems(), function (itemObj) {
return _.intersection(appids, itemObj.applications).length;
});
items = _.filter(items, function (itemObj) {
return _.find(hosts, {'hostid': itemObj.hostid });
});
}
if (!showDisabledItems) {
items = _.filter(items, {'status': '0'});
}
return items;
};
/**
* Build query - convert target filters to array of Zabbix items
*/

View File

@@ -5,7 +5,7 @@ define([
function (_, moment) {
'use strict';
function utils() {
function Utils() {
/**
* Expand Zabbix item name
@@ -49,5 +49,5 @@ function (_, moment) {
}
return new utils();
return new Utils();
});