Skip to content

Commit 5e90e3f

Browse files
committed
Check for event label on tracing middleware
1 parent 4ddc6f5 commit 5e90e3f

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

prometheus/promhttp/client_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package promhttp
2121

2222
import (
23+
"fmt"
2324
"net/http"
2425
"net/http/httputil"
2526
"testing"
@@ -63,4 +64,5 @@ func TestClientMiddlewareAPI(t *testing.T) {
6364
if err != nil {
6465
t.Fatalf("%v", err)
6566
}
67+
fmt.Println(string(out))
6668
}

prometheus/promhttp/middleware.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"time"
2828

2929
"github.com/prometheus/client_golang/prometheus"
30+
dto "github.com/prometheus/client_model/go"
3031
)
3132

3233
// ClientTrace adds middleware providing a histogram of outgoing request
@@ -35,8 +36,7 @@ func ClientTrace(obs prometheus.ObserverVec, c httpClient) httpClient {
3536
// The supplied histogram NEEDS a label for the httptrace event.
3637
// TODO: Using `event` for now, but any other name is acceptable.
3738

38-
// TODO: Check for `event` label on histogram.
39-
39+
checkEventLabel(obs)
4040
return ClientMiddleware(func(r *http.Request) (*http.Response, error) {
4141
var (
4242
start = time.Now()
@@ -109,3 +109,33 @@ func CounterC(counter *prometheus.CounterVec, c httpClient) httpClient {
109109
return resp, err
110110
})
111111
}
112+
113+
func checkEventLabel(c prometheus.Collector) {
114+
var (
115+
desc *prometheus.Desc
116+
pm dto.Metric
117+
)
118+
119+
descc := make(chan *prometheus.Desc, 1)
120+
c.Describe(descc)
121+
122+
select {
123+
case desc = <-descc:
124+
default:
125+
panic("no description provided by collector")
126+
}
127+
128+
m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, "")
129+
if err != nil {
130+
panic("error checking metric for labels")
131+
}
132+
133+
if err := m.Write(&pm); err != nil {
134+
panic("error checking metric for labels")
135+
}
136+
137+
name := *pm.Label[0].Name
138+
if name != "event" {
139+
panic("metric partitioned with non-supported label")
140+
}
141+
}

0 commit comments

Comments
 (0)