Handle templated queries.
This commit is contained in:
@@ -47,30 +47,24 @@ function (angular, _, kbn) {
|
|||||||
var item_key = templateSrv.replace(target.item.name);
|
var item_key = templateSrv.replace(target.item.name);
|
||||||
var hostname = templateSrv.replace(target.host.name);
|
var hostname = templateSrv.replace(target.host.name);
|
||||||
|
|
||||||
var keys = [];
|
// extract all keys
|
||||||
if (item_key[0] === '{') {
|
var pattern = /([\w.]+(?:\[[^\[]*\])|[\w.]+)/g;
|
||||||
// Convert multiple mettrics to array
|
var keys = item_key.match(pattern);
|
||||||
// "{metric1,metcic2,...,metricN}" --> [metric1, metcic2,..., metricN]
|
|
||||||
keys= item_key.slice(1, -1).split(',');
|
|
||||||
} else {
|
|
||||||
keys.push(item_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var results = [];
|
return _.map(keys, function (key) {
|
||||||
_.each(keys, function (key) {
|
return this.findZabbixItem(hostname, key).then(function (items) {
|
||||||
results.push(this.findZabbixItem(hostname, key).then(function (items) {
|
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
var item = items[0];
|
var item = items[0];
|
||||||
|
var itemname = expandItemName(item);
|
||||||
return self.performTimeSeriesQuery(item, from, to).then(_.partial(
|
return self.performTimeSeriesQuery(item, from, to).then(_.partial(
|
||||||
self.handleZabbixAPIResponse, item.name));
|
self.handleZabbixAPIResponse, itemname));
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
}, this);
|
}, this);
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
@@ -358,7 +352,7 @@ function (angular, _, kbn) {
|
|||||||
// Return empty object
|
// Return empty object
|
||||||
else {
|
else {
|
||||||
var d = $q.defer();
|
var d = $q.defer();
|
||||||
d.resolve({ data: [] });
|
d.resolve([]);
|
||||||
return d.promise;
|
return d.promise;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -618,3 +612,26 @@ function (angular, _, kbn) {
|
|||||||
return ZabbixAPIDatasource;
|
return ZabbixAPIDatasource;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expand item parameters, for example:
|
||||||
|
* CPU $2 time ($3) --> CPU system time (avg1)
|
||||||
|
*
|
||||||
|
* @param item: zabbix api item object
|
||||||
|
* @return: expanded item name (string)
|
||||||
|
*/
|
||||||
|
function expandItemName(item) {
|
||||||
|
var name = item.name;
|
||||||
|
var key = item.key_;
|
||||||
|
|
||||||
|
// extract params from key:
|
||||||
|
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
||||||
|
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
||||||
|
|
||||||
|
// replace item parameters
|
||||||
|
for (var i = key_params.length; i >= 1; i--) {
|
||||||
|
name = name.replace('$' + i, key_params[i - 1]);
|
||||||
|
};
|
||||||
|
return name;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user