Added initial metric functions processing.

This commit is contained in:
Alexander Zobnin
2016-01-26 23:42:54 +03:00
parent 63729a5904
commit 2d86c8a578
4 changed files with 41 additions and 0 deletions

View File

@@ -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,
};
});
});

View File

@@ -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;
});
});

View File

@@ -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) {

View File

@@ -262,6 +262,7 @@ define([
$scope.targetChanged = function() {
console.log($scope.target.functions);
$scope.get_data();
};
// Validate target and set validation info