diff --git a/prometheus/graphite/bridge.go b/prometheus/graphite/bridge.go index 09b7c9edd..09c31b5cd 100644 --- a/prometheus/graphite/bridge.go +++ b/prometheus/graphite/bridge.go @@ -197,14 +197,16 @@ func writeMetrics(w io.Writer, mfs []*dto.MetricFamily, useTags bool, prefix str buf := bufio.NewWriter(w) for _, s := range vec { - for _, c := range prefix { - if _, err := buf.WriteRune(c); err != nil { + if prefix != "" { + for _, c := range prefix { + if _, err := buf.WriteRune(c); err != nil { + return err + } + } + if err := buf.WriteByte('.'); err != nil { return err } } - if err := buf.WriteByte('.'); err != nil { - return err - } if err := writeMetric(buf, s.Metric, useTags); err != nil { return err } diff --git a/prometheus/graphite/bridge_test.go b/prometheus/graphite/bridge_test.go index ae418afb5..df0cfff3f 100644 --- a/prometheus/graphite/bridge_test.go +++ b/prometheus/graphite/bridge_test.go @@ -101,6 +101,7 @@ func testWriteSummary(t *testing.T, useTags bool) { {prefix: "prefix"}, {prefix: "pre/fix"}, {prefix: "pre.fix"}, + {prefix: ""}, } var ( @@ -141,10 +142,15 @@ func testWriteSummary(t *testing.T, useTags bool) { t.Fatalf("error: %v", err) } - wantWithPrefix := fmt.Sprintf(want, - tc.prefix, tc.prefix, tc.prefix, tc.prefix, tc.prefix, - tc.prefix, tc.prefix, tc.prefix, tc.prefix, tc.prefix, - ) + var wantWithPrefix string + if tc.prefix == "" { + wantWithPrefix = strings.ReplaceAll(want, "%s.", "") + } else { + wantWithPrefix = fmt.Sprintf(want, + tc.prefix, tc.prefix, tc.prefix, tc.prefix, tc.prefix, + tc.prefix, tc.prefix, tc.prefix, tc.prefix, tc.prefix, + ) + } got := buf.String()