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:
parent
aedef536dd
commit
f6e328a0aa
2 changed files with 20 additions and 4 deletions
|
@ -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"]
|
||||
|
|
|
@ -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)
|
||||
}()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue