From 9de80cd38eb8df3563e6c62a3d3d90c20d8a9449 Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Fri, 29 Sep 2023 16:25:08 -0500 Subject: [PATCH] global options --- lib/gat/gatcaddyfile/gattype.go | 42 +++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/gat/gatcaddyfile/gattype.go b/lib/gat/gatcaddyfile/gattype.go index 90198a36..13452f0d 100644 --- a/lib/gat/gatcaddyfile/gattype.go +++ b/lib/gat/gatcaddyfile/gattype.go @@ -3,6 +3,7 @@ package gatcaddyfile import ( "encoding/json" "strings" + "time" "github.com/caddyserver/caddy/v2" "github.com/caddyserver/caddy/v2/caddyconfig" @@ -11,6 +12,7 @@ import ( "gfx.cafe/gfx/pggat/lib/gat" "gfx.cafe/gfx/pggat/lib/gat/matchers" "gfx.cafe/gfx/pggat/lib/gat/ssl/servers/self_signed" + "gfx.cafe/gfx/pggat/lib/util/dur" ) func init() { @@ -23,9 +25,45 @@ func (ServerType) Setup(blocks []caddyfile.ServerBlock, m map[string]any) (*cadd var config caddy.Config var warnings []caddyconfig.Warning - var app gat.App + app := gat.App{ + Config: gat.Config{ + StatLogPeriod: dur.Duration(1 * time.Minute), + }, + } + + for i, block := range blocks { + if i == 0 && len(block.Keys) == 0 { + // global options + for _, segment := range block.Segments { + d := caddyfile.NewDispenser(segment) + if !d.Next() { + continue + } + directive := d.Val() + switch { + case directive == "stat_log_period": + if !d.NextArg() { + return nil, nil, d.ArgErr() + } + + period, err := time.ParseDuration(d.Val()) + if err != nil { + return nil, nil, d.WrapErr(err) + } + + app.StatLogPeriod = dur.Duration(period) + default: + return nil, nil, d.SyntaxErr("global options") + } + + if d.CountRemainingArgs() > 0 { + return nil, nil, d.ArgErr() + } + } + + continue + } - for _, block := range blocks { var server gat.ServerConfig server.Listen = make([]gat.ListenerConfig, 0, len(block.Keys)) -- GitLab