feat: correctly handle shutdown signals

Add a new method to the application startup to listen for OS shutdown
signals and handle them appropriately. A shutdown signal will cause the
app to exit immediately.
Use correct syntax for the `ENTRYPOINT` field in the Dockerfile to ensure
that OS signals get passed down to the running application.
This commit is contained in:
Hector 2022-02-20 08:17:06 +00:00
parent aedef536dd
commit f6e328a0aa
2 changed files with 20 additions and 4 deletions

View file

@ -20,4 +20,4 @@ WORKDIR /app
# Copy compiled binary to release image
COPY --from=build /build/src/exporter /app/fail2ban-prometheus-exporter
ENTRYPOINT /app/fail2ban-prometheus-exporter
ENTRYPOINT ["/app/fail2ban-prometheus-exporter"]

View file

@ -6,11 +6,13 @@ import (
"fail2ban-prometheus-exporter/collector/f2b"
"fail2ban-prometheus-exporter/collector/textfile"
"fmt"
"log"
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
const (
@ -54,6 +56,7 @@ func main() {
if appSettings.VersionMode {
printAppVersion()
} else {
handleGracefulShutdown()
log.Printf("fail2ban exporter version %s", version)
log.Printf("starting server at %s", appSettings.MetricsAddress)
@ -85,3 +88,16 @@ func main() {
log.Print(err)
}
}
func handleGracefulShutdown() {
var signals = make(chan os.Signal)
signal.Notify(signals, syscall.SIGTERM)
signal.Notify(signals, syscall.SIGINT)
go func() {
sig := <-signals
log.Printf("caught signal: %+v", sig)
os.Exit(0)
}()
}