From 6b2d8539a66f1b36ffd55c56723376b9b068a5dc Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 10 Sep 2020 15:17:39 +0100 Subject: add io/signal --- internal/io/signal/signal.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 internal/io/signal/signal.go diff --git a/internal/io/signal/signal.go b/internal/io/signal/signal.go new file mode 100644 index 0000000..bca7e6e --- /dev/null +++ b/internal/io/signal/signal.go @@ -0,0 +1,33 @@ +package signal + +import ( + "context" + "os" + gosignal "os/signal" + "syscall" +) + +// StatsCh returns a channel for "please print stats" signalling. +func StatsCh(ctx context.Context) <-chan struct{} { + sigCh := make(chan os.Signal) + gosignal.Notify(sigCh, syscall.SIGINFO, syscall.SIGUSR1) + + statsCh := make(chan struct{}) + + go func() { + for { + select { + case <-sigCh: + select { + case statsCh <- struct{}{}: + default: + // Stats currently already printed. + } + case <-ctx.Done(): + return + } + } + }() + + return statsCh +} -- cgit v1.2.3