diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-09-10 15:17:39 +0100 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-09-10 15:17:39 +0100 |
| commit | 6b2d8539a66f1b36ffd55c56723376b9b068a5dc (patch) | |
| tree | b83042b6c9a797e092598959f4265ca0cec56ccc | |
| parent | 1c7c0dbb5174b5255912183b9ec5870ccdef3426 (diff) | |
add io/signal
| -rw-r--r-- | internal/io/signal/signal.go | 33 |
1 files changed, 33 insertions, 0 deletions
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 +} |
