diff options
author | 2023-02-17 12:02:29 +0100 | |
---|---|---|
committer | 2023-02-17 12:02:29 +0100 | |
commit | 68e6d08c768b789987a753d42f66caf73ce10ee1 (patch) | |
tree | 1c9eb6da6c326266d653de80684c3aec58922638 /internal/config | |
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/config')
-rw-r--r-- | internal/config/config.go | 2 | ||||
-rw-r--r-- | internal/config/defaults.go | 2 | ||||
-rw-r--r-- | internal/config/flags.go | 2 | ||||
-rw-r--r-- | internal/config/helpers.gen.go | 25 | ||||
-rw-r--r-- | internal/config/testdata/test.yaml | 11 | ||||
-rw-r--r-- | internal/config/validate.go | 2 |
6 files changed, 42 insertions, 2 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index 516fb11d6..1dea90788 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -147,6 +147,8 @@ type Configuration struct { AdminAccountPassword string `name:"password" usage:"the password to set for this account"` AdminTransPath string `name:"path" usage:"the path of the file to import from/export to"` AdminMediaPruneDryRun bool `name:"dry-run" usage:"perform a dry run and only log number of items eligible for pruning"` + + RequestIDHeader string `name:"request-id-header" usage:"Header to extract the Request ID from. Eg.,'X-Request-Id'"` } type CacheConfiguration struct { diff --git a/internal/config/defaults.go b/internal/config/defaults.go index 709f063ca..528419e97 100644 --- a/internal/config/defaults.go +++ b/internal/config/defaults.go @@ -163,4 +163,6 @@ var Defaults = Configuration{ }, AdminMediaPruneDryRun: true, + + RequestIDHeader: "X-Request-Id", } diff --git a/internal/config/flags.go b/internal/config/flags.go index d8c31368b..3ef44bf62 100644 --- a/internal/config/flags.go +++ b/internal/config/flags.go @@ -140,6 +140,8 @@ func (s *ConfigState) AddServerFlags(cmd *cobra.Command) { cmd.Flags().Int(AdvancedRateLimitRequestsFlag(), cfg.AdvancedRateLimitRequests, fieldtag("AdvancedRateLimitRequests", "usage")) cmd.Flags().Int(AdvancedThrottlingMultiplierFlag(), cfg.AdvancedThrottlingMultiplier, fieldtag("AdvancedThrottlingMultiplier", "usage")) cmd.Flags().Duration(AdvancedThrottlingRetryAfterFlag(), cfg.AdvancedThrottlingRetryAfter, fieldtag("AdvancedThrottlingRetryAfter", "usage")) + + cmd.Flags().String(RequestIDHeaderFlag(), cfg.RequestIDHeader, fieldtag("RequestIDHeader", "usage")) }) } diff --git a/internal/config/helpers.gen.go b/internal/config/helpers.gen.go index 64e7d02f7..1a4c14a82 100644 --- a/internal/config/helpers.gen.go +++ b/internal/config/helpers.gen.go @@ -2977,3 +2977,28 @@ func GetAdminMediaPruneDryRun() bool { return global.GetAdminMediaPruneDryRun() // SetAdminMediaPruneDryRun safely sets the value for global configuration 'AdminMediaPruneDryRun' field func SetAdminMediaPruneDryRun(v bool) { global.SetAdminMediaPruneDryRun(v) } + +// GetRequestIDHeader safely fetches the Configuration value for state's 'RequestIDHeader' field +func (st *ConfigState) GetRequestIDHeader() (v string) { + st.mutex.Lock() + v = st.config.RequestIDHeader + st.mutex.Unlock() + return +} + +// SetRequestIDHeader safely sets the Configuration value for state's 'RequestIDHeader' field +func (st *ConfigState) SetRequestIDHeader(v string) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.RequestIDHeader = v + st.reloadToViper() +} + +// RequestIDHeaderFlag returns the flag name for the 'RequestIDHeader' field +func RequestIDHeaderFlag() string { return "request-id-header" } + +// GetRequestIDHeader safely fetches the value for global configuration 'RequestIDHeader' field +func GetRequestIDHeader() string { return global.GetRequestIDHeader() } + +// SetRequestIDHeader safely sets the value for global configuration 'RequestIDHeader' field +func SetRequestIDHeader(v string) { global.SetRequestIDHeader(v) } diff --git a/internal/config/testdata/test.yaml b/internal/config/testdata/test.yaml index 87fe105d2..c2d902944 100644 --- a/internal/config/testdata/test.yaml +++ b/internal/config/testdata/test.yaml @@ -415,4 +415,13 @@ cache: gts: account-max-size: 99 account-ttl: "3h" - account-sweep-freq: "1s"
\ No newline at end of file + account-sweep-freq: "1s" + +################################## +##### OBSERVABILITY SETTINGS ##### +################################## + +# String. Header name to use to extract a request or trace ID from. Typically set by a +# loadbalancer or proxy. +# Default: "X-Request-Id" +request-id-header: "X-Trace-Id" diff --git a/internal/config/validate.go b/internal/config/validate.go index 765739d6c..866ec1be1 100644 --- a/internal/config/validate.go +++ b/internal/config/validate.go @@ -55,7 +55,7 @@ func Validate() error { // no problem break case "http": - log.Warnf("%s was set to 'http'; this should *only* be used for debugging and tests!", ProtocolFlag()) + log.Warnf(nil, "%s was set to 'http'; this should *only* be used for debugging and tests!", ProtocolFlag()) case "": errs = append(errs, fmt.Errorf("%s must be set", ProtocolFlag())) default: |