webhook/signals.go
2020-12-27 23:48:27 -06:00

63 lines
1.2 KiB
Go

// +build !windows
package main
import (
"log"
"os"
"os/signal"
"syscall"
"github.com/adnanh/webhook/internal/service"
)
func setupSignals(svc *service.Service) {
log.Printf("setting up os signal watcher\n")
signals = make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGUSR1)
signal.Notify(signals, syscall.SIGHUP)
signal.Notify(signals, syscall.SIGTERM)
signal.Notify(signals, os.Interrupt)
go watchForSignals(svc)
}
func watchForSignals(svc *service.Service) {
log.Println("os signal watcher ready")
for {
sig := <-signals
switch sig {
case syscall.SIGUSR1:
log.Println("caught USR1 signal")
reloadAllHooks()
case syscall.SIGHUP:
log.Println("caught HUP signal")
reloadAllHooks()
if svc.TLSEnabled() {
log.Println("attempting to reload TLS key pair")
err := svc.ReloadTLSKeyPair()
if err != nil {
log.Printf("failed to reload TLS key pair: %s\n", err)
} else {
log.Println("successfully reloaded TLS key pair")
}
}
case os.Interrupt, syscall.SIGTERM:
log.Printf("caught %s signal; exiting\n", sig)
err := svc.DeletePIDFile()
if err != nil {
log.Print(err)
}
os.Exit(0)
default:
log.Printf("caught unhandled signal %+v\n", sig)
}
}
}