From 2d86c8a578493e9e512e353597b3349af9816e66 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Tue, 26 Jan 2016 23:42:54 +0300 Subject: [PATCH] Added initial metric functions processing. --- .../datasource-zabbix/dataProcessingService.js | 16 ++++++++++++++++ plugins/datasource-zabbix/datasource.js | 9 +++++++++ plugins/datasource-zabbix/metricFunctions.js | 15 +++++++++++++++ plugins/datasource-zabbix/queryCtrl.js | 1 + 4 files changed, 41 insertions(+) diff --git a/plugins/datasource-zabbix/dataProcessingService.js b/plugins/datasource-zabbix/dataProcessingService.js index 3565e2e..a79bad8 100644 --- a/plugins/datasource-zabbix/dataProcessingService.js +++ b/plugins/datasource-zabbix/dataProcessingService.js @@ -10,6 +10,7 @@ function (angular, _, moment, utils) { var module = angular.module('grafana.services'); module.service('DataProcessingService', function() { + var self = this; /** * Downsample datapoints series @@ -105,5 +106,20 @@ function (angular, _, moment, utils) { return _.max(values); }; + this.aggregationFunctions = { + avg: this.AVERAGE, + min: this.MIN, + max: this.MAX, + }; + + this.groupByWrapper = function(interval, groupFunc, datapoints) { + var groupByCallback = self.aggregationFunctions[groupFunc]; + return self.groupBy(interval, groupByCallback, datapoints); + }; + + this.metricFunctions = { + groupBy: this.groupByWrapper, + }; + }); }); \ No newline at end of file diff --git a/plugins/datasource-zabbix/datasource.js b/plugins/datasource-zabbix/datasource.js index f340465..cd9a7be 100644 --- a/plugins/datasource-zabbix/datasource.js +++ b/plugins/datasource-zabbix/datasource.js @@ -153,6 +153,15 @@ function (angular, _, dateMath, utils) { timeseries.datapoints = dp; } + var functions = _.map(target.functions, function(func) { + return func.bindFunction(DataProcessingService.metricFunctions); + }); + if (functions.length) { + //console.log(functions); + dp = functions[0](dp); + timeseries.datapoints = dp; + } + return timeseries; }); }); diff --git a/plugins/datasource-zabbix/metricFunctions.js b/plugins/datasource-zabbix/metricFunctions.js index b60854e..c35bcbd 100644 --- a/plugins/datasource-zabbix/metricFunctions.js +++ b/plugins/datasource-zabbix/metricFunctions.js @@ -103,6 +103,21 @@ function (_, $) { this.updateText(); } + FuncInstance.prototype.bindFunction = function(metricFunctions) { + var func = metricFunctions[this.def.name]; + if (func) { + + // Bind function arguments + var bindedFunc = func; + for (var i = 0; i < this.params.length; i++) { + bindedFunc = _.partial(bindedFunc, this.params[i]); + } + return bindedFunc; + } else { + throw { message: 'Method not found ' + this.def.name }; + } + }; + FuncInstance.prototype.render = function(metricExp) { var str = this.def.name + '('; var parameters = _.map(this.params, function(value, index) { diff --git a/plugins/datasource-zabbix/queryCtrl.js b/plugins/datasource-zabbix/queryCtrl.js index a1a826c..c096f79 100644 --- a/plugins/datasource-zabbix/queryCtrl.js +++ b/plugins/datasource-zabbix/queryCtrl.js @@ -262,6 +262,7 @@ define([ $scope.targetChanged = function() { console.log($scope.target.functions); + $scope.get_data(); }; // Validate target and set validation info