From 11f7a37bd625aadd70f861653dba5c58073acad5 Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Wed, 27 Sep 2023 19:17:03 -0500 Subject: [PATCH] logger loop --- lib/gat/app.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/gat/app.go b/lib/gat/app.go index b92ddac7..deb08fb6 100644 --- a/lib/gat/app.go +++ b/lib/gat/app.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net" + "time" "github.com/caddyserver/caddy/v2" "go.uber.org/zap" @@ -13,6 +14,7 @@ import ( "gfx.cafe/gfx/pggat/lib/bouncer/frontends/v0" "gfx.cafe/gfx/pggat/lib/fed" packets "gfx.cafe/gfx/pggat/lib/fed/packets/v3.0" + "gfx.cafe/gfx/pggat/lib/gat/metrics" "gfx.cafe/gfx/pggat/lib/middleware/interceptor" "gfx.cafe/gfx/pggat/lib/middleware/middlewares/unterminate" "gfx.cafe/gfx/pggat/lib/perror" @@ -39,6 +41,8 @@ type App struct { keys maps.RWLocked[[8]byte, *Pool] + closed chan struct{} + log *zap.Logger } @@ -183,7 +187,33 @@ func (T *App) acceptFrom(listener *Listener) bool { return true } +func (T *App) statLogLoop() { + t := time.NewTicker(T.StatLogPeriod.Duration()) + defer t.Stop() + + var stats metrics.Server + for { + select { + case <-t.C: + for _, server := range T.servers { + for _, route := range server.routes { + route.provide.ReadMetrics(&stats.Pools) + } + } + T.log.Info(stats.String()) + stats.Clear() + case <-T.closed: + return + } + } +} + func (T *App) Start() error { + T.closed = make(chan struct{}) + if T.StatLogPeriod != 0 { + go T.statLogLoop() + } + // start listeners for _, listener := range T.listen { if err := listener.Start(); err != nil { @@ -203,6 +233,8 @@ func (T *App) Start() error { } func (T *App) Stop() error { + close(T.closed) + // stop listeners for _, listener := range T.listen { if err := listener.Stop(); err != nil { -- GitLab