diff options
author | Nikolai K <[email protected]> | 2024-11-12 00:42:50 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2024-11-11 16:42:50 -0700 |
commit | b183aec83c2d467706583ad9ea0e4e9c56077c55 (patch) | |
tree | 62bbfeedc64b82560c97b350e4855fa4f9113e1b /caddyconfig/httpcaddyfile/builtins.go | |
parent | 825fe48e0654dc6e4e065df364a51ea79488e44b (diff) | |
download | caddy-b183aec83c2d467706583ad9ea0e4e9c56077c55.tar.gz caddy-b183aec83c2d467706583ad9ea0e4e9c56077c55.zip |
httpcaddyfile: Implement log `sampling` config (#6682)
* Allow log sampling configuration from Caddyfile
* Add log sampling adapt tests
Diffstat (limited to 'caddyconfig/httpcaddyfile/builtins.go')
-rw-r--r-- | caddyconfig/httpcaddyfile/builtins.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/caddyconfig/httpcaddyfile/builtins.go b/caddyconfig/httpcaddyfile/builtins.go index 165c66b25..eca6a2d64 100644 --- a/caddyconfig/httpcaddyfile/builtins.go +++ b/caddyconfig/httpcaddyfile/builtins.go @@ -981,6 +981,50 @@ func parseLogHelper(h Helper, globalLogNames map[string]struct{}) ([]ConfigValue } cl.WriterRaw = caddyconfig.JSONModuleObject(wo, "output", moduleName, h.warnings) + case "sampling": + d := h.Dispenser.NewFromNextSegment() + for d.NextArg() { + // consume any tokens on the same line, if any. + } + + sampling := &caddy.LogSampling{} + for nesting := d.Nesting(); d.NextBlock(nesting); { + subdir := d.Val() + switch subdir { + case "interval": + if !d.NextArg() { + return nil, d.ArgErr() + } + interval, err := time.ParseDuration(d.Val() + "ns") + if err != nil { + return nil, d.Errf("failed to parse interval: %v", err) + } + sampling.Interval = interval + case "first": + if !d.NextArg() { + return nil, d.ArgErr() + } + first, err := strconv.Atoi(d.Val()) + if err != nil { + return nil, d.Errf("failed to parse first: %v", err) + } + sampling.First = first + case "thereafter": + if !d.NextArg() { + return nil, d.ArgErr() + } + thereafter, err := strconv.Atoi(d.Val()) + if err != nil { + return nil, d.Errf("failed to parse thereafter: %v", err) + } + sampling.Thereafter = thereafter + default: + return nil, d.Errf("unrecognized subdirective: %s", subdir) + } + } + + cl.Sampling = sampling + case "core": if !h.NextArg() { return nil, h.ArgErr() |