4194: Add LoggingResponseWriter and RESTRouter wrapper. Update keepstore and handler_...
authorradhika <radhika@curoverse.com>
Fri, 14 Nov 2014 14:50:39 +0000 (09:50 -0500)
committerradhika <radhika@curoverse.com>
Fri, 14 Nov 2014 14:50:39 +0000 (09:50 -0500)
services/keepstore/handler_test.go
services/keepstore/handlers.go
services/keepstore/keepstore.go

index ca609157aa670cb13f3f6325fd1b596a85ec7f70..32479d829bec0194a3c8548152fdad29eb8461db 100644 (file)
@@ -750,7 +750,8 @@ func IssueRequest(router *mux.Router, rt *RequestTester) *httptest.ResponseRecor
        if rt.api_token != "" {
                req.Header.Set("Authorization", "OAuth2 "+rt.api_token)
        }
-       router.ServeHTTP(response, req)
+  routerWrapper := WrapRESTRouter{router}
+  routerWrapper.ServeHTTP(response, req)
        return response
 }
 
index 27d1e908c56ab46d535fc97bc1f2b79bf349387a..2f32be51f9d9afeaea3949ee0ce7312bf6ac54ce 100644 (file)
@@ -754,3 +754,33 @@ func CanDelete(api_token string) bool {
 func IsDataManagerToken(api_token string) bool {
        return data_manager_token != "" && api_token == data_manager_token
 }
+
+type LoggingResponseWriter struct {
+  status int
+  data []byte
+  http.ResponseWriter
+}
+
+func (loggingWriter *LoggingResponseWriter) WriteHeader(code int) {
+  loggingWriter.status = code
+  loggingWriter.ResponseWriter.WriteHeader(code)
+}
+
+func (loggingWriter *LoggingResponseWriter) Write(data []byte) (int, error){
+  loggingWriter.data = data
+  return loggingWriter.ResponseWriter.Write(data)
+}
+
+type WrapRESTRouter struct {
+  router *mux.Router
+}
+
+func (wrapper *WrapRESTRouter) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+  loggingWriter := LoggingResponseWriter{200, nil, resp}
+  wrapper.router.ServeHTTP(&loggingWriter, req)
+  if loggingWriter.data != nil && loggingWriter.status == 200{
+    log.Printf("[%s] %s %s %d %s", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, loggingWriter.data)
+  } else {
+    log.Printf("[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status)
+  }
+}
index c899d5166a6f9871ffbd7c18c187eb0cc5df9ad6..08043cc3898405d4b0cd7b2dfe82f3a74bc73637 100644 (file)
@@ -262,9 +262,11 @@ func main() {
        // Start a round-robin VolumeManager with the volumes we have found.
        KeepVM = MakeRRVolumeManager(goodvols)
 
-       // Tell the built-in HTTP server to direct all requests to the REST
-       // router.
-       http.Handle("/", MakeRESTRouter())
+       // Tell the built-in HTTP server to direct all requests to the REST router.
+  routerWrapper := WrapRESTRouter{MakeRESTRouter()}
+  http.HandleFunc("/", func(resp http.ResponseWriter, req *http.Request) {
+    routerWrapper.ServeHTTP(resp, req)
+  })
 
        // Set up a TCP listener.
        listener, err := net.Listen("tcp", listen)