github.com/go-graphite/carbonapi@v0.17.0/internal/generateRewriteFuncs/gen.go (about) 1 //go:build ignore 2 // +build ignore 3 4 package main 5 6 import ( 7 "bufio" 8 "bytes" 9 "fmt" 10 "log" 11 "os" 12 "strings" 13 ) 14 15 func main() { 16 files, err := os.ReadDir("./") 17 if err != nil { 18 log.Fatal(err) 19 } 20 21 funcs := make([]string, 0) 22 for _, f := range files { 23 name := f.Name() 24 if strings.Contains(name, ".go") { 25 continue 26 } 27 if name == "example" { 28 continue 29 } 30 31 funcs = append(funcs, name) 32 } 33 34 var b bytes.Buffer 35 writer := bufio.NewWriter(&b) 36 37 fmt.Fprintln(writer, `package rewrite 38 39 import ( 40 "sort" 41 "strings" 42 43 "github.com/go-graphite/carbonapi/expr/interfaces" 44 "github.com/go-graphite/carbonapi/expr/metadata"`) 45 for _, m := range funcs { 46 fmt.Fprintf(writer, " \"github.com/go-graphite/carbonapi/expr/rewrite/%s\"\n", m) 47 } 48 fmt.Fprintf(writer, `) 49 50 type initFunc struct { 51 name string 52 filename string 53 order interfaces.Order 54 f func(configFile string) []interfaces.RewriteFunctionMetadata 55 } 56 57 func New(configs map[string]string) { 58 funcs := []initFunc{`) 59 for _, m := range funcs { 60 fmt.Fprintf(writer, ` 61 {name: "%s", filename: "%s", order: %s.GetOrder(), f: %s.New},`, m, m, m, m) 62 63 } 64 65 fmt.Fprintln(writer, ` 66 } 67 68 sort.Slice(funcs, func(i, j int) bool { 69 if funcs[i].order == interfaces.Any && funcs[j].order == interfaces.Last { 70 return true 71 } 72 if funcs[i].order == interfaces.Last && funcs[j].order == interfaces.Any { 73 return false 74 } 75 return funcs[i].name > funcs[j].name 76 }) 77 78 for _, f := range funcs { 79 md := f.f(configs[strings.ToLower(f.name)]) 80 for _, m := range md { 81 metadata.RegisterRewriteFunctionWithFilename(m.Name, f.filename, m.F) 82 } 83 } 84 }`) 85 86 err = writer.Flush() 87 if err != nil { 88 log.Fatal(err) 89 } 90 91 f, err := os.OpenFile("glue.go", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666) 92 if err != nil { 93 log.Fatal(err) 94 } 95 96 f.Write(b.Bytes()) 97 98 f.Close() 99 }