diff options
author | Drew DeVault <sir@cmpwn.com> | 2020-10-23 13:30:29 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-10-23 13:30:29 -0400 |
commit | b93b2bafa56ee79fa5d70b4c15901981215fa935 (patch) | |
tree | 36e17ab04c4d34f4597c99a250be880f74fd8c2d /cmd | |
parent | 8764397b7d641450009436196f300dadbe770f1d (diff) | |
download | alps-b93b2bafa56ee79fa5d70b4c15901981215fa935.tar.gz alps-b93b2bafa56ee79fa5d70b4c15901981215fa935.zip |
Rig up dowork event queue and graceful termination
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/alps/main.go | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/cmd/alps/main.go b/cmd/alps/main.go index 4c358d5..dedd6cb 100644 --- a/cmd/alps/main.go +++ b/cmd/alps/main.go @@ -1,11 +1,13 @@ package main import ( + "context" "flag" "fmt" "os" "os/signal" "syscall" + "time" "git.sr.ht/~emersion/alps" "github.com/fernet/fernet-go" @@ -74,15 +76,29 @@ func main() { e.Logger.SetLevel(log.DEBUG) } + go e.Start(addr) + + s.Queue.Start(context.Background()) + sigs := make(chan os.Signal, 1) - signal.Notify(sigs, syscall.SIGUSR1) - go func() { - for range sigs { + signal.Notify(sigs, syscall.SIGUSR1, syscall.SIGINT) + + for sig := range sigs { + if sig == syscall.SIGUSR1 { if err := s.Reload(); err != nil { e.Logger.Errorf("Failed to reload server: %v", err) } + } else if sig == syscall.SIGINT { + break } - }() + } + + ctx, cancel := context.WithDeadline(context.Background(), + time.Now().Add(30*time.Second)) + e.Shutdown(ctx) + cancel() - e.Logger.Fatal(e.Start(addr)) + e.Logger.Print("Waiting for work queues to finish...") + s.Queue.Shutdown() + e.Logger.Print("Shut down.") } |