Fixed #176 - Table panel issue with TextMode and multiple items.

This commit is contained in:
Alexander Zobnin
2016-04-12 14:59:36 +03:00
parent e210150c82
commit cdc6b96c41

View File

@@ -134,8 +134,9 @@ export class ZabbixAPIDatasource {
if (!target.mode || target.mode === 0) { if (!target.mode || target.mode === 0) {
// Build query in asynchronous manner // Build query in asynchronous manner
return self.queryProcessor.build(groupFilter, hostFilter, appFilter, itemFilter) return self.queryProcessor
.then(function(items) { .build(groupFilter, hostFilter, appFilter, itemFilter)
.then(items => {
// Add hostname for items from multiple hosts // Add hostname for items from multiple hosts
var addHostName = utils.isRegex(target.host.filter); var addHostName = utils.isRegex(target.host.filter);
var getHistory; var getHistory;
@@ -207,36 +208,40 @@ export class ZabbixAPIDatasource {
// Query text data // Query text data
else if (target.mode === 2) { else if (target.mode === 2) {
return self.queryProcessor.build(groupFilter, hostFilter, appFilter, itemFilter, 'text') return self.queryProcessor
.then(function(items) { .build(groupFilter, hostFilter, appFilter, itemFilter, 'text')
var deferred = self.q.defer(); .then(items => {
if (items.length) { if (items.length) {
self.zabbixAPI.getLastValue(items[0].itemid).then(function(lastvalue) { var textItemsPromises = _.map(items, item => {
return self.zabbixAPI.getLastValue(item.itemid);
});
return self.q.all(textItemsPromises)
.then(result => {
return _.map(result, (lastvalue, index) => {
var extractedValue;
if (target.textFilter) { if (target.textFilter) {
var text_extract_pattern = new RegExp(self.replaceTemplateVars(target.textFilter, options.scopedVars)); var text_extract_pattern = new RegExp(self.replaceTemplateVars(target.textFilter, options.scopedVars));
var result = text_extract_pattern.exec(lastvalue); extractedValue = text_extract_pattern.exec(lastvalue);
if (result) { if (extractedValue) {
if (target.useCaptureGroups) { if (target.useCaptureGroups) {
result = result[1]; extractedValue = extractedValue[1];
} else { } else {
result = result[0]; extractedValue = extractedValue[0];
} }
} }
deferred.resolve(result);
} else { } else {
deferred.resolve(lastvalue); extractedValue = lastvalue;
} }
});
} else {
deferred.resolve(null);
}
return deferred.promise.then(function(text) {
return { return {
target: target.item.name, target: items[index].name,
datapoints: [[text, to * 1000]] datapoints: [[extractedValue, to * 1000]]
}; };
}); });
}); });
} else {
return self.q.when([]);
}
});
} }
} }