From 41d2efea8b40ebe313ed0a2be8cb8c2b7450b2f2 Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Tue, 27 Jan 2015 13:57:44 +0700 Subject: [PATCH] Rates API --- hub/hub.go | 14 +++++--------- server/server.go | 24 ++++++++++++++++++++++-- stats/stats.go | 16 +++++++--------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/hub/hub.go b/hub/hub.go index db27585..e83fe25 100644 --- a/hub/hub.go +++ b/hub/hub.go @@ -90,12 +90,9 @@ func (h *Hub) Info() map[string]map[string]int64 { info := make(map[string]map[string]int64) for queue, size := range h.storage.QueueSizes() { - inRate, outRate := h.statistics.Rates(queue) info[queue] = map[string]int64{ "messages": size, "subscriptions": 0, - "in_rate": inRate, - "out_rate": outRate, } } for _, sub := range h.subscribers { @@ -113,13 +110,12 @@ func (h *Hub) Info() map[string]map[string]int64 { return info } -func (h *Hub) RateHistory() map[string]map[string][]int64 { - hist := map[string]map[string][]int64{} - for queue, _ := range h.storage.QueueSizes() { - hist[queue] = h.statistics.RateHistory(queue) - } +func (h *Hub) Rates(queue string) (in, out int64) { + return h.statistics.Rates(queue) +} - return hist +func (h *Hub) RateHistory(queue string) (in, out []int64) { + return h.statistics.RateHistory(queue) } func (h *Hub) StorageInfo() map[string]interface{} { diff --git a/server/server.go b/server/server.go index f455d76..fb6c7cb 100644 --- a/server/server.go +++ b/server/server.go @@ -48,9 +48,29 @@ func (s *Server) Start() { } func (s *Server) statusHandler(w http.ResponseWriter, r *http.Request) { - info := s.hub.Info() - jsn, _ := json.Marshal(info) + var ( + res = map[string]map[string]interface{}{} + info = s.hub.Info() + withRates = (r.FormValue("rates") != "") + ) + for queue, meta := range info { + res[queue] = map[string]interface{}{} + + for key, val := range meta { + res[queue][key] = val + } + if withRates { + inRate, outRate := s.hub.Rates(queue) + inHist, outHist := s.hub.RateHistory(queue) + res[queue]["in_rate"] = inRate + res[queue]["out_rate"] = outRate + res[queue]["in_rate_history"] = inHist + res[queue]["out_rate_history"] = outHist + } + } + + jsn, _ := json.Marshal(res) w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(jsn) } diff --git a/stats/stats.go b/stats/stats.go index f4cb7bc..ca6bac4 100644 --- a/stats/stats.go +++ b/stats/stats.go @@ -24,7 +24,7 @@ type ( func New() *Stats { s := &Stats{ - q: map[string]*meta{}, + queues: map[string]*meta{}, } go s.loopCollectSeconds() @@ -50,18 +50,16 @@ func (s *Stats) Rates(queue string) (in, out int64) { return p.in, p.out } -func (s *Stats) RateHistory(queue string) map[string][]int64 { - hist := map[string][]int64{ - "in": []int64{}, - "out": []int64{}, - } +func (s *Stats) RateHistory(queue string) (in, out []int64) { + in = []int64{} + out = []int64{} for _, p := range s.metaFor(queue).points { - hist["in"] = append(hist["in"], p.in) - hist["out"] = append(hist["out"], p.out) + in = append(in, p.in) + out = append(out, p.out) } - return hist + return in, out } func (s *Stats) loopCollectSeconds() {