From efc51fdcf6730f2af0c690f4fe4a61f15f0b4b1b Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 1 Feb 2016 16:22:11 +0300 Subject: [PATCH] Impoved query for text items - get only last value. --- plugins/datasource-zabbix/datasource.js | 42 +++++++++++++------------ plugins/datasource-zabbix/zabbixAPI.js | 22 ++++++++++++- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/plugins/datasource-zabbix/datasource.js b/plugins/datasource-zabbix/datasource.js index 98555ec..2b0d24f 100644 --- a/plugins/datasource-zabbix/datasource.js +++ b/plugins/datasource-zabbix/datasource.js @@ -191,31 +191,33 @@ function (angular, _, dateMath, utils, metricFunctions) { // Query text data else if (target.mode === 2) { - - // Find items by item names and perform queries return self.queryProcessor.build(groupFilter, hostFilter, appFilter, itemFilter) .then(function(items) { - return self.zabbixCache.getHistory(items, from, to).then(function(history) { - return { - target: target.item.name, - datapoints: _.map(history, function (p) { - var value = p.value; - if (target.textFilter) { - var text_extract_pattern = new RegExp(templateSrv.replace(target.textFilter, options.scopedVars)); - //var text_extract_pattern = new RegExp(target.textFilter); - var result = text_extract_pattern.exec(value); - if (result) { - if (target.useCaptureGroups) { - value = result[1]; - } else { - value = result[0]; - } + var deferred = $q.defer(); + if (items.length) { + self.zabbixAPI.getLastValue(items[0].itemid).then(function(lastvalue) { + if (target.textFilter) { + var text_extract_pattern = new RegExp(templateSrv.replace(target.textFilter, options.scopedVars)); + var result = text_extract_pattern.exec(lastvalue); + if (result) { + if (target.useCaptureGroups) { + result = result[1]; } else { - value = null; + result = result[0]; } } - return [value, p.clock * 1000]; - }) + deferred.resolve(result); + } else { + deferred.resolve(lastvalue); + } + }); + } else { + deferred.resolve(null); + } + return deferred.promise.then(function(text) { + return { + target: target.item.name, + datapoints: [[text, to * 1000]] }; }); }); diff --git a/plugins/datasource-zabbix/zabbixAPI.js b/plugins/datasource-zabbix/zabbixAPI.js index c84d829..fb1efca 100644 --- a/plugins/datasource-zabbix/zabbixAPI.js +++ b/plugins/datasource-zabbix/zabbixAPI.js @@ -132,7 +132,13 @@ function (angular, _) { p.getItems = function() { var params = { - output: ['name', 'key_', 'value_type', 'hostid', 'status', 'state'], + output: [ + 'name', 'key_', + 'value_type', + 'hostid', + 'status', + 'state' + ], sortfield: 'name', selectApplications: [] }; @@ -140,6 +146,20 @@ function (angular, _) { return this.request('item.get', params); }; + p.getLastValue = function(itemid) { + var params = { + output: ['lastvalue'], + itemids: itemid + }; + return this.request('item.get', params).then(function(items) { + if (items.length) { + return items[0].lastvalue; + } else { + return null; + } + }); + }; + /** * Perform history query from Zabbix API *