mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
metrics: expvar support for ResettingTimer
This commit is contained in:
parent
143c4341d8
commit
d6f6cceabc
2 changed files with 42 additions and 0 deletions
|
|
@ -134,6 +134,18 @@ func (exp *exp) publishTimer(name string, metric metrics.Timer) {
|
|||
exp.getFloat(name + ".mean-rate").Set(t.RateMean())
|
||||
}
|
||||
|
||||
func (exp *exp) publishResettingTimer(name string, metric metrics.ResettingTimer) {
|
||||
t := metric.Snapshot()
|
||||
ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
|
||||
exp.getInt(name + ".count").Set(int64(len(t.Values())))
|
||||
exp.getFloat(name + ".mean").Set(t.Mean())
|
||||
exp.getInt(name + ".50-percentile").Set(ps[0])
|
||||
exp.getInt(name + ".75-percentile").Set(ps[1])
|
||||
exp.getInt(name + ".95-percentile").Set(ps[2])
|
||||
exp.getInt(name + ".99-percentile").Set(ps[3])
|
||||
exp.getInt(name + ".999-percentile").Set(ps[4])
|
||||
}
|
||||
|
||||
func (exp *exp) syncToExpvar() {
|
||||
exp.registry.Each(func(name string, i interface{}) {
|
||||
switch i.(type) {
|
||||
|
|
@ -149,6 +161,8 @@ func (exp *exp) syncToExpvar() {
|
|||
exp.publishMeter(name, i.(metrics.Meter))
|
||||
case metrics.Timer:
|
||||
exp.publishTimer(name, i.(metrics.Timer))
|
||||
case metrics.ResettingTimer:
|
||||
exp.publishResettingTimer(name, i.(metrics.ResettingTimer))
|
||||
default:
|
||||
panic(fmt.Sprintf("unsupported type for '%s': %T", name, i))
|
||||
}
|
||||
|
|
|
|||
28
node/api.go
28
node/api.go
|
|
@ -338,6 +338,20 @@ func (api *PublicDebugAPI) Metrics(raw bool) (map[string]interface{}, error) {
|
|||
},
|
||||
}
|
||||
|
||||
case metrics.ResettingTimer:
|
||||
t := metric.Snapshot()
|
||||
ps := t.Percentiles([]float64{0.05, 0.2, 0.5, 0.8, 0.95})
|
||||
root[name] = map[string]interface{}{
|
||||
"Overall": format(float64(len(t.Values())), t.Mean()),
|
||||
"Percentiles": map[string]interface{}{
|
||||
"5": time.Duration(ps[0]).String(),
|
||||
"20": time.Duration(ps[1]).String(),
|
||||
"50": time.Duration(ps[2]).String(),
|
||||
"80": time.Duration(ps[3]).String(),
|
||||
"95": time.Duration(ps[4]).String(),
|
||||
},
|
||||
}
|
||||
|
||||
default:
|
||||
root[name] = "Unknown metric type"
|
||||
}
|
||||
|
|
@ -373,6 +387,20 @@ func (api *PublicDebugAPI) Metrics(raw bool) (map[string]interface{}, error) {
|
|||
},
|
||||
}
|
||||
|
||||
case metrics.ResettingTimer:
|
||||
t := metric.Snapshot()
|
||||
ps := t.Percentiles([]float64{0.05, 0.2, 0.5, 0.8, 0.95})
|
||||
root[name] = map[string]interface{}{
|
||||
"Overall": format(float64(len(t.Values())), t.Mean()),
|
||||
"Percentiles": map[string]interface{}{
|
||||
"5": time.Duration(ps[0]).String(),
|
||||
"20": time.Duration(ps[1]).String(),
|
||||
"50": time.Duration(ps[2]).String(),
|
||||
"80": time.Duration(ps[3]).String(),
|
||||
"95": time.Duration(ps[4]).String(),
|
||||
},
|
||||
}
|
||||
|
||||
default:
|
||||
root[name] = "Unknown metric type"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue