diff --git a/src/datasource-zabbix/DataProcessor.js b/src/datasource-zabbix/DataProcessor.js index c47965e..e2743bd 100644 --- a/src/datasource-zabbix/DataProcessor.js +++ b/src/datasource-zabbix/DataProcessor.js @@ -147,6 +147,13 @@ export default class DataProcessor { return DataProcessor.groupBy(interval, groupByCallback, datapoints); } + static aggregateByWrapper(interval, aggregateFunc, datapoints) { + // Flatten all points in frame and then just use groupBy() + var flattenedPoints = _.flatten(datapoints, true); + var groupByCallback = DataProcessor.aggregationFunctions[aggregateFunc]; + return DataProcessor.groupBy(interval, groupByCallback, flattenedPoints); + } + static aggregateWrapper(groupByCallback, interval, datapoints) { var flattenedPoints = _.flatten(datapoints, true); return DataProcessor.groupBy(interval, groupByCallback, flattenedPoints); @@ -164,6 +171,7 @@ export default class DataProcessor { static get metricFunctions() { return { groupBy: this.groupByWrapper, + aggregateBy: this.aggregateByWrapper, average: _.partial(this.aggregateWrapper, this.AVERAGE), min: _.partial(this.aggregateWrapper, this.MIN), max: _.partial(this.aggregateWrapper, this.MAX), diff --git a/src/datasource-zabbix/metricFunctions.js b/src/datasource-zabbix/metricFunctions.js index aa0351c..024aa0d 100644 --- a/src/datasource-zabbix/metricFunctions.js +++ b/src/datasource-zabbix/metricFunctions.js @@ -73,6 +73,16 @@ addFuncDef({ defaultParams: ['1m'], }); +addFuncDef({ + name: 'aggregateBy', + category: 'Aggregate', + params: [ + { name: 'interval', type: 'string' }, + { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] } + ], + defaultParams: ['1m', 'avg'], +}); + addFuncDef({ name: 'trendValue', category: 'Trends', diff --git a/src/datasource-zabbix/partials/query.editor.html b/src/datasource-zabbix/partials/query.editor.html index eb858c5..a88335e 100644 --- a/src/datasource-zabbix/partials/query.editor.html +++ b/src/datasource-zabbix/partials/query.editor.html @@ -12,14 +12,14 @@