4194: logging writer copies / appends passed in data into its own buffer.
authorradhika <radhika@curoverse.com>
Sun, 16 Nov 2014 20:51:37 +0000 (15:51 -0500)
committerradhika <radhika@curoverse.com>
Sun, 16 Nov 2014 20:51:37 +0000 (15:51 -0500)
services/keepstore/router_wrapper.go

index 23e7eb2eb099c7b7ae9b9f8a7c1c90d13ff36c86..b1ebd41d8b2e0eb0471247559bb65039e003d177 100644 (file)
@@ -4,24 +4,25 @@ package main
 // LoggingResponseWriter
 
 import (
+  "bytes"
        "github.com/gorilla/mux"
        "log"
        "net/http"
 )
 
 type LoggingResponseWriter struct {
-  status int
-  data []byte
+  Status int
+  Data *bytes.Buffer
   http.ResponseWriter
 }
 
 func (loggingWriter *LoggingResponseWriter) WriteHeader(code int) {
-  loggingWriter.status = code
+  loggingWriter.Status = code
   loggingWriter.ResponseWriter.WriteHeader(code)
 }
 
 func (loggingWriter *LoggingResponseWriter) Write(data []byte) (int, error){
-  loggingWriter.data = data
+  loggingWriter.Data.Write(data)
   return loggingWriter.ResponseWriter.Write(data)
 }
 
@@ -35,16 +36,17 @@ func MakeRESTRouterWrapper() (RESTRouterWrapper) {
 }
 
 func (wrapper RESTRouterWrapper) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
-  loggingWriter := LoggingResponseWriter{200, nil, resp}
+  loggingWriter := LoggingResponseWriter{200, bytes.NewBuffer(make([]byte, 0, 0)), resp}
   wrapper.router.ServeHTTP(&loggingWriter, req)
-  if loggingWriter.data != nil && loggingWriter.status == 200 {
-    data_len := len(loggingWriter.data)
-    if data_len > 200 {  // this could be a block, so just print the size
-      log.Printf("[%s] %s %s %d %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, data_len)
+  if loggingWriter.Status == 200 {
+    if loggingWriter.Data.Len() > 200 {  // could be large block, so just print the size
+      log.Printf("[%s] %s %s %d %d", req.RemoteAddr, req.Method, req.URL.Path[1:],
+          loggingWriter.Status, loggingWriter.Data.Len())
     } else {  // this could be a hash or status or a small block etc
-      log.Printf("[%s] %s %s %d %s", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, loggingWriter.data)
+      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)
+    log.Printf("[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.Status)
   }
 }