Skip to content

Commit

Permalink
Add graceful shutdown to example
Browse files Browse the repository at this point in the history
  • Loading branch information
vearutop committed Jul 12, 2024
1 parent 15a0c23 commit 31256dd
Showing 1 changed file with 36 additions and 2 deletions.
38 changes: 36 additions & 2 deletions _examples/advanced-generic-openapi31/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,47 @@
package main

import (
"context"
"errors"
"log"
"net/http"
"os"
"os/signal"
"time"
)

func main() {
var srv http.Server

idleConnsClosed := make(chan struct{})
go func() {
sigint := make(chan os.Signal, 1)
signal.Notify(sigint, os.Interrupt)
<-sigint

log.Println("Shutting down...")

// We received an interrupt signal, shut down with up to 10 seconds of waiting for current requests to finish.
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

if err := srv.Shutdown(ctx); err != nil {
// Error from closing listeners, or context timeout:
log.Printf("HTTP server Shutdown: %v", err)
}
log.Println("Shutdown complete")

close(idleConnsClosed)
}()

srv.Handler = NewRouter()
srv.Addr = "localhost:8012"

log.Println("http://localhost:8012/docs")
if err := http.ListenAndServe("localhost:8012", NewRouter()); err != nil {
log.Fatal(err)
if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
// Error starting or closing listener:
log.Fatalf("HTTP server ListenAndServe: %v", err)
}

<-idleConnsClosed
}

0 comments on commit 31256dd

Please sign in to comment.