From e23759b4a8b9b3366da89ee29de274ef2448b47d Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Thu, 16 Jan 2025 12:23:42 +0200 Subject: [PATCH] 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 --- cmd/cgr-engine/cgr-engine.go | 126 ++++++++++++----------------------- services/attributes.go | 22 +++--- 2 files changed, 51 insertions(+), 97 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index b76c354f5..dda7ff30b 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -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() { diff --git a/services/attributes.go b/services/attributes.go index 783e414b3..e14be5b36 100644 --- a/services/attributes.go +++ b/services/attributes.go @@ -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 }