diff --git a/servmanager/servmanager.go b/servmanager/servmanager.go index 3a8e32cbe..0b352a701 100644 --- a/servmanager/servmanager.go +++ b/servmanager/servmanager.go @@ -266,14 +266,14 @@ func (srvMngr *ServiceManager) GetConnection(subsystem string, cfg *config.Remot // StartServices starts all enabled services func (srvMngr *ServiceManager) StartServices() (err error) { - // go hendleReloads() + go srvMngr.handleReload() if srvMngr.cfg.AttributeSCfg().Enabled { go func() { if attrS, has := srvMngr.subsystems[utils.AttributeS]; !has { - utils.Logger.Err(fmt.Sprintf("<%s> Failed to start", utils.AttributeS)) + utils.Logger.Err(fmt.Sprintf("<%s> Failed to start <%s>", utils.ServiceManager, utils.AttributeS)) srvMngr.engineShutdown <- true } else if err = attrS.Start(srvMngr, true); err != nil { - utils.Logger.Err(fmt.Sprintf("<%s> Failed to start because: %s", utils.AttributeS, err)) + utils.Logger.Err(fmt.Sprintf("<%s> Failed to start %s because: %s", utils.ServiceManager, utils.AttributeS, err)) srvMngr.engineShutdown <- true } }() @@ -293,6 +293,43 @@ func (srvMngr *ServiceManager) AddService(services ...Service) { } } +func (srvMngr *ServiceManager) handleReload() { + var err error + for { + select { + case <-srvMngr.cfg.GetReloadChan(config.ATTRIBUTE_JSN): + attrS, has := srvMngr.subsystems[utils.AttributeS] + if !has { + utils.Logger.Err(fmt.Sprintf("<%s> Failed to start <%s>", utils.ServiceManager, utils.AttributeS)) + srvMngr.engineShutdown <- true + return // stop if we encounter an error + } + if srvMngr.cfg.AttributeSCfg().Enabled { + if attrS.IsRunning() { + if err = attrS.Reload(srvMngr); err != nil { + utils.Logger.Err(fmt.Sprintf("<%s> Failed to reload <%s>", utils.ServiceManager, utils.AttributeS)) + srvMngr.engineShutdown <- true + return // stop if we encounter an error + } + } else { + if err = attrS.Start(srvMngr, true); err != nil { + utils.Logger.Err(fmt.Sprintf("<%s> Failed to start <%s>", utils.ServiceManager, utils.AttributeS)) + srvMngr.engineShutdown <- true + return // stop if we encounter an error + } + } + } else if attrS.IsRunning() { + if err = attrS.Shutdown(); err != nil { + utils.Logger.Err(fmt.Sprintf("<%s> Failed to stop service <%s>", utils.ServiceManager, utils.AttributeS)) + srvMngr.engineShutdown <- true + return // stop if we encounter an error + } + } + } + // handle RPC server + } +} + // ServiceProvider should implement this to provide information for service type ServiceProvider interface { // GetDM returns the DataManager