Init services directly in Service slice

except CoreService that needs to be referenced in
case CPU profiling is enabled via flags and needs
to be stopped before CoreService starts managing it
This commit is contained in:
ionutboangiu
2025-01-16 12:23:42 +02:00
committed by Dan Christian Bogos
parent 3d693aefe5
commit e23759b4a8
2 changed files with 51 additions and 97 deletions

View File

@@ -126,94 +126,52 @@ func runCGREngine(fs []string) (err error) {
// ServiceIndexer will share service references to all services
registry := servmanager.NewServiceRegistry()
gvS := services.NewGlobalVarS(cfg)
caps := services.NewCapService(cfg)
cls := services.NewCommonListenerService(cfg)
anzS := services.NewAnalyzerService(cfg)
cms := services.NewConnManagerService(cfg)
lgs := services.NewLoggerService(cfg, *flags.Logger)
dmS := services.NewDataDBService(cfg, *flags.SetVersions)
sdbS := services.NewStorDBService(cfg, *flags.SetVersions)
configS := services.NewConfigService(cfg)
guardianS := services.NewGuardianService(cfg)
coreS := services.NewCoreService(cfg, cpuPrfF, shdWg)
cacheS := services.NewCacheService(cfg)
fltrS := services.NewFilterService(cfg)
dspS := services.NewDispatcherService(cfg)
ldrs := services.NewLoaderService(cfg)
efs := services.NewExportFailoverService(cfg)
adminS := services.NewAdminSv1Service(cfg)
sessionS := services.NewSessionService(cfg)
attrS := services.NewAttributeService(cfg, dspS)
chrgS := services.NewChargerService(cfg)
routeS := services.NewRouteService(cfg)
resourceS := services.NewResourceService(cfg)
trendS := services.NewTrendService(cfg)
rankingS := services.NewRankingService(cfg)
thS := services.NewThresholdService(cfg)
stS := services.NewStatService(cfg)
erS := services.NewEventReaderService(cfg)
dnsAgent := services.NewDNSAgent(cfg)
fsAgent := services.NewFreeswitchAgent(cfg)
kamAgent := services.NewKamailioAgent(cfg)
janusAgent := services.NewJanusAgent(cfg)
astAgent := services.NewAsteriskAgent(cfg)
radAgent := services.NewRadiusAgent(cfg)
diamAgent := services.NewDiameterAgent(cfg)
httpAgent := services.NewHTTPAgent(cfg)
sipAgent := services.NewSIPAgent(cfg)
eeS := services.NewEventExporterService(cfg)
cdrS := services.NewCDRServer(cfg)
registrarcS := services.NewRegistrarCService(cfg)
rateS := services.NewRateService(cfg)
actionS := services.NewActionService(cfg)
accS := services.NewAccountService(cfg)
tpeS := services.NewTPeService(cfg)
srvManager := servmanager.NewServiceManager(shdWg, cfg, registry, []servmanager.Service{
gvS,
caps,
cls,
anzS,
cms,
lgs,
dmS,
sdbS,
configS,
guardianS,
services.NewGlobalVarS(cfg),
services.NewCapService(cfg),
services.NewCommonListenerService(cfg),
services.NewAnalyzerService(cfg),
services.NewConnManagerService(cfg),
services.NewLoggerService(cfg, *flags.Logger),
services.NewDataDBService(cfg, *flags.SetVersions),
services.NewStorDBService(cfg, *flags.SetVersions),
services.NewConfigService(cfg),
services.NewGuardianService(cfg),
coreS,
cacheS,
fltrS,
dspS,
ldrs,
efs,
adminS,
sessionS,
attrS,
chrgS,
routeS,
resourceS,
trendS,
rankingS,
thS,
stS,
erS,
dnsAgent,
fsAgent,
kamAgent,
janusAgent,
astAgent,
radAgent,
diamAgent,
httpAgent,
sipAgent,
eeS,
cdrS,
registrarcS,
rateS,
actionS,
accS,
tpeS,
services.NewCacheService(cfg),
services.NewFilterService(cfg),
services.NewDispatcherService(cfg),
services.NewLoaderService(cfg),
services.NewExportFailoverService(cfg),
services.NewAdminSv1Service(cfg),
services.NewSessionService(cfg),
services.NewAttributeService(cfg),
services.NewChargerService(cfg),
services.NewRouteService(cfg),
services.NewResourceService(cfg),
services.NewTrendService(cfg),
services.NewRankingService(cfg),
services.NewThresholdService(cfg),
services.NewStatService(cfg),
services.NewEventReaderService(cfg),
services.NewDNSAgent(cfg),
services.NewFreeswitchAgent(cfg),
services.NewKamailioAgent(cfg),
services.NewJanusAgent(cfg),
services.NewAsteriskAgent(cfg),
services.NewRadiusAgent(cfg),
services.NewDiameterAgent(cfg),
services.NewHTTPAgent(cfg),
services.NewSIPAgent(cfg),
services.NewEventExporterService(cfg),
services.NewCDRServer(cfg),
services.NewRegistrarCService(cfg),
services.NewRateService(cfg),
services.NewActionService(cfg),
services.NewAccountService(cfg),
services.NewTPeService(cfg),
})
defer func() {

View File

@@ -30,11 +30,9 @@ import (
)
// NewAttributeService returns the Attribute Service
func NewAttributeService(cfg *config.CGRConfig,
dspS *DispatcherService) *AttributeService {
func NewAttributeService(cfg *config.CGRConfig) *AttributeService {
return &AttributeService{
cfg: cfg,
dspS: dspS,
stateDeps: NewStateDependencies([]string{utils.StateServiceUP, utils.StateServiceDOWN}),
}
}
@@ -44,8 +42,6 @@ type AttributeService struct {
sync.RWMutex
cfg *config.CGRConfig
dspS *DispatcherService
attrS *engine.AttributeS
cl *commonlisteners.CommonListenerS
rpc *apis.AttributeSv1 // useful on restart
@@ -75,12 +71,12 @@ func (attrS *AttributeService) Start(shutdown *utils.SyncedChan, registry *servm
utils.CacheAttributeFilterIndexes); err != nil {
return
}
fs := srvDeps[utils.FilterS].(*FilterService)
dbs := srvDeps[utils.DataDB].(*DataDBService)
fs := srvDeps[utils.FilterS].(*FilterService).FilterS()
dm := srvDeps[utils.DataDB].(*DataDBService).DataManager()
attrS.Lock()
defer attrS.Unlock()
attrS.attrS = engine.NewAttributeService(dbs.DataManager(), fs.FilterS(), attrS.cfg)
attrS.attrS = engine.NewAttributeService(dm, fs, attrS.cfg)
attrS.rpc = apis.NewAttributeSv1(attrS.attrS)
srv, _ := engine.NewService(attrS.rpc)
// srv, _ := birpc.NewService(attrS.rpc, "", false)
@@ -89,7 +85,8 @@ func (attrS *AttributeService) Start(shutdown *utils.SyncedChan, registry *servm
attrS.cl.RpcRegister(s)
}
}
dspShtdChan := attrS.dspS.RegisterShutdownChan(attrS.ServiceName())
dsps := registry.Lookup(utils.DispatcherS).(*DispatcherService)
dspShtdChan := dsps.RegisterShutdownChan(attrS.ServiceName())
go func() {
for {
if _, closed := <-dspShtdChan; closed {
@@ -111,12 +108,11 @@ func (attrS *AttributeService) Reload(_ *utils.SyncedChan, _ *servmanager.Servic
}
// Shutdown stops the service
func (attrS *AttributeService) Shutdown(_ *servmanager.ServiceRegistry) (err error) {
func (attrS *AttributeService) Shutdown(registry *servmanager.ServiceRegistry) (err error) {
attrS.Lock()
attrS.attrS = nil
attrS.rpc = nil
attrS.cl.RpcUnregisterName(utils.AttributeSv1)
attrS.dspS.UnregisterShutdownChan(attrS.ServiceName())
dsps := registry.Lookup(utils.DispatcherS).(*DispatcherService)
dsps.UnregisterShutdownChan(attrS.ServiceName())
attrS.Unlock()
return
}