github.com/grafana/synthetic-monitoring-agent@v0.64.2/pkg/accounting/generate-active-series-counts.go (about) 1 //go:build ignore 2 3 package main 4 5 import ( 6 "bufio" 7 "log" 8 "os" 9 "path" 10 "strings" 11 "text/template" 12 ) 13 14 func main() { 15 if len(os.Args) < 3 { 16 log.Fatalf("Syntax:\n\t%s {template} {files...}\n", os.Args[0]) 17 } 18 19 contents, err := os.ReadFile(os.Args[1]) 20 if err != nil { 21 log.Fatalf("E: cannot load template %s: %s", os.Args[1], err) 22 } 23 24 tmpl, err := template.New("program").Parse(string(contents)) 25 if err != nil { 26 log.Fatalf("E: cannot parse template %s: %s", os.Args[1], err) 27 } 28 29 data := make(map[string]int) 30 31 for _, fn := range os.Args[2:] { 32 name, count, err := countActiveSeries(fn) 33 if err != nil { 34 log.Fatalf("E: cannot count active series in %s: %s", fn, err) 35 } 36 37 data[name] = count 38 } 39 40 if err := tmpl.Execute(os.Stdout, data); err != nil { 41 log.Fatalf("E: cannot process template: %s", err) 42 } 43 } 44 45 func countActiveSeries(fn string) (string, int, error) { 46 fh, err := os.Open(fn) 47 if err != nil { 48 return "", 0, err 49 } 50 51 defer fh.Close() 52 53 scanner := bufio.NewScanner(fh) 54 55 activeSeries := 0 56 57 for scanner.Scan() { 58 line := scanner.Text() 59 if strings.HasPrefix(line, "#") { 60 continue 61 } 62 63 activeSeries++ 64 } 65 66 return strings.TrimSuffix(path.Base(fn), ".txt"), activeSeries, nil 67 }