json.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package metrics
  2. import "encoding/json"
  3. // MarshalJSON returns a byte slice containing a JSON representation of all
  4. // the metrics in the Registry.
  5. func (r StandardRegistry) MarshalJSON() ([]byte, error) {
  6. data := make(map[string]map[string]interface{})
  7. r.Each(func(name string, i interface{}) {
  8. values := make(map[string]interface{})
  9. switch metric := i.(type) {
  10. case Counter:
  11. values["count"] = metric.Count()
  12. case Gauge:
  13. values["value"] = metric.Value()
  14. case GaugeFloat64:
  15. values["value"] = metric.Value()
  16. case Healthcheck:
  17. metric.Check()
  18. values["error"] = metric.Error().Error()
  19. case Histogram:
  20. h := metric.Snapshot()
  21. ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  22. values["count"] = h.Count()
  23. values["min"] = h.Min()
  24. values["max"] = h.Max()
  25. values["mean"] = h.Mean()
  26. values["stddev"] = h.StdDev()
  27. values["median"] = ps[0]
  28. values["75%"] = ps[1]
  29. values["95%"] = ps[2]
  30. values["99%"] = ps[3]
  31. values["99.9%"] = ps[4]
  32. case Meter:
  33. m := metric.Snapshot()
  34. values["count"] = m.Count()
  35. values["1m.rate"] = m.Rate1()
  36. values["5m.rate"] = m.Rate5()
  37. values["15m.rate"] = m.Rate15()
  38. values["mean.rate"] = m.RateMean()
  39. case Timer:
  40. t := metric.Snapshot()
  41. ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  42. values["count"] = t.Count()
  43. values["min"] = t.Min()
  44. values["max"] = t.Max()
  45. values["mean"] = t.Mean()
  46. values["stddev"] = t.StdDev()
  47. values["median"] = ps[0]
  48. values["75%"] = ps[1]
  49. values["95%"] = ps[2]
  50. values["99%"] = ps[3]
  51. values["99.9%"] = ps[4]
  52. values["1m.rate"] = t.Rate1()
  53. values["5m.rate"] = t.Rate5()
  54. values["15m.rate"] = t.Rate15()
  55. values["mean.rate"] = t.RateMean()
  56. }
  57. data[name] = values
  58. })
  59. return json.Marshal(data)
  60. }