package server import ( "log" "os" "os/signal" "syscall" "github.com/dcarrillo/whatismyip/internal/setting" "github.com/dcarrillo/whatismyip/models" ) type Server interface { Start() Stop() } type Manager struct { servers []Server } func Setup(servers []Server) *Manager { return &Manager{ servers: servers, } } func (m *Manager) Run() { m.start() models.Setup(setting.App.GeodbPath.City, setting.App.GeodbPath.ASN) signalChan := make(chan os.Signal, len(m.servers)) signal.Notify(signalChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM) var s os.Signal for { s = <-signalChan if s == syscall.SIGHUP { m.stop() models.CloseDBs() models.Setup(setting.App.GeodbPath.City, setting.App.GeodbPath.ASN) m.start() } else { log.Printf("Shutting down...") m.stop() models.CloseDBs() break } } } func (m *Manager) start() { for _, s := range m.servers { s.Start() } } func (m *Manager) stop() { for _, s := range m.servers { s.Stop() } }