func (tm *TaskMaster) CreateTICKScope() *tick.Scope { scope := tick.NewScope() scope.Set("influxql", newInfluxQL()) scope.Set("time", func(d time.Duration) time.Duration { return d }) // Add dynamic methods to the scope for UDFs if tm.UDFService != nil { for _, f := range tm.UDFService.FunctionList() { f := f info, _ := tm.UDFService.FunctionInfo(f) scope.SetDynamicMethod( f, tick.DynamicMethod(func(self interface{}, args ...interface{}) (interface{}, error) { parent, ok := self.(pipeline.Node) if !ok { return nil, fmt.Errorf("cannot call %s on %T", f, self) } udf := pipeline.NewUDF( parent, f, info.Commander, info.Timeout, info.Wants, info.Provides, info.Options, ) return udf, nil }), ) } } return scope }
func (tm *TaskMaster) CreateTICKScope() *stateful.Scope { scope := stateful.NewScope() scope.Set("time", groupByTime) // Add dynamic methods to the scope for UDFs if tm.UDFService != nil { for _, f := range tm.UDFService.List() { f := f info, _ := tm.UDFService.Info(f) scope.SetDynamicMethod( f, stateful.DynamicMethod(func(self interface{}, args ...interface{}) (interface{}, error) { parent, ok := self.(pipeline.Node) if !ok { return nil, fmt.Errorf("cannot call %s on %T", f, self) } udf := pipeline.NewUDF( parent, f, info.Wants, info.Provides, info.Options, ) return udf, nil }), ) } } return scope }