Graceful shutdown on CTRL-C

This commit is contained in:
x3 2024-02-28 11:48:10 +01:00
parent 8f6aa65a10
commit e583839bfe
Signed by: x3
GPG Key ID: 7E9961E8AD0E240E
3 changed files with 32 additions and 5 deletions

View File

@ -60,6 +60,7 @@ func Open(path string) (*DB, error) {
}
func (db *DB) Close() error {
log.Println("Closing database...")
err := db.ctx.Close()
Db = nil
return err

View File

@ -55,4 +55,5 @@ func main() {
fmt.Printf("Failed to start listen: ", err)
return
}
fmt.Println("Returning from main...")
}

View File

@ -2,7 +2,12 @@ package net
import (
"fmt"
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"git.fuwafuwa.moe/x3/ngfshare/config"
"git.fuwafuwa.moe/x3/ngfshare/controller"
@ -10,7 +15,7 @@ import (
"github.com/gorilla/mux"
)
func Start(conf config.Config) error {
func setupRoutes() *mux.Router {
r := mux.NewRouter()
authedR := r.PathPrefix("/api").Methods("POST").Subrouter()
@ -26,11 +31,31 @@ func Start(conf config.Config) error {
r.HandleFunc("/login", controller.WebLogin).Methods("POST")
r.HandleFunc("/logout", controller.WebLogout).Methods("POST")
http.Handle("/", r)
return r
}
func Start(conf config.Config) error {
lstStr := fmt.Sprintf("%s:%d", conf.Address, conf.Port)
fmt.Println("Listening on", lstStr)
http.ListenAndServe(lstStr, nil)
srv := &http.Server{
Addr: lstStr,
Handler: setupRoutes(),
}
return nil
done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
go func() {
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
log.Printf("HTTP ListenAndServe error: %v\n", err)
}
}()
log.Println("Listening on", lstStr)
<-done
fmt.Println("")
log.Println("Stopping HTTP server")
err := srv.Shutdown(context.Background())
return err
}