mirror of
https://github.com/adnanh/webhook.git
synced 2025-10-04 13:41:03 +00:00
feat: add support for systemd socket activation
If webhook has been launched via systemd socket activation, simply use the systemd-provided socket rather than opening our own.
This commit is contained in:
parent
9cd78fca1a
commit
b00e93210e
10 changed files with 455 additions and 0 deletions
|
@ -6,6 +6,7 @@ package main
|
|||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/coreos/go-systemd/v22/activation"
|
||||
"net"
|
||||
)
|
||||
|
||||
|
@ -14,6 +15,25 @@ func platformFlags() {
|
|||
}
|
||||
|
||||
func trySocketListener() (net.Listener, error) {
|
||||
// first check whether we have any sockets from systemd
|
||||
listeners, err := activation.Listeners()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to retrieve sockets from systemd: %w", err)
|
||||
}
|
||||
numListeners := len(listeners)
|
||||
if numListeners > 1 {
|
||||
return nil, fmt.Errorf("received %d sockets from systemd, but only 1 is supported", numListeners)
|
||||
}
|
||||
if numListeners == 1 {
|
||||
sockAddr := listeners[0].Addr()
|
||||
if sockAddr.Network() == "tcp" {
|
||||
addr = sockAddr.String()
|
||||
} else {
|
||||
addr = fmt.Sprintf("{%s:%s}", sockAddr.Network(), sockAddr.String())
|
||||
}
|
||||
return listeners[0], nil
|
||||
}
|
||||
// if we get to here, we got no sockets from systemd, so check -socket flag
|
||||
if socket != "" {
|
||||
addr = fmt.Sprintf("{unix:%s}", socket)
|
||||
return net.Listen("unix", socket)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue