Skip to content

Commit 8d17a05

Browse files
committed
Add signal handling
1 parent 80da387 commit 8d17a05

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

cmd/icinga-kubernetes/main.go

+17-7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
kinformers "k8s.io/client-go/informers"
1616
"k8s.io/client-go/kubernetes"
1717
kclientcmd "k8s.io/client-go/tools/clientcmd"
18+
"os"
19+
"os/signal"
1820
)
1921

2022
func main() {
@@ -54,7 +56,8 @@ func main() {
5456

5557
driver.Register(logs.GetChildLogger("Database Driver"))
5658

57-
ctx := context.Background()
59+
ctx, unregisterSignals := signal.NotifyContext(context.Background(), os.Interrupt)
60+
defer unregisterSignals()
5861

5962
db, err := database.NewDbFromConfig(&cfg.Database, logs.GetChildLogger("Database"))
6063
defer db.Close()
@@ -68,27 +71,34 @@ func main() {
6871

6972
informers := kinformers.NewSharedInformerFactory(k, 0)
7073

71-
g, ctx := errgroup.WithContext(ctx)
74+
g, syncCtx := errgroup.WithContext(ctx)
7275

7376
g.Go(func() error {
7477
return sync.NewSync(
7578
db, schema.NewNode, informers.Core().V1().Nodes().Informer(), logs.GetChildLogger("Nodes"),
76-
).Run(ctx)
79+
).Run(syncCtx)
7780
})
7881

7982
g.Go(func() error {
8083
return sync.NewSync(
8184
db, schema.NewNamespace, informers.Core().V1().Namespaces().Informer(), logs.GetChildLogger("Namespaces"),
82-
).Run(ctx)
85+
).Run(syncCtx)
8386
})
8487

8588
g.Go(func() error {
8689
return sync.NewSync(
8790
db, schema.NewPod, informers.Core().V1().Pods().Informer(), logs.GetChildLogger("Pods"),
88-
).Run(ctx)
91+
).Run(syncCtx)
8992
})
9093

91-
if err := g.Wait(); err != nil {
92-
logging.Fatal(errors.Wrap(err, "can't sync"))
94+
select {
95+
case <-ctx.Done():
96+
logger.Info("Shutting down")
97+
unregisterSignals()
98+
case <-syncCtx.Done():
99+
}
100+
101+
if err := g.Wait(); err != nil && !errors.Is(err, context.Canceled) {
102+
logger.Fatalf("%+v", errors.Wrap(err, "can't sync"))
93103
}
94104
}

0 commit comments

Comments
 (0)