You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by ec...@apache.org on 2015/01/03 03:05:08 UTC

incubator-htrace git commit: HTRACE-49 Make HTraced's urls more restful

Repository: incubator-htrace
Updated Branches:
  refs/heads/master 78542437f -> 16fc1bf75


HTRACE-49 Make HTraced's urls more restful


Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/16fc1bf7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/16fc1bf7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/16fc1bf7

Branch: refs/heads/master
Commit: 16fc1bf759c48a74aa5fe6b8f40e81a665cb32d7
Parents: 7854243
Author: Elliott Clark <el...@fb.com>
Authored: Fri Jan 2 14:34:45 2015 -0800
Committer: Elliott Clark <el...@fb.com>
Committed: Fri Jan 2 17:15:30 2015 -0800

----------------------------------------------------------------------
 .gitignore                                      |  2 ++
 NOTICE.txt                                      |  3 ++
 .../go/src/org/apache/htrace/htraced/rest.go    | 38 ++++++++++----------
 pom.xml                                         |  1 +
 4 files changed, 24 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/16fc1bf7/.gitignore
----------------------------------------------------------------------
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

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/16fc1bf7/NOTICE.txt
----------------------------------------------------------------------
diff --git a/NOTICE.txt b/NOTICE.txt
index 19f97eb..c377812 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -16,3 +16,6 @@ It is by alecthomas: https://github.com/alecthomas/units
 Kingpin, a go command line and flag parser is licensed MIT
 (https://github.com/alecthomas/kingpin/blob/master/COPYING)
 by alecthomas
+
+Gorilla mux gorilla/mux implements a request router and dispatcher is BSD licensed
+( https://github.com/gorilla/mux/blob/master/LICENSE 

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/16fc1bf7/htrace-core/src/go/src/org/apache/htrace/htraced/rest.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 73409fe..61f4a02 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"
 	"mime"
 	"net/http"
@@ -51,18 +52,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
@@ -91,7 +85,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
 	}
@@ -109,7 +105,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
 	}
@@ -149,20 +147,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)
-
-	defaultServeH := &defaultServeHandler{}
-	mux.Handle("/", defaultServeH)
+	span.Handle("/{id}/children", findChildrenH).Methods("GET")
 
-	http.ListenAndServe(cnf.Get(conf.HTRACE_WEB_ADDRESS), mux)
+	http.ListenAndServe(cnf.Get(conf.HTRACE_WEB_ADDRESS), r)
 	log.Println("Started REST server...")
 }

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/16fc1bf7/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5977a9e..a85149a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -164,6 +164,7 @@ language governing permissions and limitations under the License. -->
               <!-- Pulled down sources -->
               <exclude>**/gopkg.in/**</exclude>
               <exclude>**/github.com/**</exclude>
+              <exclude>**/golang.org/**</exclude>
             </excludes>
           </configuration>
         </plugin>