diff options
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvWeb.go')
-rw-r--r-- | src/hub/src/spreadspace.org/sfive/s5srvWeb.go | 112 |
1 files changed, 82 insertions, 30 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go index d2367fa..7adbb81 100644 --- a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go +++ b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go @@ -17,23 +17,53 @@ func hello(c web.C, w http.ResponseWriter, r *http.Request) { } func (self StatsSinkServer) getTagList(c web.C, w http.ResponseWriter, r *http.Request) { - tags, err := self.store.GetTags() - fmt.Fprintf(w, "Tags: %v, err %v", tags, err) + const resourceName = "tags" + values, err := self.store.GetTags() + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + jsonString, err := json.Marshal(values) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func (self StatsSinkServer) getSourcesList(c web.C, w http.ResponseWriter, r *http.Request) { - sources, err := self.store.GetSources() - fmt.Fprintf(w, "Sources: %v, err %v", sources, err) + const resourceName = "sources" + values, err := self.store.GetSources() + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + jsonString, err := json.Marshal(values) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func (self StatsSinkServer) getSource(c web.C, w http.ResponseWriter, r *http.Request) { + const resourceName = "source" id, err := strconv.ParseInt(c.URLParams["id"], 10, 64) - if err == nil { - src, err := self.store.GetSource(int(id)) - fmt.Fprintf(w, "Source: %v, %v, %v", id, src, err) - } else { - fmt.Fprintf(w, "Source: invalid id: %v", err) + if err != nil { + http.Error(w, fmt.Sprintf("invalid id: %s: %v", resourceName, err), http.StatusBadRequest) + return + } + value, err := self.store.GetSource(int(id)) + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return } + jsonString, err := json.Marshal(value) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func getFilter(r *http.Request) (filter StatsFilter) { @@ -77,55 +107,77 @@ func getFilter(r *http.Request) (filter StatsFilter) { } func (self StatsSinkServer) getUpdateList(c web.C, w http.ResponseWriter, r *http.Request) { + const resourceName = "updates" filter := getFilter(r) - updates, err := self.store.GetUpdates(&filter) - fmt.Fprintf(w, "Updates (%v): %v, %v", filter, updates, err) + values, err := self.store.GetUpdates(&filter) + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + jsonString, err := json.Marshal(values) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func (self StatsSinkServer) getUpdate(c web.C, w http.ResponseWriter, r *http.Request) { + const resourceName = "update" id, err := strconv.ParseInt(c.URLParams["id"], 10, 64) - if err == nil { - src, err := self.store.GetUpdate(int(id)) - fmt.Fprintf(w, "Update: %v, %v, %v", id, src, err) - } else { - fmt.Fprintf(w, "Update: invalid id: %v", err) + if err != nil { + http.Error(w, fmt.Sprintf("invalid id: %s: %v", resourceName, err), http.StatusBadRequest) + return } + value, err := self.store.GetUpdate(int(id)) + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + jsonString, err := json.Marshal(value) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func (self StatsSinkServer) postUpdate(c web.C, w http.ResponseWriter, r *http.Request) { + const resourceName = "update" decoder := NewPlainDecoder() buffer, err := ioutil.ReadAll(r.Body) if err != nil { s5l.Printf("web: failed to read post value: %v\n", err) + http.Error(w, fmt.Sprintf("failed reading : %s: %v", resourceName, err), http.StatusBadRequest) return } data, err := decoder.Decode(buffer) if err != nil { - s5l.Printf("web: failed to decode: %v\ndat:%v", err, string(buffer)) + s5l.Printf("web: failed to decode: %v\n", err) + http.Error(w, fmt.Sprintf("failed decoding %s: %v", resourceName, err), http.StatusBadRequest) return } self.appendData <- data + // TODO send response channel, wait for OK } func (self StatsSinkServer) getStats(c web.C, w http.ResponseWriter, r *http.Request) { + const resourceName = "stats" filter := getFilter(r) - stats, err := self.store.GetStats(&filter) - if err == nil { - js, err := json.Marshal(stats) - if err == nil { - fmt.Fprintf(w, "%v", js) - } else { - fmt.Fprintf(w, "Stats: Failed formatting stats: %v", err) - } - } else { - fmt.Fprintf(w, "Stats: Failed retrieving stats: %v", err) + values, err := self.store.GetStats(&filter) + if err != nil { + http.Error(w, fmt.Sprintf("failed to retrieve %s: %v", resourceName, err), http.StatusInternalServerError) + return } -} - -func clientCount(c web.C, w http.ResponseWriter, r *http.Request) { + jsonString, err := json.Marshal(values) + if err != nil { + http.Error(w, fmt.Sprintf("failed to marshal %s: %v", resourceName, err), http.StatusInternalServerError) + return + } + fmt.Fprintf(w, "%s", jsonString) } func (self StatsSinkServer) ServeWeb() { |