json.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. values["error"] = nil
  18. metric.Check()
  19. if err := metric.Error(); nil != err {
  20. values["error"] = metric.Error().Error()
  21. }
  22. case Histogram:
  23. h := metric.Snapshot()
  24. ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  25. values["count"] = h.Count()
  26. values["min"] = h.Min()
  27. values["max"] = h.Max()
  28. values["mean"] = h.Mean()
  29. values["stddev"] = h.StdDev()
  30. values["median"] = ps[0]
  31. values["75%"] = ps[1]
  32. values["95%"] = ps[2]
  33. values["99%"] = ps[3]
  34. values["99.9%"] = ps[4]
  35. case Meter:
  36. m := metric.Snapshot()
  37. values["count"] = m.Count()
  38. values["1m.rate"] = m.Rate1()
  39. values["5m.rate"] = m.Rate5()
  40. values["15m.rate"] = m.Rate15()
  41. values["mean.rate"] = m.RateMean()
  42. case Timer:
  43. t := metric.Snapshot()
  44. ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  45. values["count"] = t.Count()
  46. values["min"] = t.Min()
  47. values["max"] = t.Max()
  48. values["mean"] = t.Mean()
  49. values["stddev"] = t.StdDev()
  50. values["median"] = ps[0]
  51. values["75%"] = ps[1]
  52. values["95%"] = ps[2]
  53. values["99%"] = ps[3]
  54. values["99.9%"] = ps[4]
  55. values["1m.rate"] = t.Rate1()
  56. values["5m.rate"] = t.Rate5()
  57. values["15m.rate"] = t.Rate15()
  58. values["mean.rate"] = t.RateMean()
  59. }
  60. data[name] = values
  61. })
  62. return json.Marshal(data)
  63. }