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 }