mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
integrated parser into graphite target editor
This commit is contained in:
parent
e19d3a531c
commit
042e2a208d
@ -2,9 +2,10 @@ define([
|
||||
'angular',
|
||||
'underscore',
|
||||
'config',
|
||||
'/app/services/graphite/functions.js'
|
||||
'../services/graphite/functions',
|
||||
'../services/graphite/parser'
|
||||
],
|
||||
function (angular, _, config, graphiteFunctions) {
|
||||
function (angular, _, config, graphiteFunctions, Parser) {
|
||||
'use strict';
|
||||
|
||||
var module = angular.module('kibana.controllers');
|
||||
@ -12,16 +13,49 @@ function (angular, _, config, graphiteFunctions) {
|
||||
module.controller('GraphiteTargetCtrl', function($scope, $http) {
|
||||
|
||||
$scope.init = function() {
|
||||
$scope.segments = _.map($scope.target.target.split('.'), function (segmentStr) {
|
||||
return {
|
||||
val: segmentStr,
|
||||
html: segmentStr === '*' ? '<i class="icon-asterisk"><i>' : segmentStr
|
||||
$scope.functions = [];
|
||||
$scope.segments = [];
|
||||
$scope.funcDefs = graphiteFunctions;
|
||||
|
||||
var parser = new Parser($scope.target.target);
|
||||
var astNode = parser.getAst();
|
||||
console.log('GraphiteTargetCtrl:init -> target', $scope.target.target);
|
||||
console.log('GraphiteTargetCtrl:init -> ast', astNode);
|
||||
parseTargetExpression(astNode);
|
||||
|
||||
};
|
||||
|
||||
function parseTargetExpression(astNode, func, index) {
|
||||
if (astNode === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (astNode.type === 'function') {
|
||||
var innerFunc = {};
|
||||
innerFunc.def = _.findWhere($scope.funcDefs, { name: astNode.name })
|
||||
innerFunc.params = innerFunc.def.defaultParams;
|
||||
|
||||
_.each(astNode.params, function(param, index) {
|
||||
parseTargetExpression(param, innerFunc, index);
|
||||
});
|
||||
|
||||
$scope.funcDefs = graphiteFunctions;
|
||||
$scope.functions = [];
|
||||
innerFunc.text = getFuncText(innerFunc.def, innerFunc.params);
|
||||
$scope.functions.push(innerFunc);
|
||||
}
|
||||
|
||||
if (astNode.type === 'number' || astNode.type === 'string') {
|
||||
func.params[index - 1] = astNode.value;
|
||||
}
|
||||
|
||||
if (astNode.type === 'metric') {
|
||||
$scope.segments = _.map(astNode.segments, function(segment) {
|
||||
return {
|
||||
val: segment.value,
|
||||
html: segment.value === '*' ? '<i class="icon-asterisk"><i>' : segment.value
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getSegmentPathUpTo(index) {
|
||||
var arr = $scope.segments.slice(0, index);
|
||||
|
@ -49,7 +49,7 @@
|
||||
style="width: 110px"
|
||||
ng-change="functionParamsChanged(func)"
|
||||
ng-model="func.params[$index]"
|
||||
ng-options="f for f in ['sumSeries', 'avgSeries']">
|
||||
ng-options="f for f in ['sum', 'avg']">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -26,7 +26,7 @@ function () {
|
||||
type: "function",
|
||||
}
|
||||
],
|
||||
defaultParams: [3, "sumSeries"]
|
||||
defaultParams: [3, "sum"]
|
||||
},
|
||||
{
|
||||
name: "alias",
|
||||
|
@ -117,7 +117,7 @@ define([
|
||||
|
||||
return {
|
||||
type: 'number',
|
||||
value: this.tokens[this.index-1].value
|
||||
value: parseInt(this.tokens[this.index-1].value)
|
||||
};
|
||||
},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user