From baf73f33e7e8ef763869a1677ebf5cd2f334d897 Mon Sep 17 00:00:00 2001 From: Bennett Wetters Date: Fri, 10 Nov 2023 03:49:05 +0100 Subject: [PATCH] Make the signal handler work properly --- main.go | 22 ++++++++++++---------- util/util.go | 13 +++++++------ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/main.go b/main.go index 32739c2..7678238 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "syscall" "gitlab.hamburg.ccc.de/ccchh/spaceapid/handlers" + "gitlab.hamburg.ccc.de/ccchh/spaceapid/types" "gitlab.hamburg.ccc.de/ccchh/spaceapid/util" ) @@ -21,20 +22,21 @@ func main() { // Merge old state if present util.MergeOldState(&spaceApiResponse) + // Register signal handler + sc := make(chan os.Signal, 1) + signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM) + go func(ch chan os.Signal, resp *types.SpaceAPIResponseV14) { + <-ch + log.Println("Saving state and shutting down...") + util.SaveCurrentState(*resp) + os.Exit(0) + }(sc, &spaceApiResponse) + // Register HTTP handlers http.HandleFunc("/", handlers.Root(&spaceApiResponse)) http.HandleFunc("/state/open", handlers.StateOpen(config.BAUsername, config.BAPassword, &spaceApiResponse)) // Start webserver log.Println("Starting HTTP server...") - go log.Fatalln(http.ListenAndServe(":8080", nil)) - - // Wait for exit signal - sc := make(chan os.Signal, 1) - signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM) - <-sc - - // Save state for next run - log.Println("Saving state and shutting down...") - util.SaveCurrentState(spaceApiResponse) + log.Fatalln(http.ListenAndServe(":8080", nil)) } diff --git a/util/util.go b/util/util.go index 18447be..e43123d 100644 --- a/util/util.go +++ b/util/util.go @@ -47,12 +47,6 @@ func MergeOldState(response *types.SpaceAPIResponseV14) { oldState []byte ) - // Create state directory if not present - err = os.MkdirAll(path.Dir(savedStateJSONPath), 0750) - if err != nil { - log.Fatalln("Failed creating", savedStateJSONPath, ", aborting... error:", err) - } - // Check if state.json is present _, err = os.Stat(savedStateJSONPath) if err != nil { @@ -84,6 +78,13 @@ removeOld: } func SaveCurrentState(response types.SpaceAPIResponseV14) { + // Create state directory if not present + err := os.MkdirAll(path.Dir(savedStateJSONPath), 0750) + if err != nil { + log.Fatalln("Failed creating", savedStateJSONPath, ", aborting... error:", err) + } + + // Open persistent state file for reading file, err := os.OpenFile(savedStateJSONPath, os.O_RDWR|os.O_CREATE, 0644) if err != nil { log.Fatalln("Failed opening", savedStateJSONPath, "while trying to save current state... error:", err)