From f765303daf1509967454becddf5f5ae67f4956fe Mon Sep 17 00:00:00 2001 From: jdl Date: Sun, 14 Jun 2026 20:31:49 +0200 Subject: [PATCH] Dependency updates, logging middleware. --- hub/handler.go | 2 +- hub/middleware.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 hub/middleware.go diff --git a/hub/handler.go b/hub/handler.go index 83b8462..3300067 100644 --- a/hub/handler.go +++ b/hub/handler.go @@ -29,7 +29,7 @@ func (app *App) handlePub(pattern string, fn handlerFunc) { } } - app.mux.HandleFunc(pattern, wrapped) + app.mux.HandleFunc(pattern, withLogging(wrapped)) } func (app *App) handleNotSignedIn(pattern string, fn handlerFunc) { diff --git a/hub/middleware.go b/hub/middleware.go new file mode 100644 index 0000000..4e3c803 --- /dev/null +++ b/hub/middleware.go @@ -0,0 +1,47 @@ +package hub + +import ( + "log" + "net/http" + "os" + "time" +) + +var _log = log.New(os.Stderr, "", 0) + +type responseWriterWrapper struct { + http.ResponseWriter + httpStatus int + responseSize int +} + +func (w *responseWriterWrapper) WriteHeader(status int) { + w.httpStatus = status + w.ResponseWriter.WriteHeader(status) +} + +func (w *responseWriterWrapper) Write(b []byte) (int, error) { + if w.httpStatus == 0 { + w.httpStatus = 200 + } + w.responseSize += len(b) + return w.ResponseWriter.Write(b) +} + +func withLogging(inner http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + t := time.Now() + wrapper := responseWriterWrapper{w, 0, 0} + + inner(&wrapper, r) + _log.Printf("%s \"%s %s %s\" %d %d %v\n", + r.RemoteAddr, + r.Method, + r.URL.Path, + r.Proto, + wrapper.httpStatus, + wrapper.responseSize, + time.Since(t), + ) + } +}