diff --git a/main.go b/main.go index 2ba02e8..6d90470 100644 --- a/main.go +++ b/main.go @@ -46,7 +46,7 @@ type Datapoint struct { } type PromResult struct { - Metric string + Metric map[string]string Values []Datapoint } @@ -84,7 +84,7 @@ func Query(q string, start time.Time, end time.Time, step int) ([]PromResult, er var results []PromResult for _, res := range data.Data.Result { r := PromResult{} - r.Metric = metricName(res.Metric) + r.Metric = res.Metric var values []Datapoint isValid := true @@ -136,26 +136,13 @@ func metricName(metric map[string]string) string { return out + "{" + strings.Join(inner, ",") + "}" } -func handleLabel(p *plot.Plot, l *plotter.Line, label string, metric string) { - raw := metric[1 : len(metric)-1] - raw_tags := strings.Split(raw, ",") - tags := make(map[string]string) - for _, v := range raw_tags { - tag := strings.Split(v, "=") - if len(tag) != 2 { - log.Printf("Expected tag format: 'name=value'!") - continue - } - if len(tag[1]) > 2 && tag[1][0] == '"' && tag[1][len(tag[1])-1] == '"' { - tags[tag[0]] = tag[1][1 : len(tag[1])-1] - } - } +func handleLabel(p *plot.Plot, l *plotter.Line, label string, metric map[string]string) { tmpl, err := template.New("label").Parse(label) if err != nil { log.Printf("Failed to parse label template: %v", err) } else { var label_out bytes.Buffer - tmpl.Execute(&label_out, tags) + tmpl.Execute(&label_out, metric) p.Legend.Add(label_out.String(), l) } } @@ -274,10 +261,10 @@ func registerExtension(router chi.Router, extension string, mime string) { nextColor = 0 } plotters[i] = l - if label != "" && len(res.Metric) > 2 && res.Metric[0] == '{' && res.Metric[len(res.Metric)-1] == '}' { + if label != "" { handleLabel(p, l, label, res.Metric) } else { - p.Legend.Add(res.Metric, l) + p.Legend.Add(metricName(res.Metric), l) } } for i := len(plotters) - 1; i >= 0; i-- {