From bb3cea2ce2b48c60e8b4fd91419c14bda4351562 Mon Sep 17 00:00:00 2001 From: Tyler Date: Wed, 30 Mar 2022 21:37:47 -0400 Subject: [PATCH] Add proper signal checking, support for reload (map only) --- http.go | 20 +++----------------- main.go | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/http.go b/http.go index ae0de0e..3fd29f2 100644 --- a/http.go +++ b/http.go @@ -3,8 +3,6 @@ package main import ( "encoding/json" "fmt" - log "github.com/sirupsen/logrus" - "github.com/spf13/viper" "net" "net/http" "net/url" @@ -74,22 +72,10 @@ func redirectHandler(w http.ResponseWriter, r *http.Request) { } func reloadHandler(w http.ResponseWriter, r *http.Request) { - if mapFile := viper.GetString("dl_map"); mapFile != "" { - log.WithField("file", mapFile).Info("Loading download map") + reloadMap() - newMap, err := loadMap(mapFile) - - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - dlMap = newMap - - return - } - - w.WriteHeader(http.StatusNotFound) + w.WriteHeader(http.StatusOK) + w.Write([]byte("OK")) } func dlMapHandler(w http.ResponseWriter, r *http.Request) { diff --git a/main.go b/main.go index 074b8c2..3e74247 100644 --- a/main.go +++ b/main.go @@ -13,8 +13,11 @@ import ( "net" "net/http" "net/url" + "os" + "os/signal" "strings" "sync" + "syscall" ) var ( @@ -116,7 +119,21 @@ func main() { r.Handle("/metrics", promhttp.Handler()) r.HandleFunc("/", redirectHandler) - http.ListenAndServe(viper.GetString("bind"), r) + go http.ListenAndServe(viper.GetString("bind"), r) + + c := make(chan os.Signal) + + signal.Notify(c, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGHUP) + + for { + sig := <-c + + if sig != syscall.SIGHUP { + break + } + + reloadMap() + } } var metricReplacer = strings.NewReplacer(".", "_", "-", "_") @@ -179,3 +196,21 @@ func addServer(server string) { "longitude": city.Location.Longitude, }).Info("Added server") } + +func reloadMap() { + mapFile := viper.GetString("dl_map") + + if mapFile == "" { + return + } + + log.WithField("file", mapFile).Info("Loading download map") + + newMap, err := loadMap(mapFile) + + if err != nil { + return + } + + dlMap = newMap +}