diff options
author | 2023-02-17 12:02:29 +0100 | |
---|---|---|
committer | 2023-02-17 12:02:29 +0100 | |
commit | 68e6d08c768b789987a753d42f66caf73ce10ee1 (patch) | |
tree | 1c9eb6da6c326266d653de80684c3aec58922638 /internal/web | |
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/web')
-rw-r--r-- | internal/web/assets.go | 5 | ||||
-rw-r--r-- | internal/web/etag.go | 2 | ||||
-rw-r--r-- | internal/web/rss.go | 12 | ||||
-rw-r--r-- | internal/web/web.go | 2 |
4 files changed, 13 insertions, 8 deletions
diff --git a/internal/web/assets.go b/internal/web/assets.go index 31d09f4be..8f662017a 100644 --- a/internal/web/assets.go +++ b/internal/web/assets.go @@ -102,6 +102,9 @@ func (m *Module) getAssetETag(filePath string, fs http.FileSystem) (string, erro // package along with the other middlewares func (m *Module) assetsCacheControlMiddleware(fs http.FileSystem) gin.HandlerFunc { return func(c *gin.Context) { + // Acquire context from gin request. + ctx := c.Request.Context() + // set this Cache-Control header to instruct clients to validate the response with us // before each reuse (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) c.Header(cacheControlHeader, cacheControlNoCache) @@ -118,7 +121,7 @@ func (m *Module) assetsCacheControlMiddleware(fs http.FileSystem) gin.HandlerFun // either fetch etag from ttlcache or generate it eTag, err := m.getAssetETag(assetFilePath, fs) if err != nil { - log.Errorf("error getting ETag for %s: %s", assetFilePath, err) + log.Errorf(ctx, "error getting ETag for %s: %s", assetFilePath, err) return } diff --git a/internal/web/etag.go b/internal/web/etag.go index 72c3bb762..096aa9c83 100644 --- a/internal/web/etag.go +++ b/internal/web/etag.go @@ -34,7 +34,7 @@ func newETagCache() cache.Cache[string, eTagCacheEntry] { eTagCache := cache.New[string, eTagCacheEntry](0, 1000, 0) eTagCache.SetTTL(time.Hour, false) if !eTagCache.Start(time.Minute) { - log.Panic("could not start eTagCache") + log.Panic(nil, "could not start eTagCache") } return eTagCache } diff --git a/internal/web/rss.go b/internal/web/rss.go index 757c3ffb5..dccb49542 100644 --- a/internal/web/rss.go +++ b/internal/web/rss.go @@ -61,14 +61,16 @@ func (m *Module) GetRSSETag(urlPath string, lastModified time.Time, getRSSFeed f return eTag, nil } -func extractIfModifiedSince(header string) time.Time { - if header == "" { +func extractIfModifiedSince(r *http.Request) time.Time { + hdr := r.Header.Get(ifModifiedSinceHeader) + + if hdr == "" { return time.Time{} } - t, err := http.ParseTime(header) + t, err := http.ParseTime(hdr) if err != nil { - log.Errorf("couldn't parse if-modified-since %s: %s", header, err) + log.Errorf(r.Context(), "couldn't parse if-modified-since %s: %s", hdr, err) return time.Time{} } @@ -95,7 +97,7 @@ func (m *Module) rssFeedGETHandler(c *gin.Context) { } ifNoneMatch := c.Request.Header.Get(ifNoneMatchHeader) - ifModifiedSince := extractIfModifiedSince(c.Request.Header.Get(ifModifiedSinceHeader)) + ifModifiedSince := extractIfModifiedSince(c.Request) getRssFeed, accountLastPostedPublic, errWithCode := m.processor.AccountGetRSSFeedForUsername(ctx, username) if errWithCode != nil { diff --git a/internal/web/web.go b/internal/web/web.go index 0fc1644c8..08bac4583 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -79,7 +79,7 @@ func (m *Module) Route(r router.Router, mi ...gin.HandlerFunc) { // so that they can use the same cache control middleware. webAssetsAbsFilePath, err := filepath.Abs(config.GetWebAssetBaseDir()) if err != nil { - log.Panicf("error getting absolute path of assets dir: %s", err) + log.Panicf(nil, "error getting absolute path of assets dir: %s", err) } fs := fileSystem{http.Dir(webAssetsAbsFilePath)} assetsGroup := r.AttachGroup(assetsPathPrefix) |