From a081feb6b929b52fb405c99dfadb51559c59061f Mon Sep 17 00:00:00 2001 From: Nicholas Wiersma Date: Wed, 15 Nov 2023 14:47:09 +0200 Subject: [PATCH 1/2] fix: minor issues --- http/middleware/middleware.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/http/middleware/middleware.go b/http/middleware/middleware.go index d8d5c67..6f0764e 100644 --- a/http/middleware/middleware.go +++ b/http/middleware/middleware.go @@ -2,6 +2,9 @@ package middleware import ( + "bufio" + "errors" + "net" "net/http" "github.com/hamba/logger/v2" @@ -63,7 +66,7 @@ func RequestID() func(http.Handler) http.Handler { func WithStats(name string, s *statter.Statter, h http.Handler) http.Handler { prometheus.RegisterHistogram(s, "response.size", - []string{"handler", "code"}, + []string{"handler", "code", "code-group"}, []float64{200, 500, 900, 1500, 5000, 10000}, "The size of a response in bytes", ) @@ -83,8 +86,8 @@ func WithStats(name string, s *statter.Statter, h http.Handler) http.Handler { h.ServeHTTP(wrap, req) dur := mono.Since(start) - t = append(t, tags.StatusCode("status-group", wrap.Status())) - t = append(t, tags.Int("status-code", wrap.Status())) + t = append(t, tags.StatusCode("code-group", wrap.Status())) + t = append(t, tags.Int("code", wrap.Status())) s.Counter("responses", t...).Inc(1) s.Histogram("response.size", t...).Observe(float64(wrap.BytesWritten())) s.Timing("response.duration", t...).Observe(dur) @@ -142,6 +145,17 @@ func (rw *responseWrapper) BytesWritten() int64 { return rw.bytes } +// Hijack returns a hijacked connection or an error. +// +// This is required by some websocket libraries. +func (rw *responseWrapper) Hijack() (net.Conn, *bufio.ReadWriter, error) { + h, ok := rw.ResponseWriter.(http.Hijacker) + if !ok { + return nil, nil, errors.New("hijacker not supported") + } + return h.Hijack() +} + // Unwrap returns the underlying response writer. // This is used by http.ResponseController to find the first // response writer that implements an interface. From 7b398d970be788407ea7f4ebdcfd0b3794b9810a Mon Sep 17 00:00:00 2001 From: Nicholas Wiersma Date: Wed, 15 Nov 2023 14:51:23 +0200 Subject: [PATCH 2/2] fix --- http/middleware/middleware_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/http/middleware/middleware_test.go b/http/middleware/middleware_test.go index 8eb444b..2a1ee02 100644 --- a/http/middleware/middleware_test.go +++ b/http/middleware/middleware_test.go @@ -5,6 +5,7 @@ import ( "errors" "net/http" "net/http/httptest" + "sort" "testing" "time" @@ -111,7 +112,10 @@ func TestStats(t *testing.T) { m := &mockReporter{} m.On("Counter", "requests", int64(1), test.wantTags) - wantTags := append(test.wantTags, [][2]string{{"status-code", "305"}, {"status-group", "3xx"}}...) + wantTags := append(test.wantTags, [][2]string{{"code", "305"}, {"code-group", "3xx"}}...) + sort.Slice(wantTags, func(i, j int) bool { + return wantTags[i][0] < wantTags[j][0] + }) m.On("Counter", "responses", int64(1), wantTags) m.On("Histogram", "response.size", wantTags).Return(func(_ float64) {}) m.On("Timing", "response.duration", wantTags).Return(func(_ time.Duration) {})