diff --git a/tsweb/tsweb.go b/tsweb/tsweb.go index 278b9d111..c834f280b 100644 --- a/tsweb/tsweb.go +++ b/tsweb/tsweb.go @@ -466,6 +466,12 @@ func writePromExpVar(w io.Writer, prefix string, kv expvar.KeyValue) { } fmt.Fprintf(w, "# TYPE %s %s\n%s %v\n", name, typ, name, v.Value()) return + case *expvar.Float: + if typ == "" { + typ = "gauge" + } + fmt.Fprintf(w, "# TYPE %s %s\n%s %v\n", name, typ, name, v.Value()) + return case *metrics.Set: v.Do(func(kv expvar.KeyValue) { writePromExpVar(w, name+"_", kv) diff --git a/tsweb/tsweb_test.go b/tsweb/tsweb_test.go index 8aef7073c..2de762a96 100644 --- a/tsweb/tsweb_test.go +++ b/tsweb/tsweb_test.go @@ -334,6 +334,9 @@ func TestVarzHandler(t *testing.T) { t.Logf("Got: %s", rec.Body.Bytes()) }) + half := new(expvar.Float) + half.Set(0.5) + tests := []struct { name string k string // key name @@ -358,6 +361,31 @@ func TestVarzHandler(t *testing.T) { new(expvar.Int), "# TYPE foo gauge\nfoo 0\n", }, + { + // For a float = 0.0, Prometheus client_golang outputs "0" + "float_zero", + "foo", + new(expvar.Float), + "# TYPE foo gauge\nfoo 0\n", + }, + { + "float_point_5", + "foo", + half, + "# TYPE foo gauge\nfoo 0.5\n", + }, + { + "float_with_type_counter", + "counter_foo", + half, + "# TYPE foo counter\nfoo 0.5\n", + }, + { + "float_with_type_gauge", + "gauge_foo", + half, + "# TYPE foo gauge\nfoo 0.5\n", + }, { "metrics_set", "s",