Skip to content

Commit f77cd6e

Browse files
committed
added docker shutdown logic
1 parent b31505e commit f77cd6e

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

main.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
proxy "github.com/codeshelldev/secured-signal-api/internals/proxy"
99
middlewares "github.com/codeshelldev/secured-signal-api/internals/proxy/middlewares"
10+
docker "github.com/codeshelldev/secured-signal-api/utils/docker"
1011
env "github.com/codeshelldev/secured-signal-api/utils/env"
1112
log "github.com/codeshelldev/secured-signal-api/utils/logger"
1213
)
@@ -56,5 +57,20 @@ func main() {
5657

5758
log.Info("Server Listening on ", addr)
5859

59-
http.ListenAndServe(addr, log_m0.Use())
60-
}
60+
server := &http.Server{
61+
Addr: addr,
62+
Handler: log_m0.Use(),
63+
}
64+
65+
stop := docker.Run(func(){
66+
err := server.ListenAndServe()
67+
68+
if err != nil && err != http.ErrServerClosed {
69+
log.Fatal("Server error: ", err.Error())
70+
}
71+
})
72+
73+
<-stop
74+
75+
docker.Shutdown(server)
76+
}

utils/docker/docker.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package docker
2+
3+
import (
4+
"context"
5+
"net/http"
6+
"os"
7+
"os/signal"
8+
"syscall"
9+
"time"
10+
11+
log "github.com/codeshelldev/secured-signal-api/utils/logger"
12+
)
13+
14+
var stop chan os.Signal
15+
16+
func Run(main func()) chan os.Signal {
17+
stop = make(chan os.Signal, 1)
18+
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
19+
20+
go main()
21+
22+
return stop
23+
}
24+
25+
func Exit(code int) {
26+
log.Info("Exiting...")
27+
28+
os.Exit(code)
29+
30+
stop <- syscall.SIGTERM
31+
}
32+
33+
func Shutdown(server *http.Server) {
34+
log.Info("Shutdown signal received")
35+
36+
log.Sync()
37+
38+
ctx, cancel := context.WithTimeout(context.Background(), 5 * time.Second)
39+
defer cancel()
40+
41+
err := server.Shutdown(ctx);
42+
43+
if err != nil {
44+
log.Fatal("Server shutdown failed: ", err.Error())
45+
46+
log.Info("Server exited forcefully")
47+
} else {
48+
log.Info("Server exited gracefully")
49+
}
50+
}

0 commit comments

Comments
 (0)