Don't use panic-happy prometheus client With() function
Deals with part of #405, although it doesn't deal with the underlying label error that is occuring.
This commit is contained in:
parent
ca222a14de
commit
2be7fc072f
|
@ -2,6 +2,7 @@ package prometheus_client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/influxdb/influxdb/client/v2"
|
"github.com/influxdb/influxdb/client/v2"
|
||||||
|
@ -64,8 +65,7 @@ func (p *PrometheusClient) Write(points []*client.Point) error {
|
||||||
|
|
||||||
for _, point := range points {
|
for _, point := range points {
|
||||||
var labels []string
|
var labels []string
|
||||||
name := point.Name()
|
key := point.Name()
|
||||||
key := name
|
|
||||||
|
|
||||||
for k, _ := range point.Tags() {
|
for k, _ := range point.Tags() {
|
||||||
if len(k) > 0 {
|
if len(k) > 0 {
|
||||||
|
@ -77,7 +77,7 @@ func (p *PrometheusClient) Write(points []*client.Point) error {
|
||||||
p.metrics[key] = prometheus.NewUntypedVec(
|
p.metrics[key] = prometheus.NewUntypedVec(
|
||||||
prometheus.UntypedOpts{
|
prometheus.UntypedOpts{
|
||||||
Name: key,
|
Name: key,
|
||||||
Help: fmt.Sprintf("Telegraf collected point '%s'", name),
|
Help: fmt.Sprintf("Telegraf collected point '%s'", key),
|
||||||
},
|
},
|
||||||
labels,
|
labels,
|
||||||
)
|
)
|
||||||
|
@ -90,12 +90,28 @@ func (p *PrometheusClient) Write(points []*client.Point) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, val := range point.Fields() {
|
for _, val := range point.Fields() {
|
||||||
switch val.(type) {
|
switch val := val.(type) {
|
||||||
|
default:
|
||||||
|
log.Printf("Prometheus output, unsupported type. key: %s, type: %T\n",
|
||||||
|
key, val)
|
||||||
case int64:
|
case int64:
|
||||||
ival := val.(int64)
|
m, err := p.metrics[key].GetMetricWith(l)
|
||||||
p.metrics[key].With(l).Set(float64(ival))
|
if err != nil {
|
||||||
|
log.Printf("ERROR Getting metric in Prometheus output, "+
|
||||||
|
"key: %s, labels: %v,\nerr: %s\n",
|
||||||
|
key, l, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
m.Set(float64(val))
|
||||||
case float64:
|
case float64:
|
||||||
p.metrics[key].With(l).Set(val.(float64))
|
m, err := p.metrics[key].GetMetricWith(l)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("ERROR Getting metric in Prometheus output, "+
|
||||||
|
"key: %s, labels: %v,\nerr: %s\n",
|
||||||
|
key, l, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
m.Set(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue