From 49b8c330599a833c5fd276a9bbbe9f63c7296a0d Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Thu, 26 Dec 2013 15:05:00 -0600 Subject: [PATCH] Add metadata endpoint. --- core/etcd.go | 14 ++++++++++++++ core/http.go | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/core/etcd.go b/core/etcd.go index 3ac5615c3..c18a132e0 100644 --- a/core/etcd.go +++ b/core/etcd.go @@ -200,6 +200,20 @@ func (self *ProcessMap) GetPortHttp(id *uuid.UUID) (int, error) { return process.PortHttp(), nil } +func (self *ProcessMap) GetMetadata() map[string]map[string]interface{} { + self.mutex.Lock() + defer self.mutex.Unlock() + out := make(map[string]map[string]interface{}) + for id, process := range self.nodes { + pdata := make(map[string]interface{}) + pdata["host"] = process.Host() + pdata["port_tcp"] = process.PortTcp() + pdata["port_http"] = process.PortHttp() + out[id.String()] = pdata + } + return out +} + type ProcessMapper struct { service *Service receiver chan etcd.Response diff --git a/core/http.go b/core/http.go index 8d1261fc4..2e02fbb2a 100644 --- a/core/http.go +++ b/core/http.go @@ -29,6 +29,7 @@ func (self *WebService) Run() { mux.HandleFunc("/query", self.HandleQuery) mux.HandleFunc("/stats", self.HandleStats) mux.HandleFunc("/info", self.HandleInfo) + mux.HandleFunc("/processes", self.HandleProcesses) mux.HandleFunc("/listen", self.HandleListen) s := &http.Server{ Addr: ":" + port_string, @@ -88,6 +89,19 @@ func (self *WebService) HandleInfo(w http.ResponseWriter, r *http.Request) { spew.Fdump(w, self.service.Cluster) } +func (self *WebService) HandleProcesses(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + http.Error(w, "Only GET allowed", http.StatusMethodNotAllowed) + return + } + encoder := json.NewEncoder(w) + processes := self.service.ProcessMap.GetMetadata() + err := encoder.Encode(processes) + if err != nil { + log.Fatal("Error encoding stats") + } +} + func (self *WebService) HandleListen(w http.ResponseWriter, r *http.Request) { //listener := service.NewListener() //encoder := json.NewEncoder(w)