소스 검색

Added MarshalJSON method to registry

Arik Fraimovich 12 년 전
부모
커밋
88af8882e5
1개의 변경된 파일63개의 추가작업 그리고 0개의 파일을 삭제
  1. 63 0
      json.go

+ 63 - 0
json.go

@@ -0,0 +1,63 @@
+package metrics
+
+import (
+  "encoding/json"
+)
+
+// Output each metric in the given registry periodically using the given
+// logger.  The interval is to be given in seconds.
+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:
+      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]
+    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)
+}
+