package gracefulshutdown import ( "github.com/iotaledger/goshimmer/packages/daemon" "github.com/iotaledger/goshimmer/packages/node" "os" "os/signal" "strconv" "syscall" "time" ) func run(plugin *node.Plugin) { gracefulStop := make(chan os.Signal) signal.Notify(gracefulStop, syscall.SIGTERM) signal.Notify(gracefulStop, syscall.SIGINT) go func() { <- gracefulStop plugin.LogWarning("Received shutdown request - waiting (max " + strconv.Itoa(WAIT_TO_KILL_TIME_IN_SECONDS) + " seconds) to finish processing ...") go func() { start := time.Now() for x := range time.Tick(1 * time.Second) { secondsSinceStart := x.Sub(start).Seconds() if secondsSinceStart <= WAIT_TO_KILL_TIME_IN_SECONDS { plugin.LogWarning("Received shutdown request - waiting (max " + strconv.Itoa(WAIT_TO_KILL_TIME_IN_SECONDS - int(secondsSinceStart)) + " seconds) to finish processing ...") } else { plugin.LogFailure("The background processes did not terminate in time! Forcing shutdown ...") os.Exit(1) } } }() daemon.Shutdown() }() } var PLUGIN = node.NewPlugin("Graceful Shutdown", run)