forked from security/hakurei
cmd/pkgserver: gracefully shut down on signal
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"hakurei.app/command"
|
"hakurei.app/command"
|
||||||
"hakurei.app/container/check"
|
"hakurei.app/container/check"
|
||||||
@@ -16,7 +17,8 @@ import (
|
|||||||
"hakurei.app/message"
|
"hakurei.app/message"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && tsc -p ui/static"
|
const shutdownTimeout = 15 * time.Second
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.SetFlags(0)
|
log.SetFlags(0)
|
||||||
log.SetPrefix("pkgserver: ")
|
log.SetPrefix("pkgserver: ")
|
||||||
@@ -65,9 +67,23 @@ func main() {
|
|||||||
if err := index.populate(cache, report); err != nil {
|
if err := index.populate(cache, report); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
uiRoutes(http.DefaultServeMux)
|
|
||||||
apiRoutes(http.DefaultServeMux, &index)
|
var mux http.ServeMux
|
||||||
return http.ListenAndServe(flagAddr, nil)
|
uiRoutes(&mux)
|
||||||
|
apiRoutes(&mux, &index)
|
||||||
|
server := http.Server{
|
||||||
|
Addr: flagAddr,
|
||||||
|
Handler: &mux,
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
<-ctx.Done()
|
||||||
|
c, cancel := context.WithTimeout(context.Background(), shutdownTimeout)
|
||||||
|
defer cancel()
|
||||||
|
if err := server.Shutdown(c); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return server.ListenAndServe()
|
||||||
}).Flag(
|
}).Flag(
|
||||||
&flagBaseDir,
|
&flagBaseDir,
|
||||||
"b", command.StringFlag(""),
|
"b", command.StringFlag(""),
|
||||||
@@ -77,8 +93,10 @@ func main() {
|
|||||||
"addr", command.StringFlag(":8067"),
|
"addr", command.StringFlag(":8067"),
|
||||||
"TCP network address to listen on",
|
"TCP network address to listen on",
|
||||||
)
|
)
|
||||||
c.MustParse(os.Args[1:], func(e error) {
|
c.MustParse(os.Args[1:], func(err error) {
|
||||||
log.Fatal(e)
|
if errors.Is(err, http.ErrServerClosed) {
|
||||||
})
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
log.Fatal(err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && tsc -p ui/static"
|
||||||
//go:embed ui/*
|
//go:embed ui/*
|
||||||
var content embed.FS
|
var content embed.FS
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user