f6c3a534a4
This change switches to use the smaller influxdata/influxdb1-client package instead of depending on the whole infuxdb package. The new smaller client is very similar to the influxdb-v2 client, which made it possible to refactor the two reporters to reuse code a lot more.
114 lines
2.9 KiB
Go
114 lines
2.9 KiB
Go
package influxdb
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/ethereum/go-ethereum/metrics"
|
|
)
|
|
|
|
func readMeter(namespace, name string, i interface{}) (string, map[string]interface{}) {
|
|
switch metric := i.(type) {
|
|
case metrics.Counter:
|
|
measurement := fmt.Sprintf("%s%s.count", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"value": metric.Count(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.CounterFloat64:
|
|
measurement := fmt.Sprintf("%s%s.count", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"value": metric.Count(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.Gauge:
|
|
measurement := fmt.Sprintf("%s%s.gauge", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"value": metric.Snapshot().Value(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.GaugeFloat64:
|
|
measurement := fmt.Sprintf("%s%s.gauge", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"value": metric.Snapshot().Value(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.Histogram:
|
|
ms := metric.Snapshot()
|
|
if ms.Count() <= 0 {
|
|
break
|
|
}
|
|
ps := ms.Percentiles([]float64{0.25, 0.5, 0.75, 0.95, 0.99, 0.999, 0.9999})
|
|
measurement := fmt.Sprintf("%s%s.histogram", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"count": ms.Count(),
|
|
"max": ms.Max(),
|
|
"mean": ms.Mean(),
|
|
"min": ms.Min(),
|
|
"stddev": ms.StdDev(),
|
|
"variance": ms.Variance(),
|
|
"p25": ps[0],
|
|
"p50": ps[1],
|
|
"p75": ps[2],
|
|
"p95": ps[3],
|
|
"p99": ps[4],
|
|
"p999": ps[5],
|
|
"p9999": ps[6],
|
|
}
|
|
return measurement, fields
|
|
case metrics.Meter:
|
|
ms := metric.Snapshot()
|
|
measurement := fmt.Sprintf("%s%s.meter", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"count": ms.Count(),
|
|
"m1": ms.Rate1(),
|
|
"m5": ms.Rate5(),
|
|
"m15": ms.Rate15(),
|
|
"mean": ms.RateMean(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.Timer:
|
|
ms := metric.Snapshot()
|
|
ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999})
|
|
|
|
measurement := fmt.Sprintf("%s%s.timer", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"count": ms.Count(),
|
|
"max": ms.Max(),
|
|
"mean": ms.Mean(),
|
|
"min": ms.Min(),
|
|
"stddev": ms.StdDev(),
|
|
"variance": ms.Variance(),
|
|
"p50": ps[0],
|
|
"p75": ps[1],
|
|
"p95": ps[2],
|
|
"p99": ps[3],
|
|
"p999": ps[4],
|
|
"p9999": ps[5],
|
|
"m1": ms.Rate1(),
|
|
"m5": ms.Rate5(),
|
|
"m15": ms.Rate15(),
|
|
"meanrate": ms.RateMean(),
|
|
}
|
|
return measurement, fields
|
|
case metrics.ResettingTimer:
|
|
t := metric.Snapshot()
|
|
if len(t.Values()) == 0 {
|
|
break
|
|
}
|
|
ps := t.Percentiles([]float64{50, 95, 99})
|
|
val := t.Values()
|
|
measurement := fmt.Sprintf("%s%s.span", namespace, name)
|
|
fields := map[string]interface{}{
|
|
"count": len(val),
|
|
"max": val[len(val)-1],
|
|
"mean": t.Mean(),
|
|
"min": val[0],
|
|
"p50": ps[0],
|
|
"p95": ps[1],
|
|
"p99": ps[2],
|
|
}
|
|
return measurement, fields
|
|
}
|
|
return "", nil
|
|
}
|