| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package metrics
- import "encoding/json"
- // MarshalJSON returns a byte slice containing a JSON representation of all
- // the metrics in the Registry.
- func (r StandardRegistry) MarshalJSON() ([]byte, error) {
- data := make(map[string]map[string]interface{})
- r.Each(func(name string, i interface{}) {
- values := make(map[string]interface{})
- switch m := i.(type) {
- case Counter:
- values["count"] = m.Count()
- case Gauge:
- values["value"] = m.Value()
- case Healthcheck:
- m.Check()
- values["error"] = m.Error()
- case Histogram:
- s := m.Sample()
- ps := s.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
- values["count"] = s.Count()
- values["min"] = s.Min()
- values["max"] = s.Max()
- values["mean"] = s.Mean()
- values["stddev"] = s.StdDev()
- values["median"] = ps[0]
- values["75%%"] = ps[1]
- values["95%%"] = ps[2]
- values["99%%"] = ps[3]
- values["99.9%%"] = ps[4]
- case Meter:
- values["count"] = m.Count()
- values["1m.rate"] = m.Rate1()
- values["5m.rate"] = m.Rate5()
- values["15m.rate"] = m.Rate15()
- values["mean.rate"] = m.RateMean()
- case Timer:
- ps := m.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
- values["count"] = m.Count()
- values["min"] = m.Min()
- values["max"] = m.Max()
- values["mean"] = m.Mean()
- values["stddev"] = m.StdDev()
- values["median"] = ps[0]
- values["75%%"] = ps[1]
- values["95%%"] = ps[2]
- values["99%%"] = ps[3]
- values["99.9%%"] = ps[4]
- values["1m.rate"] = m.Rate1()
- values["5m.rate"] = m.Rate5()
- values["15m.rate"] = m.Rate15()
- values["mean.rate"] = m.RateMean()
- }
- data[name] = values
- })
- return json.Marshal(data)
- }
|