File tree Expand file tree Collapse file tree 1 file changed +27
-1
lines changed Expand file tree Collapse file tree 1 file changed +27
-1
lines changed Original file line number Diff line number Diff line change 5
5
"flag"
6
6
"fmt"
7
7
"log/slog"
8
+ "net/http"
8
9
"os"
10
+ "os/signal"
9
11
"time"
10
12
11
13
"semantic-search/api"
@@ -93,7 +95,31 @@ func main() {
93
95
e .GET ("/search" , bookHandler .SearchBooks )
94
96
e .POST ("/books" , bookHandler .AddBook )
95
97
96
- e .Logger .Fatal (e .Start (fmt .Sprintf (":%d" , cfg .port )))
98
+ // e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", cfg.port)))
99
+
100
+ quitectx , stop := signal .NotifyContext (context .Background (), os .Interrupt )
101
+ defer stop ()
102
+
103
+ srvAddr := fmt .Sprintf (":%d" , cfg .port )
104
+
105
+ go func () {
106
+ if err := e .Start (srvAddr ); err != nil && err != http .ErrServerClosed {
107
+ logger .Error ("Unexpected server shutdown" , "error" , err )
108
+ os .Exit (1 )
109
+ }
110
+ }()
111
+
112
+ <- quitectx .Done ()
113
+ logger .Debug ("Interrupt received" )
114
+
115
+ shutdownCtx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
116
+ defer cancel ()
117
+
118
+ if err := e .Shutdown (shutdownCtx ); err != nil {
119
+ logger .Error ("Server didn't shut down gracefully — something's still hanging!" , "error" , err )
120
+ } else {
121
+ logger .Info ("Server shut down cleanly. Goodbye!" )
122
+ }
97
123
}
98
124
99
125
func loadConfig () config {
You can’t perform that action at this time.
0 commit comments