ipn/ipnlocal: report Taildrive access message on failed responses

For example, if we get a 404 when downloading a file, we'll report access.

Also, to reduce verbosty of logs, this elides 0 length files.

Updates tailscale/corp#17818

Signed-off-by: Percy Wegmann <percy@tailscale.com>
pull/11531/head
Percy Wegmann 8 months ago committed by Percy Wegmann
parent 5d41259a63
commit eb42a16da9

@ -4776,8 +4776,12 @@ func (rbw *responseBodyWrapper) logAccess(err string) {
return return
} }
// Some operating systems create and copy lots of 0 length hidden files for
// tracking various states. Omit these to keep logs from being too verbose.
if rbw.contentLength > 0 {
rbw.log("tailfs: access: %s from %s to %s: status-code=%d ext=%q content-type=%q content-length=%.f tx=%.f rx=%.f err=%q", rbw.method, rbw.selfNodeKey, rbw.shareNodeKey, rbw.statusCode, rbw.fileExtension, rbw.contentType, roundTraffic(rbw.contentLength), roundTraffic(rbw.bytesTx), roundTraffic(rbw.bytesRx), err) rbw.log("tailfs: access: %s from %s to %s: status-code=%d ext=%q content-type=%q content-length=%.f tx=%.f rx=%.f err=%q", rbw.method, rbw.selfNodeKey, rbw.shareNodeKey, rbw.statusCode, rbw.fileExtension, rbw.contentType, roundTraffic(rbw.contentLength), roundTraffic(rbw.bytesTx), roundTraffic(rbw.bytesRx), err)
} }
}
// Read implements the io.Reader interface. // Read implements the io.Reader interface.
func (rbw *responseBodyWrapper) Read(b []byte) (int, error) { func (rbw *responseBodyWrapper) Read(b []byte) (int, error) {
@ -4846,7 +4850,12 @@ func (t *tailFSTransport) RoundTrip(req *http.Request) (resp *http.Response, err
ReadCloser: resp.Body, ReadCloser: resp.Body,
} }
if resp.StatusCode >= 400 {
// in case of error response, just log immediately
rbw.logAccess("")
} else {
resp.Body = &rbw resp.Body = &rbw
}
}() }()
// dialTimeout is fairly aggressive to avoid hangs on contacting offline or // dialTimeout is fairly aggressive to avoid hangs on contacting offline or

Loading…
Cancel
Save