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
@ -20,4 +20,4 @@ WORKDIR /app
|
|||||||
# Copy compiled binary to release image
|
# Copy compiled binary to release image
|
||||||
COPY --from=build /build/src/exporter /app/fail2ban-prometheus-exporter
|
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/f2b"
|
||||||
"fail2ban-prometheus-exporter/collector/textfile"
|
"fail2ban-prometheus-exporter/collector/textfile"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -54,6 +56,7 @@ func main() {
|
|||||||
if appSettings.VersionMode {
|
if appSettings.VersionMode {
|
||||||
printAppVersion()
|
printAppVersion()
|
||||||
} else {
|
} else {
|
||||||
|
handleGracefulShutdown()
|
||||||
log.Printf("fail2ban exporter version %s", version)
|
log.Printf("fail2ban exporter version %s", version)
|
||||||
log.Printf("starting server at %s", appSettings.MetricsAddress)
|
log.Printf("starting server at %s", appSettings.MetricsAddress)
|
||||||
|
|
||||||
@ -85,3 +88,16 @@ func main() {
|
|||||||
log.Print(err)
|
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 New Issue
Block a user