diff --git a/lib/gat/gatcaddyfile/critic.go b/lib/gat/gatcaddyfile/critic.go new file mode 100644 index 0000000000000000000000000000000000000000..c3411b20fe75c3d14c9d6b89f53bb7d6d87e7271 --- /dev/null +++ b/lib/gat/gatcaddyfile/critic.go @@ -0,0 +1,25 @@ +package gatcaddyfile + +import ( + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/caddyconfig" + "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" + + "gfx.cafe/gfx/pggat/lib/gat/handlers/pool/critics/latency" +) + +func init() { + RegisterDirective(Critic, "latency", func(d *caddyfile.Dispenser, warnings *[]caddyconfig.Warning) (caddy.Module, error) { + if !d.NextArg() { + return nil, d.ArgErr() + } + threshold, err := caddy.ParseDuration(d.Val()) + if err != nil { + return nil, d.WrapErr(err) + } + + return &latency.Critic{ + Threshold: caddy.Duration(threshold), + }, nil + }) +} diff --git a/lib/gat/gatcaddyfile/pool.go b/lib/gat/gatcaddyfile/pool.go index 78938db4b35ff9c6913b3f4a093efef0a060a61b..c43682431529698df15cdea966ac2cc7964dd840 100644 --- a/lib/gat/gatcaddyfile/pool.go +++ b/lib/gat/gatcaddyfile/pool.go @@ -146,6 +146,22 @@ func init() { } module.TrackedParameters = append(module.TrackedParameters, strutil.MakeCIString(d.Val())) + case "penalize": + if !d.NextArg() { + return nil, d.ArgErr() + } + + critic, err := UnmarshalDirectiveJSONModuleObject( + d, + Critic, + "critic", + warnings, + ) + if err != nil { + return nil, err + } + + module.RawCritics = append(module.RawCritics, critic) default: return nil, d.ArgErr() } @@ -221,6 +237,22 @@ func init() { } module.TrackedParameters = append(module.TrackedParameters, strutil.MakeCIString(d.Val())) + case "penalize": + if !d.NextArg() { + return nil, d.ArgErr() + } + + critic, err := UnmarshalDirectiveJSONModuleObject( + d, + Critic, + "critic", + warnings, + ) + if err != nil { + return nil, err + } + + module.RawCritics = append(module.RawCritics, critic) default: return nil, d.ArgErr() } diff --git a/lib/gat/gatcaddyfile/unmarshallers.go b/lib/gat/gatcaddyfile/unmarshallers.go index dff13ab03dabff03e7551e73e7f99222380bd194..a9308a297135ae8e5da353a9e8273c84065c1142 100644 --- a/lib/gat/gatcaddyfile/unmarshallers.go +++ b/lib/gat/gatcaddyfile/unmarshallers.go @@ -17,6 +17,7 @@ const ( Matcher = "pggat.matchers" Pool = "pggat.handlers.pool.pools" Pooler = "pggat.handlers.pool.poolers" + Critic = "pggat.handlers.pool.critics" SSLServer = "pggat.ssl.servers" SSLClient = "pggat.ssl.clients" )