diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index dabc6d1f5..13da69960 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -146,19 +146,19 @@ func runCGREngine(fs []string) (err error) { anzS := services.NewAnalyzerService(cfg, clsCh, iFilterSCh, srvIdxr) coreS := services.NewCoreService(cfg, caps, clsCh, cpuPrfF, shdWg, srvIdxr) cacheS := services.NewCacheService(cfg, dmS, connMgr, clsCh, coreS, srvIdxr) - dspS := services.NewDispatcherService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvIdxr) + dspS := services.NewDispatcherService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvIdxr) ldrs := services.NewLoaderService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvIdxr) efs := services.NewExportFailoverService(cfg, connMgr, clsCh, srvIdxr) adminS := services.NewAdminSv1Service(cfg, dmS, sdbS, iFilterSCh, clsCh, connMgr, srvIdxr) sessionS := services.NewSessionService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvIdxr) - attrS := services.NewAttributeService(cfg, dmS, cacheS, iFilterSCh, clsCh, dspS, srvIdxr) - chrgS := services.NewChargerService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvIdxr) - routeS := services.NewRouteService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvIdxr) - resourceS := services.NewResourceService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) - trendS := services.NewTrendService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) - rankingS := services.NewRankingService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) - thS := services.NewThresholdService(cfg, dmS, cacheS, iFilterSCh, connMgr, clsCh, srvDep, srvIdxr) - stS := services.NewStatService(cfg, dmS, cacheS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) + attrS := services.NewAttributeService(cfg, dmS, iFilterSCh, clsCh, dspS, srvIdxr) + chrgS := services.NewChargerService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvIdxr) + routeS := services.NewRouteService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvIdxr) + resourceS := services.NewResourceService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) + trendS := services.NewTrendService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) + rankingS := services.NewRankingService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) + thS := services.NewThresholdService(cfg, dmS, iFilterSCh, connMgr, clsCh, srvDep, srvIdxr) + stS := services.NewStatService(cfg, dmS, iFilterSCh, clsCh, connMgr, srvDep, srvIdxr) erS := services.NewEventReaderService(cfg, iFilterSCh, connMgr, clsCh, srvIdxr) dnsAgent := services.NewDNSAgent(cfg, iFilterSCh, connMgr, srvIdxr) fsAgent := services.NewFreeswitchAgent(cfg, connMgr, srvIdxr) @@ -172,9 +172,9 @@ func runCGREngine(fs []string) (err error) { eeS := services.NewEventExporterService(cfg, iFilterSCh, connMgr, clsCh, srvIdxr) cdrS := services.NewCDRServer(cfg, dmS, sdbS, iFilterSCh, clsCh, connMgr, srvIdxr) registrarcS := services.NewRegistrarCService(cfg, connMgr, srvIdxr) - rateS := services.NewRateService(cfg, cacheS, iFilterSCh, dmS, clsCh, srvIdxr) - actionS := services.NewActionService(cfg, dmS, cacheS, iFilterSCh, connMgr, clsCh, srvIdxr) - accS := services.NewAccountService(cfg, dmS, cacheS, iFilterSCh, connMgr, clsCh, srvIdxr) + rateS := services.NewRateService(cfg, iFilterSCh, dmS, clsCh, srvIdxr) + actionS := services.NewActionService(cfg, dmS, iFilterSCh, connMgr, clsCh, srvIdxr) + accS := services.NewAccountService(cfg, dmS, iFilterSCh, connMgr, clsCh, srvIdxr) tpeS := services.NewTPeService(cfg, connMgr, dmS, clsCh, srvIdxr) srvManager := servmanager.NewServiceManager(shdWg, connMgr, cfg, srvIdxr, []servmanager.Service{ diff --git a/services/accounts.go b/services/accounts.go index f9637ca08..9f2034b6a 100644 --- a/services/accounts.go +++ b/services/accounts.go @@ -36,13 +36,12 @@ import ( // NewAccountService returns the Account Service func NewAccountService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, connMgr *engine.ConnManager, clSChan chan *commonlisteners.CommonListenerS, srvIndexer *servmanager.ServiceIndexer) servmanager.Service { return &AccountService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, connMgr: connMgr, clSChan: clSChan, @@ -58,7 +57,6 @@ type AccountService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS acts *accounts.AccountS @@ -81,7 +79,11 @@ func (acts *AccountService) Start(ctx *context.Context, _ context.CancelFunc) (e } acts.cl = <-acts.clSChan acts.clSChan <- acts.cl - if err = acts.cacheS.WaitToPrecache(ctx, + cacheS := acts.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), acts.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.AccountS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheAccounts, utils.CacheAccountsFilterIndexes); err != nil { return diff --git a/services/actions.go b/services/actions.go index b2199a674..282d18db8 100644 --- a/services/actions.go +++ b/services/actions.go @@ -36,7 +36,7 @@ import ( // NewActionService returns the Action Service func NewActionService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, connMgr *engine.ConnManager, clSChan chan *commonlisteners.CommonListenerS, srvIndexer *servmanager.ServiceIndexer) servmanager.Service { @@ -44,7 +44,6 @@ func NewActionService(cfg *config.CGRConfig, dm *DataDBService, connMgr: connMgr, cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, rldChan: make(chan struct{}, 1), @@ -59,7 +58,6 @@ type ActionService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS acts *actions.ActionS @@ -84,7 +82,11 @@ func (acts *ActionService) Start(ctx *context.Context, _ context.CancelFunc) (er acts.cl = <-acts.clSChan acts.clSChan <- acts.cl - if err = acts.cacheS.WaitToPrecache(ctx, + cacheS := acts.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), acts.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.ActionS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheActionProfiles, utils.CacheActionProfilesFilterIndexes); err != nil { return diff --git a/services/attributes.go b/services/attributes.go index eccbcea75..54a6b3658 100644 --- a/services/attributes.go +++ b/services/attributes.go @@ -34,14 +34,13 @@ import ( // NewAttributeService returns the Attribute Service func NewAttributeService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, dspS *DispatcherService, sIndxr *servmanager.ServiceIndexer) servmanager.Service { return &AttributeService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, dspS: dspS, @@ -56,7 +55,6 @@ type AttributeService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService dspS *DispatcherService filterSChan chan *engine.FilterS @@ -83,7 +81,11 @@ func (attrS *AttributeService) Start(ctx *context.Context, _ context.CancelFunc) } attrS.cl = <-attrS.clSChan attrS.clSChan <- attrS.cl - if err = attrS.cacheS.WaitToPrecache(ctx, + cacheS := attrS.serviceIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), attrS.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.AttributeS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheAttributeProfiles, utils.CacheAttributeFilterIndexes); err != nil { return diff --git a/services/chargers.go b/services/chargers.go index 26b1fcc26..0ecd167af 100644 --- a/services/chargers.go +++ b/services/chargers.go @@ -34,13 +34,12 @@ import ( // NewChargerService returns the Charger Service func NewChargerService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvIndexer *servmanager.ServiceIndexer) servmanager.Service { return &ChargerService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -55,7 +54,6 @@ type ChargerService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS chrS *engine.ChargerS @@ -77,7 +75,11 @@ func (chrS *ChargerService) Start(ctx *context.Context, _ context.CancelFunc) (e chrS.cl = <-chrS.clSChan chrS.clSChan <- chrS.cl - if err = chrS.cacheS.WaitToPrecache(ctx, + cacheS := chrS.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), chrS.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.ChargerS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheChargerProfiles, utils.CacheChargerFilterIndexes); err != nil { return diff --git a/services/dispatchers.go b/services/dispatchers.go index 4482ff1ee..bffbbab9c 100644 --- a/services/dispatchers.go +++ b/services/dispatchers.go @@ -33,14 +33,13 @@ import ( // NewDispatcherService returns the Dispatcher Service func NewDispatcherService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvIndexer *servmanager.ServiceIndexer) *DispatcherService { return &DispatcherService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -56,7 +55,6 @@ type DispatcherService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS dspS *dispatchers.DispatcherService @@ -79,7 +77,11 @@ func (dspS *DispatcherService) Start(ctx *context.Context, _ context.CancelFunc) utils.Logger.Info("Starting CGRateS DispatcherS service.") dspS.cl = <-dspS.clSChan dspS.clSChan <- dspS.cl - if err = dspS.cacheS.WaitToPrecache(ctx, + cacheS := dspS.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), dspS.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.DispatcherS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheDispatcherProfiles, utils.CacheDispatcherHosts, utils.CacheDispatcherFilterIndexes); err != nil { diff --git a/services/rankings.go b/services/rankings.go index bac3ec673..499c89e49 100644 --- a/services/rankings.go +++ b/services/rankings.go @@ -34,7 +34,7 @@ import ( // NewRankingService returns the RankingS Service func NewRankingService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvDep map[string]*sync.WaitGroup, @@ -42,7 +42,6 @@ func NewRankingService(cfg *config.CGRConfig, dm *DataDBService, return &RankingService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -57,7 +56,6 @@ type RankingService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS ran *engine.RankingS @@ -81,7 +79,11 @@ func (ran *RankingService) Start(ctx *context.Context, _ context.CancelFunc) (er ran.srvDep[utils.DataDB].Add(1) ran.cl = <-ran.clSChan ran.clSChan <- ran.cl - if err = ran.cacheS.WaitToPrecache(ctx, + cacheS := ran.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), ran.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.RankingS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheRankingProfiles, utils.CacheRankings, ); err != nil { diff --git a/services/rates.go b/services/rates.go index 26cd6592a..fb9cef0d0 100644 --- a/services/rates.go +++ b/services/rates.go @@ -33,12 +33,11 @@ import ( // NewRateService constructs RateService func NewRateService(cfg *config.CGRConfig, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, dmS *DataDBService, clSChan chan *commonlisteners.CommonListenerS, srvIndexer *servmanager.ServiceIndexer) servmanager.Service { return &RateService{ cfg: cfg, - cacheS: cacheS, filterSChan: filterSChan, dmS: dmS, clSChan: clSChan, @@ -54,7 +53,6 @@ type RateService struct { clSChan chan *commonlisteners.CommonListenerS dmS *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS rateS *rates.RateS @@ -111,7 +109,11 @@ func (rs *RateService) Start(ctx *context.Context, _ context.CancelFunc) (err er rs.cl = <-rs.clSChan rs.clSChan <- rs.cl - if err = rs.cacheS.WaitToPrecache(ctx, + cacheS := rs.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), rs.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.RateS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheRateProfiles, utils.CacheRateProfilesFilterIndexes, utils.CacheRateFilterIndexes); err != nil { diff --git a/services/resources.go b/services/resources.go index 70f73b7e5..f48d15678 100644 --- a/services/resources.go +++ b/services/resources.go @@ -33,7 +33,7 @@ import ( // NewResourceService returns the Resource Service func NewResourceService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvDep map[string]*sync.WaitGroup, @@ -41,7 +41,6 @@ func NewResourceService(cfg *config.CGRConfig, dm *DataDBService, return &ResourceService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -57,7 +56,6 @@ type ResourceService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS reS *engine.ResourceS @@ -81,7 +79,11 @@ func (reS *ResourceService) Start(ctx *context.Context, _ context.CancelFunc) (e reS.srvDep[utils.DataDB].Add(1) reS.cl = <-reS.clSChan reS.clSChan <- reS.cl - if err = reS.cacheS.WaitToPrecache(ctx, + cacheS := reS.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), reS.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.ResourceS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheResourceProfiles, utils.CacheResources, utils.CacheResourceFilterIndexes); err != nil { diff --git a/services/routes.go b/services/routes.go index a9c8c34df..3c996d501 100644 --- a/services/routes.go +++ b/services/routes.go @@ -34,14 +34,13 @@ import ( // NewRouteService returns the Route Service func NewRouteService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvIndexer *servmanager.ServiceIndexer) servmanager.Service { return &RouteService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -56,7 +55,6 @@ type RouteService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS routeS *engine.RouteS @@ -78,7 +76,11 @@ func (routeS *RouteService) Start(ctx *context.Context, _ context.CancelFunc) (e routeS.cl = <-routeS.clSChan routeS.clSChan <- routeS.cl - if err = routeS.cacheS.WaitToPrecache(ctx, + cacheS := routeS.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), routeS.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.RouteS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheRouteProfiles, utils.CacheRouteFilterIndexes); err != nil { return diff --git a/services/stats.go b/services/stats.go index 1f519fad8..19c8a080d 100644 --- a/services/stats.go +++ b/services/stats.go @@ -33,7 +33,7 @@ import ( // NewStatService returns the Stat Service func NewStatService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvDep map[string]*sync.WaitGroup, @@ -41,7 +41,6 @@ func NewStatService(cfg *config.CGRConfig, dm *DataDBService, return &StatService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, connMgr: connMgr, @@ -57,7 +56,6 @@ type StatService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS sts *engine.StatS @@ -81,7 +79,11 @@ func (sts *StatService) Start(ctx *context.Context, _ context.CancelFunc) (err e sts.srvDep[utils.DataDB].Add(1) sts.cl = <-sts.clSChan sts.clSChan <- sts.cl - if err = sts.cacheS.WaitToPrecache(ctx, + cacheS := sts.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), sts.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.StatS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheStatQueueProfiles, utils.CacheStatQueues, utils.CacheStatFilterIndexes); err != nil { diff --git a/services/thresholds.go b/services/thresholds.go index 37165f72b..e7e52b7a3 100644 --- a/services/thresholds.go +++ b/services/thresholds.go @@ -33,7 +33,7 @@ import ( // NewThresholdService returns the Threshold Service func NewThresholdService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, connMgr *engine.ConnManager, clSChan chan *commonlisteners.CommonListenerS, srvDep map[string]*sync.WaitGroup, @@ -41,7 +41,6 @@ func NewThresholdService(cfg *config.CGRConfig, dm *DataDBService, return &ThresholdService{ cfg: cfg, dm: dm, - cacheS: cacheS, filterSChan: filterSChan, clSChan: clSChan, srvDep: srvDep, @@ -57,7 +56,6 @@ type ThresholdService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS thrs *engine.ThresholdS @@ -81,7 +79,11 @@ func (thrs *ThresholdService) Start(ctx *context.Context, _ context.CancelFunc) thrs.srvDep[utils.DataDB].Add(1) thrs.cl = <-thrs.clSChan thrs.clSChan <- thrs.cl - if err = thrs.cacheS.WaitToPrecache(ctx, + cacheS := thrs.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), thrs.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.ThresholdS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheThresholdProfiles, utils.CacheThresholds, utils.CacheThresholdFilterIndexes); err != nil { diff --git a/services/trends.go b/services/trends.go index 0aa54ee1a..a75a4e337 100644 --- a/services/trends.go +++ b/services/trends.go @@ -33,7 +33,7 @@ import ( // NewTrendsService returns the TrendS Service func NewTrendService(cfg *config.CGRConfig, dm *DataDBService, - cacheS *CacheService, filterSChan chan *engine.FilterS, + filterSChan chan *engine.FilterS, clSChan chan *commonlisteners.CommonListenerS, connMgr *engine.ConnManager, srvDep map[string]*sync.WaitGroup, @@ -41,7 +41,6 @@ func NewTrendService(cfg *config.CGRConfig, dm *DataDBService, return &TrendService{ cfg: cfg, dm: dm, - cacheS: cacheS, clSChan: clSChan, connMgr: connMgr, srvDep: srvDep, @@ -56,7 +55,6 @@ type TrendService struct { clSChan chan *commonlisteners.CommonListenerS dm *DataDBService - cacheS *CacheService filterSChan chan *engine.FilterS trs *engine.TrendS @@ -80,7 +78,11 @@ func (trs *TrendService) Start(ctx *context.Context, _ context.CancelFunc) (err trs.srvDep[utils.DataDB].Add(1) trs.cl = <-trs.clSChan trs.clSChan <- trs.cl - if err = trs.cacheS.WaitToPrecache(ctx, + cacheS := trs.srvIndexer.GetService(utils.CacheS).(*CacheService) + if utils.StructChanTimeout(cacheS.StateChan(utils.StateServiceUP), trs.cfg.GeneralCfg().ConnectTimeout) { + return utils.NewServiceStateTimeoutError(utils.TrendS, utils.CacheS, utils.StateServiceUP) + } + if err = cacheS.WaitToPrecache(ctx, utils.CacheTrendProfiles, utils.CacheTrends, ); err != nil {