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  }