package main import ( "fmt" "os" "os/signal" "syscall" "git.fjla.uk/owlboard/timetable-mgr/dbAccess" "git.fjla.uk/owlboard/timetable-mgr/helpers" "git.fjla.uk/owlboard/timetable-mgr/log" "git.fjla.uk/owlboard/timetable-mgr/messaging" "git.fjla.uk/owlboard/timetable-mgr/vstp" ) func main() { cfg, err := helpers.LoadConfig() if err != nil { fmt.Println("Error loading configuration", err) return } cfg.PrintConfig() log.Msg.Info("Initialised OwlBoard timetable-mgr " + helpers.Version) defer cleanup(cfg) if cfg.VstpOn { messaging.StompInit(cfg) go handleSignals(cfg) vstp.Subscribe() } } // Traps SIGINT and SIGTERM signals and ensures cleanup() is run func handleSignals(cfg *helpers.Configuration) { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) sig := <-sigChan log.Msg.Warn("Signal received: " + sig.String()) cleanup(cfg) os.Exit(1) } // Cleans up open connections ready for a clean exit of the program func cleanup(cfg *helpers.Configuration) { log.Msg.Debug("Cleaning up open connections") if cfg.VstpOn { if messaging.Client != nil { log.Msg.Info("Closing STOMP Client") messaging.Disconnect(messaging.Client) } } if dbAccess.MongoClient != nil { log.Msg.Info("Closing MongoDB Client") dbAccess.CloseMongoClient() } log.Msg.Info("Program ready to exit") if log.Msg != nil { log.Msg.Sync() } }