summaryrefslogtreecommitdiff
path: root/internal/config
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/config
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/config')
-rw-r--r--internal/config/config.go2
-rw-r--r--internal/config/defaults.go2
-rw-r--r--internal/config/flags.go2
-rw-r--r--internal/config/helpers.gen.go25
-rw-r--r--internal/config/testdata/test.yaml11
-rw-r--r--internal/config/validate.go2
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: