// Ready NEEDS to be called for EventReporters and Reapables to be properly initialized // which means events AND config need to be set BEFORE Ready func Ready() { reaperevents.SetDryRun(config.DryRun) if r := reapable.NewReapables(config.AWS.Regions); r != nil { reapables = *r } else { log.Error("reapables improperly initialized") } }
func main() { // config and events are vars in the reaper package // they NEED to be set before a reaper.Reaper can be initialized reaper.SetConfig(&config) reaperevents.SetEvents(&eventReporters) if config.DryRun { log.Info("Dry run mode enabled, no events will be triggered. Enable Extras in Notifications for per-event DryRun notifications.") reaperevents.SetDryRun(config.DryRun) } // Ready() NEEDS to be called after BOTH SetConfig() and SetEvents() // it uses those values to set individual EventReporter config values // and to init the Reapables map reaper.Ready() // sets the config variable in Reaper's AWS package // this also NEEDS to be set before a Reaper can be started reaperaws.SetConfig(&config.AWS) // single instance of reaper reapRunner := reaper.NewReaper() // Run the reaper process reapRunner.Start() // run the HTTP server api := reaper.NewHTTPApi(config.HTTP) if err := api.Serve(); err != nil { log.Error(err.Error()) } else { // HTTP server successfully started c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, os.Kill) // waiting for an Interrupt or Kill signal // this channel blocks until it receives one sig := <-c log.Info("Got signal %s, stopping services", sig.String()) log.Info("Stopping HTTP") api.Stop() log.Info("Stopping reaper runner") reapRunner.Stop() } }