Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package gat
import (
"github.com/caddyserver/caddy/v2"
"gfx.cafe/gfx/pggat/lib/util/dur"
"gfx.cafe/gfx/pggat/lib/util/maps"
)
type Config struct {
StatLogPeriod dur.Duration `json:"stat_log_period"`
Listen []ListenerConfig `json:"listen"`
Servers []ServerConfig `json:"servers"`
}
func init() {
caddy.RegisterModule((*App)(nil))
}
type App struct {
Config
listen []*Listener
servers []*Server
keys maps.RWLocked[[8]byte, *Pool]
}
func (T *App) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "pggat",
New: func() caddy.Module {
return new(App)
},
}
}
func (T *App) Provision(ctx caddy.Context) error {
T.listen = make([]*Listener, 0, len(T.Listen))
for _, config := range T.Listen {
listener := &Listener{
ListenerConfig: config,
}
if err := listener.Provision(ctx); err != nil {
return err
}
T.listen = append(T.listen, listener)
}
T.servers = make([]*Server, 0, len(T.Servers))
for _, config := range T.Servers {
server := &Server{
ServerConfig: config,
}
if err := server.Provision(ctx); err != nil {
return err
}
T.servers = append(T.servers, server)
}
return nil
}
func (T *App) Start() error {
// start listeners
for _, listener := range T.listen {
if err := listener.Start(); err != nil {
return err
}
}
return nil
}
func (T *App) Stop() error {
// stop listeners
for _, listener := range T.listen {
if err := listener.Stop(); err != nil {
return err
}
}
return nil
}
var _ caddy.Module = (*App)(nil)
var _ caddy.Provisioner = (*App)(nil)
var _ caddy.App = (*App)(nil)