diff options
author | 2023-02-17 12:02:29 +0100 | |
---|---|---|
committer | 2023-02-17 12:02:29 +0100 | |
commit | 68e6d08c768b789987a753d42f66caf73ce10ee1 (patch) | |
tree | 1c9eb6da6c326266d653de80684c3aec58922638 /internal/api/fileserver/servefile.go | |
parent | [bugfix] Set 'discoverable' properly on API accounts (#1511) (diff) | |
download | gotosocial-68e6d08c768b789987a753d42f66caf73ce10ee1.tar.xz |
[feature] Add a request ID and include it in logs (#1476)
This adds a lightweight form of tracing to GTS. Each incoming request is
assigned a Request ID which we then pass on and log in all our log
lines. Any function that gets called downstream from an HTTP handler
should now emit a requestID=value pair whenever it logs something.
Co-authored-by: kim <grufwub@gmail.com>
Diffstat (limited to 'internal/api/fileserver/servefile.go')
-rw-r--r-- | internal/api/fileserver/servefile.go | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/internal/api/fileserver/servefile.go b/internal/api/fileserver/servefile.go index ec70ef9ae..a344e3e53 100644 --- a/internal/api/fileserver/servefile.go +++ b/internal/api/fileserver/servefile.go @@ -77,7 +77,10 @@ func (m *Module) ServeFile(c *gin.Context) { return } - content, errWithCode := m.processor.FileGet(c.Request.Context(), authed, &apimodel.GetContentRequestForm{ + // Acquire context from gin request. + ctx := c.Request.Context() + + content, errWithCode := m.processor.FileGet(ctx, authed, &apimodel.GetContentRequestForm{ AccountID: accountID, MediaType: mediaType, MediaSize: mediaSize, @@ -101,7 +104,7 @@ func (m *Module) ServeFile(c *gin.Context) { defer func() { // Close content when we're done, catch errors. if err := content.Content.Close(); err != nil { - log.Errorf("ServeFile: error closing readcloser: %s", err) + log.Errorf(ctx, "ServeFile: error closing readcloser: %s", err) } }() @@ -130,15 +133,21 @@ func (m *Module) ServeFile(c *gin.Context) { return } - // Set known content-type and serve this file range. + // Set known content-type and serve range. c.Header("Content-Type", format) - serveFileRange(c.Writer, content.Content, rng, content.ContentLength) + serveFileRange( + c.Writer, + c.Request, + content.Content, + rng, + content.ContentLength, + ) } // serveFileRange serves the range of a file from a given source reader, without the // need for implementation of io.Seeker. Instead we read the first 'start' many bytes // into a discard reader. Code is adapted from https://codeberg.org/gruf/simplehttp. -func serveFileRange(rw http.ResponseWriter, src io.Reader, rng string, size int64) { +func serveFileRange(rw http.ResponseWriter, r *http.Request, src io.Reader, rng string, size int64) { var i int if i = strings.IndexByte(rng, '='); i < 0 { @@ -219,7 +228,7 @@ func serveFileRange(rw http.ResponseWriter, src io.Reader, rng string, size int6 // Dump the first 'start' many bytes into the void... if _, err := fastcopy.CopyN(io.Discard, src, start); err != nil { - log.Errorf("error reading from source: %v", err) + log.Errorf(r.Context(), "error reading from source: %v", err) return } @@ -239,7 +248,7 @@ func serveFileRange(rw http.ResponseWriter, src io.Reader, rng string, size int6 // Read the "seeked" source reader into destination writer. if _, err := fastcopy.Copy(rw, src); err != nil { - log.Errorf("error reading from source: %v", err) + log.Errorf(r.Context(), "error reading from source: %v", err) return } } |