github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/scraper/catalogue_generate_helpers_test.go (about)

     1  package scraper
     2  
     3  import (
     4  	"sort"
     5  	"strconv"
     6  	"strings"
     7  )
     8  
     9  func sortedCatalogueClasses(catalogues map[string]fixtureSpec) []string {
    10  	classes := make([]string, 0, len(catalogues))
    11  	for class := range catalogues {
    12  		classes = append(classes, class)
    13  	}
    14  
    15  	sort.Strings(classes)
    16  
    17  	return classes
    18  }
    19  
    20  func renderMetricCatalogueJSON(catalogues map[string]MetricLabelCatalogue) string {
    21  	var b strings.Builder
    22  
    23  	b.WriteString("{\n")
    24  
    25  	for classIndex, class := range sortedMetricCatalogueClasses(catalogues) {
    26  		if classIndex > 0 {
    27  			b.WriteString(",\n")
    28  		}
    29  
    30  		b.WriteString("\t")
    31  		b.WriteString(strconv.Quote(class))
    32  		b.WriteString(": {\n")
    33  
    34  		metrics := sortedMetricCatalogueMetrics(catalogues[class])
    35  		for metricIndex, metric := range metrics {
    36  			if metricIndex > 0 {
    37  				b.WriteString(",\n")
    38  			}
    39  
    40  			b.WriteString("\t\t")
    41  			b.WriteString(strconv.Quote(metric))
    42  			b.WriteString(": ")
    43  			b.WriteString(renderStringArrayJSON(catalogues[class][metric]))
    44  		}
    45  
    46  		b.WriteString("\n\t}")
    47  	}
    48  
    49  	b.WriteString("\n}\n")
    50  
    51  	return b.String()
    52  }
    53  
    54  func sortedMetricCatalogueClasses(catalogues map[string]MetricLabelCatalogue) []string {
    55  	classes := make([]string, 0, len(catalogues))
    56  	for class := range catalogues {
    57  		classes = append(classes, class)
    58  	}
    59  
    60  	sort.Strings(classes)
    61  
    62  	return classes
    63  }
    64  
    65  func sortedMetricCatalogueMetrics(catalogue MetricLabelCatalogue) []string {
    66  	metrics := make([]string, 0, len(catalogue))
    67  	for metric := range catalogue {
    68  		metrics = append(metrics, metric)
    69  	}
    70  
    71  	sort.Strings(metrics)
    72  
    73  	return metrics
    74  }
    75  
    76  func renderStringArrayJSON(values []string) string {
    77  	var b strings.Builder
    78  	b.WriteString("[")
    79  
    80  	for i, value := range values {
    81  		if i > 0 {
    82  			b.WriteString(", ")
    83  		}
    84  
    85  		b.WriteString(strconv.Quote(value))
    86  	}
    87  
    88  	b.WriteString("]")
    89  
    90  	return b.String()
    91  }