From 2819162809c358afccdeb09e07e2c9c7892b1988 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 29 Jan 2016 16:58:28 +0300 Subject: [PATCH] Added medianBy() aggregation. --- plugins/datasource-zabbix/dataProcessingService.js | 12 ++++++++++++ plugins/datasource-zabbix/metricFunctions.js | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/plugins/datasource-zabbix/dataProcessingService.js b/plugins/datasource-zabbix/dataProcessingService.js index c941f7e..9adb408 100644 --- a/plugins/datasource-zabbix/dataProcessingService.js +++ b/plugins/datasource-zabbix/dataProcessingService.js @@ -190,6 +190,11 @@ function (angular, _, moment, utils) { return nearestLeft; } + this.medianBy = function(interval, timeseries) { + var flatten_series = _.flatten(timeseries, true); + return self.groupBy(interval, self.MEDIAN, flatten_series); + }; + this.AVERAGE = function(values) { var sum = 0; _.each(values, function(value) { @@ -206,6 +211,11 @@ function (angular, _, moment, utils) { return _.max(values); }; + this.MEDIAN = function(values) { + var sorted = _.sortBy(values); + return sorted[Math.floor(sorted.length / 2)]; + }; + this.setAlias = function(alias, timeseries) { timeseries.target = alias; return timeseries; @@ -215,6 +225,7 @@ function (angular, _, moment, utils) { avg: this.AVERAGE, min: this.MIN, max: this.MAX, + median: this.MEDIAN }; this.groupByWrapper = function(interval, groupFunc, datapoints) { @@ -233,6 +244,7 @@ function (angular, _, moment, utils) { min: _.partial(this.aggregateWrapper, this.MIN), max: _.partial(this.aggregateWrapper, this.MAX), sumSeries: this.sumSeries, + medianBy: this.medianBy, setAlias: this.setAlias, }; diff --git a/plugins/datasource-zabbix/metricFunctions.js b/plugins/datasource-zabbix/metricFunctions.js index e5d8ffd..da68293 100644 --- a/plugins/datasource-zabbix/metricFunctions.js +++ b/plugins/datasource-zabbix/metricFunctions.js @@ -28,7 +28,7 @@ function (_, $) { category: 'Transform', params: [ { name: 'interval', type: 'string'}, - { name: 'function', type: 'string', options: ['avg', 'min', 'max'] } + { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] } ], defaultParams: ['1m', 'avg'], }); @@ -40,6 +40,15 @@ function (_, $) { defaultParams: [], }); + addFuncDef({ + name: 'medianBy', + category: 'Aggregate', + params: [ + { name: 'interval', type: 'string'} + ], + defaultParams: ['1m'], + }); + addFuncDef({ name: 'average', category: 'Aggregate',