From 7d6766adc682e30bfbb2f1d4650d92f39cd96d67 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Wed, 12 Feb 2020 05:45:00 +0100 Subject: [PATCH] fix: erroneous high value for gateway received bytes metrics (#8978) http.Request.ContentLength can be negative, which affects the gateway_s3_bytes_received value in Prometheus output. The commit only increases the value of the total received bytes in gateway mode when r.ContentLength is greater than zero. --- cmd/gateway-common.go | 8 ++++++-- cmd/gateway-metrics.go | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/cmd/gateway-common.go b/cmd/gateway-common.go index fd24b4046..3171b0705 100644 --- a/cmd/gateway-common.go +++ b/cmd/gateway-common.go @@ -434,7 +434,9 @@ func (m MetricsTransport) RoundTrip(r *http.Request) (*http.Response, error) { metered := shouldMeterRequest(r) if metered && (r.Method == http.MethodGet || r.Method == http.MethodHead) { m.Metrics.IncRequests(r.Method) - m.Metrics.IncBytesSent(r.ContentLength) + if r.ContentLength > 0 { + m.Metrics.IncBytesSent(uint64(r.ContentLength)) + } } // Make the request to the server. resp, err := m.Transport.RoundTrip(r) @@ -442,7 +444,9 @@ func (m MetricsTransport) RoundTrip(r *http.Request) (*http.Response, error) { return nil, err } if metered && (r.Method == http.MethodGet || r.Method == http.MethodHead) { - m.Metrics.IncBytesReceived(resp.ContentLength) + if r.ContentLength > 0 { + m.Metrics.IncBytesReceived(uint64(resp.ContentLength)) + } } return resp, nil } diff --git a/cmd/gateway-metrics.go b/cmd/gateway-metrics.go index 183b81bd4..73160522e 100644 --- a/cmd/gateway-metrics.go +++ b/cmd/gateway-metrics.go @@ -37,8 +37,8 @@ type Metrics struct { } // IncBytesReceived - Increase total bytes received from gateway backend -func (s *Metrics) IncBytesReceived(n int64) { - s.bytesReceived.Add(uint64(n)) +func (s *Metrics) IncBytesReceived(n uint64) { + s.bytesReceived.Add(n) } // GetBytesReceived - Get total bytes received from gateway backend @@ -47,8 +47,8 @@ func (s *Metrics) GetBytesReceived() uint64 { } // IncBytesSent - Increase total bytes sent to gateway backend -func (s *Metrics) IncBytesSent(n int64) { - s.bytesSent.Add(uint64(n)) +func (s *Metrics) IncBytesSent(n uint64) { + s.bytesSent.Add(n) } // GetBytesSent - Get total bytes received from gateway backend