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  }