add systemd-socket activation
This commit is contained in:
82
main.go
82
main.go
@@ -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,14 +99,21 @@ func main() {
|
||||
|
||||
log.Info("Start listening...")
|
||||
sockets := make([]net.Listener, 0)
|
||||
for _, l := range conf.Httpd.Listen {
|
||||
if l.Socket != "" {
|
||||
sL, err := net.Listen("unix", l.Socket)
|
||||
log.Infof("Listening on %s", l.Socket)
|
||||
|
||||
// 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.Socket, err)
|
||||
log.Panicf("failure listing on socket %s: %v", l, err)
|
||||
}
|
||||
sockets = append(sockets, sL)
|
||||
sockets = append(sockets, l)
|
||||
l := l
|
||||
go func() {
|
||||
srv := &http.Server{
|
||||
ReadTimeout: time.Duration(conf.Httpd.Timeout.Read) * time.Second,
|
||||
@@ -113,30 +121,50 @@ func main() {
|
||||
IdleTimeout: time.Duration(conf.Httpd.Timeout.Idle) * time.Second,
|
||||
Handler: r,
|
||||
}
|
||||
_ = srv.Serve(sL)
|
||||
_ = srv.Serve(l)
|
||||
}()
|
||||
} else {
|
||||
log.Infof("Listening on %s:%d", l.Host, l.Port)
|
||||
tL, err := net.Listen("tcp", fmt.Sprintf("%s:%d", l.Host, l.Port))
|
||||
if err != nil {
|
||||
log.Panicf("Failure listing on %s:%d: %v", l.Host, l.Port, err)
|
||||
}
|
||||
go func(l struct {
|
||||
Socket string
|
||||
Host string
|
||||
Port int
|
||||
}) {
|
||||
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,
|
||||
}
|
||||
err = srv.Serve(tL)
|
||||
}
|
||||
} else { // handle config if not systemd-socket activated
|
||||
for _, l := range conf.Httpd.Listen {
|
||||
if l.Socket != "" {
|
||||
sL, err := net.Listen("unix", l.Socket)
|
||||
log.Infof("Listening on %s", l.Socket)
|
||||
if err != nil {
|
||||
log.Fatalf("Failure serving on %s:%d: %v", l.Host, l.Port, err)
|
||||
log.Panicf("Failure listing on socket %s: %v", l.Socket, err)
|
||||
}
|
||||
}(l)
|
||||
sockets = append(sockets, sL)
|
||||
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(sL)
|
||||
}()
|
||||
} else {
|
||||
log.Infof("Listening on %s:%d", l.Host, l.Port)
|
||||
tL, err := net.Listen("tcp", fmt.Sprintf("%s:%d", l.Host, l.Port))
|
||||
if err != nil {
|
||||
log.Panicf("Failure listing on %s:%d: %v", l.Host, l.Port, err)
|
||||
}
|
||||
go func(l struct {
|
||||
Socket string
|
||||
Host string
|
||||
Port int
|
||||
}) {
|
||||
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,
|
||||
}
|
||||
err = srv.Serve(tL)
|
||||
if err != nil {
|
||||
log.Fatalf("Failure serving on %s:%d: %v", l.Host, l.Port, err)
|
||||
}
|
||||
}(l)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user