summaryrefslogtreecommitdiff
path: root/internal/api/fileserver
diff options
context:
space:
mode:
authorLibravatar Daenney <daenney@users.noreply.github.com>2023-02-17 12:02:29 +0100
committerLibravatar GitHub <noreply@github.com>2023-02-17 12:02:29 +0100
commit68e6d08c768b789987a753d42f66caf73ce10ee1 (patch)
tree1c9eb6da6c326266d653de80684c3aec58922638 /internal/api/fileserver
parent[bugfix] Set 'discoverable' properly on API accounts (#1511) (diff)
downloadgotosocial-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')
-rw-r--r--internal/api/fileserver/fileserver_test.go2
-rw-r--r--internal/api/fileserver/servefile.go23
2 files changed, 17 insertions, 8 deletions
diff --git a/internal/api/fileserver/fileserver_test.go b/internal/api/fileserver/fileserver_test.go
index 01e090cc7..5b139454e 100644
--- a/internal/api/fileserver/fileserver_test.go
+++ b/internal/api/fileserver/fileserver_test.go
@@ -99,7 +99,7 @@ func (suite *FileserverTestSuite) SetupTest() {
func (suite *FileserverTestSuite) TearDownSuite() {
if err := suite.db.Stop(context.Background()); err != nil {
- log.Panicf("error closing db connection: %s", err)
+ log.Panicf(nil, "error closing db connection: %s", err)
}
}
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
}
}