Skip to content

Commit 9fc3c9a

Browse files
committed
feat: handle graceful shutdown on signals
fixes #50
1 parent ff02f5a commit 9fc3c9a

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

internal/certstream/certstream.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ package certstream
66

77
import (
88
"log"
9+
"os"
10+
"os/signal"
11+
"syscall"
912

1013
"github.com/d-Rickyy-b/certstream-server-go/internal/certificatetransparency"
1114
"github.com/d-Rickyy-b/certstream-server-go/internal/config"
@@ -66,6 +69,11 @@ func (cs *Certstream) setupMetrics(webserver *web.WebServer) {
6669
func (cs *Certstream) Start() {
6770
log.Printf("Starting certstream-server-go v%s\n", config.Version)
6871

72+
// handle signals in a separate goroutine
73+
signals := make(chan os.Signal, 1)
74+
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
75+
go signalHandler(signals, cs.Stop)
76+
6977
// If there is no watcher initialized, create a new one
7078
if cs.watcher == nil {
7179
cs.watcher = &certificatetransparency.Watcher{}
@@ -99,3 +107,13 @@ func (cs *Certstream) Stop() {
99107
cs.metricsServer.Stop()
100108
}
101109
}
110+
111+
// signalHandler listens for signals in order to gracefully shut down the server.
112+
// Executes the callback function when a signal is received.
113+
func signalHandler(signals chan os.Signal, callback func()) {
114+
log.Println("Listening for signals...")
115+
sig := <-signals
116+
log.Printf("Received signal %v. Shutting down...\n", sig)
117+
callback()
118+
os.Exit(0)
119+
}

0 commit comments

Comments
 (0)