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 { func (db *DB) Close() error {
log.Println("Closing database...")
err := db.ctx.Close() err := db.ctx.Close()
Db = nil Db = nil
return err return err

View File

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

View File

@ -2,7 +2,12 @@ package net
import ( import (
"fmt" "fmt"
"context"
"log"
"net/http" "net/http"
"os"
"os/signal"
"syscall"
"git.fuwafuwa.moe/x3/ngfshare/config" "git.fuwafuwa.moe/x3/ngfshare/config"
"git.fuwafuwa.moe/x3/ngfshare/controller" "git.fuwafuwa.moe/x3/ngfshare/controller"
@ -10,7 +15,7 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
) )
func Start(conf config.Config) error { func setupRoutes() *mux.Router {
r := mux.NewRouter() r := mux.NewRouter()
authedR := r.PathPrefix("/api").Methods("POST").Subrouter() 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("/login", controller.WebLogin).Methods("POST")
r.HandleFunc("/logout", controller.WebLogout).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) lstStr := fmt.Sprintf("%s:%d", conf.Address, conf.Port)
fmt.Println("Listening on", lstStr) srv := &http.Server{
http.ListenAndServe(lstStr, nil) 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
} }