Skip to content

Commit

Permalink
add: signal handling to agent controller
Browse files Browse the repository at this point in the history
  • Loading branch information
maier committed Jan 7, 2021
1 parent 4c7e9a4 commit 7d8bdd0
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 30 deletions.
22 changes: 12 additions & 10 deletions sighndlr_bsdsol.go
Expand Up @@ -11,7 +11,6 @@
package main

import (
"context"
"fmt"
"log"
"os"
Expand All @@ -22,27 +21,28 @@ import (
"golang.org/x/sys/unix"
)

//SignalNotifySetup sets up the signals and their channel
func SignalNotifySetup(ch chan os.Signal) {
signal.Notify(ch, os.Interrupt, unix.SIGTERM, unix.SIGHUP, unix.SIGPIPE, unix.SIGINFO)
//signalNotifySetup sets up the signals and their channel
func (ac *AgentController) signalNotifySetup() {
signal.Notify(ac.sig, os.Interrupt, unix.SIGTERM, unix.SIGHUP, unix.SIGPIPE, unix.SIGINFO)
}

//HandleSignals handles exiting the program based on different signals
func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
//handleSignals handles exiting the program based on different signals
func (ac *AgentController) handleSignals() {
const stackTraceBufferSize = 1 * units.MiB

//pre-allocate a buffer for stacktrace
buf := make([]byte, stackTraceBufferSize)

for {
select {
case sig := <-ch:
case sig := <-ac.sig:
log.Printf("signal %s received\n", sig.String())
switch sig {
case os.Interrupt, unix.SIGTERM:
cancel()
log.Println("waiting for final metric flushes... press CTRL+C to exit without flushing")
break
ac.cncl()
return
// log.Println("waiting for final metric flushes... press CTRL+C to exit without flushing")
// break
case unix.SIGPIPE, unix.SIGHUP:
// Noop
case unix.SIGINFO:
Expand All @@ -51,6 +51,8 @@ func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
default:
log.Printf("signal %s unsupported", sig.String())
}
case <-ac.ctx.Done():
return
}
}
}
20 changes: 10 additions & 10 deletions sighndlr_windows.go
Expand Up @@ -9,7 +9,6 @@
package main

import (
"context"
"fmt"
"log"
"os"
Expand All @@ -20,27 +19,26 @@ import (
"github.com/alecthomas/units"
)

//SignalNotifySetup sets up the signals and their channel
func SignalNotifySetup(ch chan os.Signal) {
signal.Notify(ch, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGPIPE, syscall.SIGTRAP)
//signalNotifySetup sets up the signals and their channel
func (ac *AgentController) signalNotifySetup() {
signal.Notify(ac.sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGPIPE, syscall.SIGTRAP)
}

//HandleSignals handles exiting the program based on different signals
func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
//handleSignals handles exiting the program based on different signals
func (ac *AgentController) handleSignals() {
const stackTraceBufferSize = 1 * units.MiB

//pre-allocate a buffer for stacktrace
buf := make([]byte, stackTraceBufferSize)

for {
select {
case sig := <-ch:
case sig := <-ac.sig:
log.Printf("signal %s received\n", sig.String())
switch sig {
case os.Interrupt, syscall.SIGTERM:
cancel()
log.Println("waiting for final metric flushes... press CTRL+C to exit without flushing")
break
ac.cncl()
return
case syscall.SIGPIPE, syscall.SIGHUP:
// Noop
case syscall.SIGTRAP:
Expand All @@ -49,6 +47,8 @@ func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
default:
log.Printf("signal %s unsupported", sig.String())
}
case <-ac.ctx.Done():
return
}
}
}
20 changes: 10 additions & 10 deletions signlhndlr_linux.go
Expand Up @@ -9,7 +9,6 @@
package main

import (
"context"
"fmt"
"log"
"os"
Expand All @@ -20,27 +19,26 @@ import (
"golang.org/x/sys/unix"
)

//SignalNotifySetup sets up the signals and their channel
func SignalNotifySetup(ch chan os.Signal) {
signal.Notify(ch, os.Interrupt, unix.SIGTERM, unix.SIGHUP, unix.SIGPIPE, unix.SIGTRAP)
//signalNotifySetup sets up the signals and their channel
func (ac *AgentController) signalNotifySetup() {
signal.Notify(ac.sig, os.Interrupt, unix.SIGTERM, unix.SIGHUP, unix.SIGPIPE, unix.SIGTRAP)
}

//HandleSignals handles exiting the program based on different signals
func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
//handleSignals handles exiting the program based on different signals
func (ac *AgentController) handleSignals() {
const stackTraceBufferSize = 1 * units.MiB

//pre-allocate a buffer for stacktrace
buf := make([]byte, stackTraceBufferSize)

for {
select {
case sig := <-ch:
case sig := <-ac.sig:
log.Printf("signal %s received\n", sig.String())
switch sig {
case os.Interrupt, unix.SIGTERM:
cancel()
log.Println("waiting for final metric flushes... press CTRL+C to exit without flushing")
break
ac.cncl()
return
case unix.SIGPIPE, unix.SIGHUP:
// Noop
case unix.SIGTRAP:
Expand All @@ -49,6 +47,8 @@ func HandleSignals(cancel context.CancelFunc, ch chan os.Signal) {
default:
log.Printf("signal %s unsupported", sig.String())
}
case <-ac.ctx.Done():
return
}
}
}

0 comments on commit 7d8bdd0

Please sign in to comment.