From 22387e71f71e2dd522c0992880da4cd7db68f81f Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Fri, 2 Jan 2015 14:33:59 -0800 Subject: [PATCH] HTRACE-49 Make HTraced's urls more restful --- .gitignore | 2 ++ .../src/go/src/org/apache/htrace/htraced/rest.go | 38 ++++++++++------------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index f6c1807..1c92de9 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ htrace-core/src/go/pkg htrace-core/src/go/src/org/apache/htrace/resource htrace-core/src/go/src/github.com/ htrace-core/src/go/src/gopkg.in/ +htrace-core/src/go/src/code.google.com/ +htrace-core/src/go/src/golang.org/ htrace-core/src/go/src/org/apache/htrace/common/version.go diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go index 74018c0..beaca55 100644 --- a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go +++ b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go @@ -21,6 +21,7 @@ package main import ( "encoding/json" + "github.com/gorilla/mux" "log" "net/http" "org/apache/htrace/common" @@ -49,18 +50,11 @@ type dataStoreHandler struct { store *dataStore } -func (hand *dataStoreHandler) getReqField64(fieldName string, w http.ResponseWriter, - req *http.Request) (int64, bool) { - str := req.FormValue(fieldName) - if str == "" { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte("No " + fieldName + " specified.")) - return -1, false - } +func (hand *dataStoreHandler) parse64(w http.ResponseWriter, str string) (int64, bool) { val, err := strconv.ParseUint(str, 16, 64) if err != nil { w.WriteHeader(http.StatusBadRequest) - w.Write([]byte("Error parsing " + fieldName + ": " + err.Error())) + w.Write([]byte("Error parsing : " + err.Error())) return -1, false } return int64(val), true @@ -89,7 +83,9 @@ type findSidHandler struct { func (hand *findSidHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { req.ParseForm() - sid, ok := hand.getReqField64("sid", w, req) + vars := mux.Vars(req) + stringSid := vars["id"] + sid, ok := hand.parse64(w, stringSid) if !ok { return } @@ -107,7 +103,9 @@ type findChildrenHandler struct { func (hand *findChildrenHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { req.ParseForm() - sid, ok := hand.getReqField64("sid", w, req) + vars := mux.Vars(req) + stringSid := vars["id"] + sid, ok := hand.parse64(w, stringSid) if !ok { return } @@ -144,20 +142,20 @@ func (hand *defaultServeHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ } func startRestServer(cnf *conf.Config, store *dataStore) { - mux := http.NewServeMux() - serverInfoH := &serverInfoHandler{} - mux.Handle("/serverInfo", serverInfoH) + r := mux.NewRouter().StrictSlash(false) + // Default Handler. This will serve requests for static requests. + r.Handle("/", &defaultServeHandler{}) + r.Handle("/server/info", &serverInfoHandler{}).Methods("GET") + + span := r.PathPrefix("/span").Subrouter() findSidH := &findSidHandler{dataStoreHandler: dataStoreHandler{store: store}} - mux.Handle("/findSid", findSidH) + span.Handle("/{id}", findSidH).Methods("GET") findChildrenH := &findChildrenHandler{dataStoreHandler: dataStoreHandler{store: store}} - mux.Handle("/findChildren", findChildrenH) + span.Handle("/{id}/children", findChildrenH).Methods("GET") - defaultServeH := &defaultServeHandler{} - mux.Handle("/", defaultServeH) - - http.ListenAndServe(cnf.Get(conf.HTRACE_WEB_ADDRESS), mux) + http.ListenAndServe(cnf.Get(conf.HTRACE_WEB_ADDRESS), r) log.Println("Started REST server...") } -- 2.2.1