github.com/go-graphite/carbonapi@v0.17.0/expr/rewrite/glue.go (about) 1 package rewrite 2 3 import ( 4 "sort" 5 "strings" 6 7 "github.com/go-graphite/carbonapi/expr/interfaces" 8 "github.com/go-graphite/carbonapi/expr/metadata" 9 "github.com/go-graphite/carbonapi/expr/rewrite/aboveSeries" 10 "github.com/go-graphite/carbonapi/expr/rewrite/applyByNode" 11 ) 12 13 type initFunc struct { 14 name string 15 filename string 16 order interfaces.Order 17 f func(configFile string) []interfaces.RewriteFunctionMetadata 18 } 19 20 func New(configs map[string]string) { 21 funcs := []initFunc{ 22 {name: "aboveSeries", filename: "aboveSeries", order: aboveSeries.GetOrder(), f: aboveSeries.New}, 23 {name: "applyByNode", filename: "applyByNode", order: applyByNode.GetOrder(), f: applyByNode.New}, 24 } 25 26 sort.Slice(funcs, func(i, j int) bool { 27 if funcs[i].order == interfaces.Any && funcs[j].order == interfaces.Last { 28 return true 29 } 30 if funcs[i].order == interfaces.Last && funcs[j].order == interfaces.Any { 31 return false 32 } 33 return funcs[i].name > funcs[j].name 34 }) 35 36 for _, f := range funcs { 37 md := f.f(configs[strings.ToLower(f.name)]) 38 for _, m := range md { 39 metadata.RegisterRewriteFunctionWithFilename(m.Name, f.filename, m.F) 40 } 41 } 42 }