resolve #16 - trends support

This commit is contained in:
alexanderzobnin
2015-06-18 16:25:41 +03:00
2 changed files with 65 additions and 2 deletions

View File

@@ -25,6 +25,9 @@ function (angular, _, kbn) {
this.username = datasource.meta.username;
this.password = datasource.meta.password;
// Use trends instead history since specified time
this.trendsFrom = datasource.meta.trendsFrom || '7d';
// Limit metrics per panel for templated request
this.limitmetrics = datasource.meta.limitmetrics || 50;
}
@@ -44,6 +47,7 @@ function (angular, _, kbn) {
// get from & to in seconds
var from = Math.ceil(kbn.parseDate(options.range.from).getTime() / 1000);
var to = Math.ceil(kbn.parseDate(options.range.to).getTime() / 1000);
var useTrendsFrom = Math.ceil(kbn.parseDate('now-' + this.trendsFrom).getTime() / 1000);
// Create request for each target
var promises = _.map(options.targets, function(target) {
@@ -93,8 +97,14 @@ function (angular, _, kbn) {
return [];
} else {
items = _.flatten(items);
return self.performTimeSeriesQuery(items, from, to)
.then(_.partial(self.handleHistoryResponse, items));
if (from > useTrendsFrom) {
return self.performTimeSeriesQuery(items, from, to)
.then(_.partial(self.handleHistoryResponse, items));
} else {
return self.getTrends(items, from, to)
.then(_.partial(self.handleTrendResponse, items));
}
}
});
}, this);
@@ -142,6 +152,58 @@ function (angular, _, kbn) {
};
ZabbixAPIDatasource.prototype.getTrends = function(items, start, end) {
// Group items by value type
var grouped_items = _.groupBy(items, 'value_type');
// Perform request for each value type
return $q.all(_.map(grouped_items, function (items, value_type) {
var itemids = _.map(items, 'itemid');
var params = {
output: 'extend',
trend: value_type,
itemids: itemids,
sortfield: 'clock',
sortorder: 'ASC',
time_from: start
};
// Relative queries (e.g. last hour) don't include an end time
if (end) {
params.time_till = end;
}
return this.performZabbixAPIRequest('trend.get', params);
}, this)).then(function (results) {
return _.flatten(results);
});
};
ZabbixAPIDatasource.prototype.handleTrendResponse = function(items, trends) {
// Group items and trends by itemid
var indexed_items = _.indexBy(items, 'itemid');
var grouped_history = _.groupBy(trends, 'itemid');
return $q.when(_.map(grouped_history, function (trends, itemid) {
var item = indexed_items[itemid];
var series = {
target: (item.hosts ? item.hosts[0].name+': ' : '') + expandItemName(item),
datapoints: _.map(trends, function (p) {
// Value must be a number for properly work
var value = Number(p.value_avg);
return [value, p.clock * 1000];
})
};
return series;
})).then(function (result) {
return _.sortBy(result, 'target');
});
};
/**
* Convert Zabbix API data to Grafana format
*

View File

@@ -16,6 +16,7 @@
"username": "guest",
"password": "",
"trendsFrom": "7d",
"limitmetrics": 50,
"metrics": true,