mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
40 lines
944 B
Go
40 lines
944 B
Go
package accesslog
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/netbirdio/netbird/proxy/internal/responsewriter"
|
|
)
|
|
|
|
// statusWriter captures the HTTP status code and bytes written from responses.
|
|
// It embeds responsewriter.PassthroughWriter which handles all the optional
|
|
// interfaces (Hijacker, Flusher, Pusher) automatically.
|
|
type statusWriter struct {
|
|
*responsewriter.PassthroughWriter
|
|
status int
|
|
bytesWritten int64
|
|
}
|
|
|
|
func (w *statusWriter) WriteHeader(status int) {
|
|
w.status = status
|
|
w.PassthroughWriter.WriteHeader(status)
|
|
}
|
|
|
|
func (w *statusWriter) Write(b []byte) (int, error) {
|
|
n, err := w.PassthroughWriter.Write(b)
|
|
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
|
|
}
|