add systemd-socket activation

This commit is contained in:
2023-12-15 19:20:33 +01:00
parent 1759092b57
commit 98b4e8f818
3 changed files with 59 additions and 27 deletions

1
go.mod
View File

@@ -5,6 +5,7 @@ go 1.21
require (
entgo.io/ent v0.12.5
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b
github.com/coreos/go-systemd/v22 v22.5.0
github.com/go-chi/chi/v5 v5.0.10
github.com/go-chi/render v1.0.3
github.com/jackc/pgx/v4 v4.18.1

3
go.sum
View File

@@ -21,6 +21,8 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -36,6 +38,7 @@ github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12f
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=

28
main.go
View File

@@ -6,6 +6,7 @@ import (
"entgo.io/ent/dialect/sql"
"flag"
"fmt"
"github.com/coreos/go-systemd/v22/activation"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/render"
@@ -98,6 +99,32 @@ func main() {
log.Info("Start listening...")
sockets := make([]net.Listener, 0)
// handle systemd socket activation
listeners, err := activation.Listeners()
if err != nil {
panic(err)
}
if len(listeners) > 0 {
for _, l := range listeners {
log.Infof("Listening on %s", l.Addr())
if err != nil {
log.Panicf("failure listing on socket %s: %v", l, err)
}
sockets = append(sockets, l)
l := l
go func() {
srv := &http.Server{
ReadTimeout: time.Duration(conf.Httpd.Timeout.Read) * time.Second,
WriteTimeout: time.Duration(conf.Httpd.Timeout.Write) * time.Second,
IdleTimeout: time.Duration(conf.Httpd.Timeout.Idle) * time.Second,
Handler: r,
}
_ = srv.Serve(l)
}()
}
} else { // handle config if not systemd-socket activated
for _, l := range conf.Httpd.Listen {
if l.Socket != "" {
sL, err := net.Listen("unix", l.Socket)
@@ -139,6 +166,7 @@ func main() {
}(l)
}
}
}
killLoop:
for {