From 6a2b73eae57709e712096e64e7190e814786c137 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Thu, 15 Mar 2018 13:59:03 +0100 Subject: [PATCH] swarm/api: wrapping the responseWriter --- swarm/api/http/server.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/swarm/api/http/server.go b/swarm/api/http/server.go index 714d9f39d3..bf4cc572a3 100644 --- a/swarm/api/http/server.go +++ b/swarm/api/http/server.go @@ -799,10 +799,13 @@ func (s *Server) HandleGetFile(w http.ResponseWriter, r *Request) { http.ServeContent(w, &r.Request, "", time.Now(), reader) } -func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (s *Server) ServeHTTP(rw http.ResponseWriter, r *http.Request) { req := &Request{Request: *r, ruid: uuid.New()[:8]} requestCount.Inc(1) - log.Info("serve request", "ruid", req.ruid, "method", r.Method, "url", r.RequestURI) + log.Info("serving request", "ruid", req.ruid, "method", r.Method, "url", r.RequestURI) + + // wrapping the ResponseWriter, so that we get the response code set by http.ServeContent + w := newLoggingResponseWriter(rw) if r.RequestURI == "/" && strings.Contains(r.Header.Get("Accept"), "text/html") { @@ -880,6 +883,8 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { default: Respond(w, req, fmt.Sprintf("%s method is not supported", r.Method), http.StatusMethodNotAllowed) } + + log.Info("served response", "ruid", req.ruid, "code", w.statusCode) } func (s *Server) updateManifest(key storage.Key, update func(mw *api.ManifestWriter) error) (storage.Key, error) { @@ -899,3 +904,17 @@ func (s *Server) updateManifest(key storage.Key, update func(mw *api.ManifestWri log.Debug(fmt.Sprintf("generated manifest %s", key)) return key, nil } + +type loggingResponseWriter struct { + http.ResponseWriter + statusCode int +} + +func newLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter { + return &loggingResponseWriter{w, http.StatusOK} +} + +func (lrw *loggingResponseWriter) WriteHeader(code int) { + lrw.statusCode = code + lrw.ResponseWriter.WriteHeader(code) +}