summaryrefslogtreecommitdiff
path: root/src/hub/src/spreadspace.org/sfive/s5srvWeb.go
diff options
context:
space:
mode:
authorMarkus Grüneis <gimpf@gimpf.org>2014-10-23 12:17:57 +0200
committerMarkus Grüneis <gimpf@gimpf.org>2014-10-23 12:20:54 +0200
commit0a9e301797172139472d731fda50689370894651 (patch)
treed7668a5493669c7a0e5d67b5909012236abc35a5 /src/hub/src/spreadspace.org/sfive/s5srvWeb.go
parentvalue del button (diff)
hub: Return JSON data from web-server.
- refactor source structure: split and rename files, move some types around - http server return HTTP error status codes in case of failure - http server marshals response values as json
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvWeb.go')
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srvWeb.go112
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() {