summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2020-09-10 15:17:39 +0100
committerPaul Buetow <pbuetow@mimecast.com>2020-09-10 15:17:39 +0100
commit6b2d8539a66f1b36ffd55c56723376b9b068a5dc (patch)
treeb83042b6c9a797e092598959f4265ca0cec56ccc
parent1c7c0dbb5174b5255912183b9ec5870ccdef3426 (diff)
add io/signal
-rw-r--r--internal/io/signal/signal.go33
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
+}