account for streaming

This commit is contained in:
pascal
2026-03-09 16:08:30 +01:00
parent d9418ddc1e
commit 1aa1eef2c5
2 changed files with 23 additions and 4 deletions

View File

@@ -32,6 +32,14 @@ func (l *Logger) Middleware(next http.Handler) http.Handler {
status: http.StatusOK,
}
var bytesRead int64
if r.Body != nil {
r.Body = &bodyCounter{
ReadCloser: r.Body,
bytesRead: &bytesRead,
}
}
// Resolve the source IP using trusted proxy configuration before passing
// the request on, as the proxy will modify forwarding headers.
sourceIp := extractSourceIP(r, l.trustedProxies)
@@ -53,10 +61,7 @@ func (l *Logger) Middleware(next http.Handler) http.Handler {
host = r.Host
}
bytesUpload := r.ContentLength
if bytesUpload < 0 {
bytesUpload = 0
}
bytesUpload := bytesRead
bytesDownload := sw.bytesWritten
entry := logEntry{

View File

@@ -1,6 +1,8 @@
package accesslog
import (
"io"
"github.com/netbirdio/netbird/proxy/internal/responsewriter"
)
@@ -23,3 +25,15 @@ func (w *statusWriter) Write(b []byte) (int, error) {
w.bytesWritten += int64(n)
return n, err
}
// bodyCounter wraps an io.ReadCloser and counts bytes read from the request body.
type bodyCounter struct {
io.ReadCloser
bytesRead *int64
}
func (bc *bodyCounter) Read(p []byte) (int, error) {
n, err := bc.ReadCloser.Read(p)
*bc.bytesRead += int64(n)
return n, err
}