summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 75ca92c)
raw | patch | inline | side by side (parent: 75ca92c)
author | Sebastian Harl <sh@tokkee.org> | |
Sat, 22 Nov 2014 12:07:00 +0000 (13:07 +0100) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Sat, 22 Nov 2014 12:08:00 +0000 (13:08 +0100) |
This avoids subsequent string-joins in various handlers and generally unifies
URL handling.
Also, it fixes handling of URLs containing (escaped) spaces.
URL handling.
Also, it fixes handling of URLs containing (escaped) spaces.
server/graph.go | patch | blob | history | |
server/server.go | patch | blob | history |
diff --git a/server/graph.go b/server/graph.go
index 11b55b84fef483d16ff545bf50894444fdd58576..9406f760158029519ecf32edb07f7993c6dfc632 100644 (file)
--- a/server/graph.go
+++ b/server/graph.go
"fmt"
"io"
"net/http"
- "strings"
"time"
"code.google.com/p/plotinum/plot"
)
func (s *Server) graph(w http.ResponseWriter, req request) {
- if len(req.args) < 2 {
+ if len(req.args) != 2 {
s.internal(w, fmt.Errorf("Missing host/metric information"))
}
host := proto.EscapeString(req.args[0])
- metric := proto.EscapeString(strings.Join(req.args[1:], "/"))
+ metric := proto.EscapeString(req.args[1])
res, err := s.query(fmt.Sprintf("TIMESERIES %s.%s", host, metric))
if err != nil {
s.internal(w, fmt.Errorf("Failed to retrieve graph data: %v", err))
diff --git a/server/server.go b/server/server.go
index b7cd37a3c5ed3e3dc209cbd4a6010d0b7f2da622..a8e34d9c32a063c5d183070e4cb48e258e5250de 100644 (file)
--- a/server/server.go
+++ b/server/server.go
"io"
"log"
"net/http"
+ "net/url"
"path/filepath"
"strings"
// ServeHTTP implements the http.Handler interface and serves
// the SysDB user interface.
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- path := r.URL.Path
+ path := r.RequestURI
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
- fields := strings.Split(path, "/")
+ var fields []string
+ for _, f := range strings.Split(path, "/") {
+ f, err := url.QueryUnescape(f)
+ if err != nil {
+ s.err(w, http.StatusBadRequest, fmt.Errorf("Error: %v", err))
+ return
+ }
+ fields = append(fields, f)
+ }
req := request{
r: r,
}
q = fmt.Sprintf("FETCH host %s", proto.EscapeString(req.args[0]))
case "service", "metric":
- if len(req.args) < 2 {
+ if len(req.args) != 2 {
return nil, fmt.Errorf("%s not found", strings.Title(req.cmd))
}
host := proto.EscapeString(req.args[0])
- name := proto.EscapeString(strings.Join(req.args[1:], "/"))
+ name := proto.EscapeString(req.args[1])
q = fmt.Sprintf("FETCH %s %s.%s", req.cmd, host, name)
default:
panic("Unknown request: fetch(" + req.cmd + ")")