1package interfaces 2 3import ( 4 "context" 5 6 "github.com/go-graphite/carbonapi/expr/types" 7 "github.com/go-graphite/carbonapi/pkg/parser" 8) 9 10// FunctionBase is a set of base methods that partly satisfy Function interface and most probably nobody will modify 11type FunctionBase struct { 12 Evaluator Evaluator 13} 14 15// SetEvaluator sets evaluator 16func (b *FunctionBase) SetEvaluator(evaluator Evaluator) { 17 b.Evaluator = evaluator 18} 19 20// GetEvaluator returns evaluator 21func (b *FunctionBase) GetEvaluator() Evaluator { 22 return b.Evaluator 23} 24 25// Evaluator is a interface for any existing expression parser 26type Evaluator interface { 27 Eval(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) 28} 29 30type Order int 31 32const ( 33 Any Order = iota 34 Last 35) 36 37type RewriteFunctionMetadata struct { 38 Name string 39 Order Order 40 F RewriteFunction 41} 42 43type FunctionMetadata struct { 44 Name string 45 Order Order 46 F Function 47} 48 49// Function is interface that all graphite functions should follow 50type Function interface { 51 SetEvaluator(evaluator Evaluator) 52 GetEvaluator() Evaluator 53 Do(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) 54 Description() map[string]types.FunctionDescription 55} 56 57// Function is interface that all graphite functions should follow 58type RewriteFunction interface { 59 SetEvaluator(evaluator Evaluator) 60 GetEvaluator() Evaluator 61 Do(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) (bool, []string, error) 62 Description() map[string]types.FunctionDescription 63} 64