Fix handling of ConstLabels in checkLabels
This commit is contained in:
parent
753a259e20
commit
023c31fd59
|
@ -27,6 +27,9 @@ import (
|
|||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
// magicString is used for the hacky label test in checkLabels. Remove once fixed.
|
||||
const magicString = "zZgWfBxLqvG8kc8IMv3POi2Bb0tZI3vAnBx+gBaFi9FyPzB/CzKUer1yufDa"
|
||||
|
||||
// InstrumentHandlerInFlight is a middleware that wraps the provided
|
||||
// http.Handler. It sets the provided prometheus.Gauge to the number of
|
||||
// requests currently handled by the wrapped http.Handler.
|
||||
|
@ -191,37 +194,46 @@ func checkLabels(c prometheus.Collector) (code bool, method bool) {
|
|||
|
||||
if _, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0); err == nil {
|
||||
return
|
||||
} else if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, ""); err == nil {
|
||||
}
|
||||
if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, magicString); err == nil {
|
||||
if err := m.Write(&pm); err != nil {
|
||||
panic("error checking metric for labels")
|
||||
}
|
||||
|
||||
name := *pm.Label[0].Name
|
||||
if name == "code" {
|
||||
for _, label := range pm.Label {
|
||||
name, value := label.GetName(), label.GetValue()
|
||||
if value != magicString {
|
||||
continue
|
||||
}
|
||||
switch name {
|
||||
case "code":
|
||||
code = true
|
||||
} else if name == "method" {
|
||||
case "method":
|
||||
method = true
|
||||
} else {
|
||||
default:
|
||||
panic("metric partitioned with non-supported labels")
|
||||
}
|
||||
return
|
||||
} else if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, "", ""); err == nil {
|
||||
}
|
||||
panic("previously set label not found – this must never happen")
|
||||
}
|
||||
if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, magicString, magicString); err == nil {
|
||||
if err := m.Write(&pm); err != nil {
|
||||
panic("error checking metric for labels")
|
||||
}
|
||||
|
||||
for _, label := range pm.Label {
|
||||
if *label.Name == "code" || *label.Name == "method" {
|
||||
name, value := label.GetName(), label.GetValue()
|
||||
if value != magicString {
|
||||
continue
|
||||
}
|
||||
if name == "code" || name == "method" {
|
||||
continue
|
||||
}
|
||||
panic("metric partitioned with non-supported labels")
|
||||
}
|
||||
|
||||
code = true
|
||||
method = true
|
||||
return
|
||||
}
|
||||
|
||||
panic("metric partitioned with non-supported labels")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue