Updated cgr-engine service

This commit is contained in:
Trial97
2021-09-08 09:05:12 +03:00
committed by Dan Christian Bogos
parent cea082eb7f
commit 766f5e303a
4 changed files with 70 additions and 144 deletions

View File

@@ -323,101 +323,6 @@ func main() {
return
}
// init the concurrentRequests
cncReqsLimit := cfg.CoreSCfg().Caps
if utils.ConcurrentReqsLimit != 0 { // used as shared variable
cncReqsLimit = utils.ConcurrentReqsLimit
}
cncReqsStrategy := cfg.CoreSCfg().CapsStrategy
if len(utils.ConcurrentReqsStrategy) != 0 {
cncReqsStrategy = utils.ConcurrentReqsStrategy
}
caps := engine.NewCaps(cncReqsLimit, cncReqsStrategy)
// init the channel here because we need to pass them to connManager
internalServeManagerChan := make(chan birpc.ClientConnector, 1)
internalConfigChan := make(chan birpc.ClientConnector, 1)
internalCoreSv1Chan := make(chan birpc.ClientConnector, 1)
internalCacheSChan := make(chan birpc.ClientConnector, 1)
internalGuardianSChan := make(chan birpc.ClientConnector, 1)
internalAnalyzerSChan := make(chan birpc.ClientConnector, 1)
internalCDRServerChan := make(chan birpc.ClientConnector, 1)
internalAttributeSChan := make(chan birpc.ClientConnector, 1)
internalDispatcherSChan := make(chan birpc.ClientConnector, 1)
internalSessionSChan := make(chan birpc.ClientConnector, 1)
internalChargerSChan := make(chan birpc.ClientConnector, 1)
internalThresholdSChan := make(chan birpc.ClientConnector, 1)
internalStatSChan := make(chan birpc.ClientConnector, 1)
internalResourceSChan := make(chan birpc.ClientConnector, 1)
internalRouteSChan := make(chan birpc.ClientConnector, 1)
internalAdminSChan := make(chan birpc.ClientConnector, 1)
internalLoaderSChan := make(chan birpc.ClientConnector, 1)
internalEEsChan := make(chan birpc.ClientConnector, 1)
internalRateSChan := make(chan birpc.ClientConnector, 1)
internalActionSChan := make(chan birpc.ClientConnector, 1)
internalAccountSChan := make(chan birpc.ClientConnector, 1)
// initialize the connManager before creating the DMService
// because we need to pass the connection to it
connManager := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAnalyzer): internalAnalyzerSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAdminS): internalAdminSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): internalAttributeSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): internalCacheSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs): internalCDRServerChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): internalChargerSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaGuardian): internalGuardianSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaLoaders): internalLoaderSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): internalResourceSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS): internalSessionSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats): internalStatSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRoutes): internalRouteSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): internalThresholdSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaServiceManager): internalServeManagerChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaConfig): internalConfigChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCore): internalCoreSv1Chan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaEEs): internalEEsChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS): internalRateSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaDispatchers): internalDispatcherSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAccounts): internalAccountSChan,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaActions): internalActionSChan,
utils.ConcatenatedKey(rpcclient.BiRPCInternal, utils.MetaSessionS): internalSessionSChan,
})
srvDep := map[string]*sync.WaitGroup{
utils.AnalyzerS: new(sync.WaitGroup),
utils.AdminS: new(sync.WaitGroup),
utils.AsteriskAgent: new(sync.WaitGroup),
utils.AttributeS: new(sync.WaitGroup),
utils.CDRServer: new(sync.WaitGroup),
utils.ChargerS: new(sync.WaitGroup),
utils.CoreS: new(sync.WaitGroup),
utils.DataDB: new(sync.WaitGroup),
utils.DiameterAgent: new(sync.WaitGroup),
utils.RegistrarC: new(sync.WaitGroup),
utils.DispatcherS: new(sync.WaitGroup),
utils.DNSAgent: new(sync.WaitGroup),
utils.EEs: new(sync.WaitGroup),
utils.ERs: new(sync.WaitGroup),
utils.FreeSWITCHAgent: new(sync.WaitGroup),
utils.GlobalVarS: new(sync.WaitGroup),
utils.HTTPAgent: new(sync.WaitGroup),
utils.KamailioAgent: new(sync.WaitGroup),
utils.LoaderS: new(sync.WaitGroup),
utils.RadiusAgent: new(sync.WaitGroup),
utils.RateS: new(sync.WaitGroup),
utils.ResourceS: new(sync.WaitGroup),
utils.RouteS: new(sync.WaitGroup),
utils.SchedulerS: new(sync.WaitGroup),
utils.SessionS: new(sync.WaitGroup),
utils.SIPAgent: new(sync.WaitGroup),
utils.StatS: new(sync.WaitGroup),
utils.StorDB: new(sync.WaitGroup),
utils.ThresholdS: new(sync.WaitGroup),
utils.ActionS: new(sync.WaitGroup),
utils.AccountS: new(sync.WaitGroup),
}
srvManager.StartServices()
// Start FilterS
go startFilterService(filterSChan, cacheS, connManager,

View File

@@ -48,7 +48,8 @@ type CGREngine struct {
cM *engine.ConnManager
server *cores.Server
cS *cores.CoreService
cS *cores.CoreService
iFilterSCh chan *engine.FilterS
}
func (cgr *CGREngine) AddService(service servmanager.Service, connName, apiPrefix string,
@@ -89,8 +90,8 @@ func (cgr *CGREngine) InitConfigFromPath(path, nodeID string, lgLevel int) (err
return
}
func (cgr *CGREngine) InitServices(ctx *context.Context, shtDwn context.CancelFunc, pprofPath string, cpuPrfFl io.Closer, memPrfDir string, memPrfStop chan struct{}) (err error) {
iFilterSCh := make(chan *engine.FilterS, 1)
func (cgr *CGREngine) InitServices(ctx *context.Context, shtDw context.CancelFunc, httpPrfPath string, cpuPrfFl io.Closer, memPrfDir string, memPrfStop chan struct{}) (err error) {
cgr.iFilterSCh = make(chan *engine.FilterS, 1)
// init the channel here because we need to pass them to connManager
iServeManagerCh := make(chan birpc.ClientConnector, 1)
iConfigCh := make(chan birpc.ClientConnector, 1)
@@ -213,12 +214,12 @@ func (cgr *CGREngine) InitServices(ctx *context.Context, shtDwn context.CancelFu
if cgr.cfg.ConfigSCfg().Enabled {
cgr.server.RegisterHTTPFunc(cgr.cfg.ConfigSCfg().URL, config.HandlerConfigS)
}
if pprofPath != utils.EmptyString {
cgr.server.RegisterProfiler(pprofPath)
if httpPrfPath != utils.EmptyString {
cgr.server.RegisterProfiler(httpPrfPath)
}
// init AnalyzerS
anz := NewAnalyzerService(cgr.cfg, cgr.server, iFilterSCh, iAnalyzerSCh, cgr.srvDep, shtDwn)
anz := NewAnalyzerService(cgr.cfg, cgr.server, cgr.iFilterSCh, iAnalyzerSCh, cgr.srvDep, shtDw)
if anz.ShouldRun() {
cgr.shdWg.Add(1)
if err = anz.Start(); err != nil {
@@ -227,7 +228,7 @@ func (cgr *CGREngine) InitServices(ctx *context.Context, shtDwn context.CancelFu
}
// init CoreSv1
coreS := NewCoreService(cgr.cfg, caps, cgr.server, iCoreSv1Ch, anz, cpuPrfFl, memPrfDir, memPrfStop, &cgr.shdWg, cgr.srvDep, shtDwn)
coreS := NewCoreService(cgr.cfg, caps, cgr.server, iCoreSv1Ch, anz, cpuPrfFl, memPrfDir, memPrfStop, &cgr.shdWg, cgr.srvDep, shtDw)
cgr.shdWg.Add(1)
if err = coreS.Start(); err != nil {
return
@@ -235,7 +236,7 @@ func (cgr *CGREngine) InitServices(ctx *context.Context, shtDwn context.CancelFu
cgr.cS = coreS.GetCoreS()
// init CacheS
cacheS := cgrInitCacheS(ctx, shtDwn, iCacheSCh, cgr.server, cgr.cfg, dmService.GetDM(), anz, coreS.GetCoreS().CapsStats)
cacheS := cgrInitCacheS(ctx, shtDw, iCacheSCh, cgr.server, cgr.cfg, dmService.GetDM(), anz, coreS.GetCoreS().CapsStats)
engine.Cache = cacheS
// init GuardianSv1
@@ -243,50 +244,58 @@ func (cgr *CGREngine) InitServices(ctx *context.Context, shtDwn context.CancelFu
// Start ServiceManager
cgr.srvManager = servmanager.NewServiceManager(cgr.cfg, &cgr.shdWg, cgr.cM)
dspS := NewDispatcherService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server, iDispatcherSCh, cgr.cM, anz, cgr.srvDep)
attrS := NewAttributeService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server, iAttributeSCh, anz, dspS, cgr.srvDep)
dspS := NewDispatcherService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server, iDispatcherSCh, cgr.cM, anz, cgr.srvDep)
attrS := NewAttributeService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server, iAttributeSCh, anz, dspS, cgr.srvDep)
dspH := NewRegistrarCService(cgr.cfg, cgr.server, cgr.cM, anz, cgr.srvDep)
chrS := NewChargerService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server,
chrS := NewChargerService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server,
iChargerSCh, cgr.cM, anz, cgr.srvDep)
tS := NewThresholdService(cgr.cfg, dmService, cacheS, iFilterSCh,
tS := NewThresholdService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh,
cgr.cM, cgr.server, iThresholdSCh, anz, cgr.srvDep)
stS := NewStatService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server,
stS := NewStatService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server,
iStatSCh, cgr.cM, anz, cgr.srvDep)
reS := NewResourceService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server,
reS := NewResourceService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server,
iResourceSCh, cgr.cM, anz, cgr.srvDep)
routeS := NewRouteService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.server,
routeS := NewRouteService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.server,
iRouteSCh, cgr.cM, anz, cgr.srvDep)
admS := NewAdminSv1Service(cgr.cfg, dmService, storDBService, iFilterSCh, cgr.server,
admS := NewAdminSv1Service(cgr.cfg, dmService, storDBService, cgr.iFilterSCh, cgr.server,
iAdminSCh, cgr.cM, anz, cgr.srvDep)
cdrS := NewCDRServer(cgr.cfg, dmService, storDBService, iFilterSCh, cgr.server, iCDRServerCh,
cdrS := NewCDRServer(cgr.cfg, dmService, storDBService, cgr.iFilterSCh, cgr.server, iCDRServerCh,
cgr.cM, anz, cgr.srvDep)
smg := NewSessionService(cgr.cfg, dmService, cgr.server, iSessionSCh, cgr.cM, anz, cgr.srvDep, shtDwn)
smg := NewSessionService(cgr.cfg, dmService, cgr.server, iSessionSCh, cgr.cM, anz, cgr.srvDep, shtDw)
ldrs := NewLoaderService(cgr.cfg, dmService, iFilterSCh, cgr.server,
ldrs := NewLoaderService(cgr.cfg, dmService, cgr.iFilterSCh, cgr.server,
iLoaderSCh, cgr.cM, anz, cgr.srvDep)
cgr.srvManager.AddServices(gvService, attrS, chrS, tS, stS, reS, routeS,
admS, cdrS, smg, coreS,
NewEventReaderService(cgr.cfg, iFilterSCh, cgr.cM, cgr.srvDep, shtDwn),
NewDNSAgent(cgr.cfg, iFilterSCh, cgr.cM, cgr.srvDep, shtDwn),
NewFreeswitchAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDwn),
NewKamailioAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDwn),
NewAsteriskAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDwn), // partial reload
NewRadiusAgent(cgr.cfg, iFilterSCh, cgr.cM, cgr.srvDep, shtDwn), // partial reload
NewDiameterAgent(cgr.cfg, iFilterSCh, cgr.cM, cgr.srvDep, shtDwn), // partial reload
NewHTTPAgent(cgr.cfg, iFilterSCh, cgr.server, cgr.cM, cgr.srvDep), // no reload
NewEventReaderService(cgr.cfg, cgr.iFilterSCh, cgr.cM, cgr.srvDep, shtDw),
NewDNSAgent(cgr.cfg, cgr.iFilterSCh, cgr.cM, cgr.srvDep, shtDw),
NewFreeswitchAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDw),
NewKamailioAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDw),
NewAsteriskAgent(cgr.cfg, cgr.cM, cgr.srvDep, shtDw), // partial reload
NewRadiusAgent(cgr.cfg, cgr.iFilterSCh, cgr.cM, cgr.srvDep, shtDw), // partial reload
NewDiameterAgent(cgr.cfg, cgr.iFilterSCh, cgr.cM, cgr.srvDep, shtDw), // partial reload
NewHTTPAgent(cgr.cfg, cgr.iFilterSCh, cgr.server, cgr.cM, cgr.srvDep), // no reload
ldrs, anz, dspS, dspH, dmService, storDBService,
NewEventExporterService(cgr.cfg, iFilterSCh,
NewEventExporterService(cgr.cfg, cgr.iFilterSCh,
cgr.cM, cgr.server, iEEsCh, anz, cgr.srvDep),
NewRateService(cgr.cfg, cacheS, iFilterSCh, dmService,
NewRateService(cgr.cfg, cacheS, cgr.iFilterSCh, dmService,
cgr.server, iRateSCh, anz, cgr.srvDep),
NewSIPAgent(cgr.cfg, iFilterSCh, cgr.cM, cgr.srvDep, shtDwn),
NewActionService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.cM, cgr.server, iActionSCh, anz, cgr.srvDep),
NewAccountService(cgr.cfg, dmService, cacheS, iFilterSCh, cgr.cM, cgr.server, iAccountSCh, anz, cgr.srvDep),
NewSIPAgent(cgr.cfg, cgr.iFilterSCh, cgr.cM, cgr.srvDep, shtDw),
NewActionService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.cM, cgr.server, iActionSCh, anz, cgr.srvDep),
NewAccountService(cgr.cfg, dmService, cacheS, cgr.iFilterSCh, cgr.cM, cgr.server, iAccountSCh, anz, cgr.srvDep),
)
cgr.srvManager.StartServices(ctx, shtDw)
// Start FilterS
go cgrStartFilterService(ctx, cgr.iFilterSCh, cacheS, cgr.cM,
cgr.cfg, dmService.GetDM())
cgrInitServiceManagerV1(iServeManagerCh, cgr.srvManager, cgr.server, anz)
cgrInitConfigSv1(iConfigCh, cgr.cfg, cgr.server, anz)
return
}
@@ -309,28 +318,28 @@ func (cgr *CGREngine) Start(ctx *context.Context, shtDw context.CancelFunc, flag
cgr.shdWg.Add(1)
go cgrSingnalHandler(ctx, shtDw, cgr.cfg, &cgr.shdWg)
var stopMemProf chan struct{}
var memPrfStop chan struct{}
if *flags.MemPrfDir != utils.EmptyString {
cgr.shdWg.Add(1)
stopMemProf = make(chan struct{})
go cores.MemProfiling(*flags.MemPrfDir, *flags.MemPrfInterval, *flags.MemPrfNoF, &cgr.shdWg, stopMemProf, shtDw)
memPrfStop = make(chan struct{})
go cores.MemProfiling(*flags.MemPrfDir, *flags.MemPrfInterval, *flags.MemPrfNoF, &cgr.shdWg, memPrfStop, shtDw)
defer func() { //here
if cgr.cS == nil {
close(stopMemProf)
close(memPrfStop)
}
}()
}
var cpuProfileFile io.Closer
var cpuPrfF io.Closer
if *flags.CpuPrfDir != utils.EmptyString {
cpuProfileFile, err = cores.StartCPUProfiling(path.Join(*flags.CpuPrfDir, utils.CpuPathCgr))
if err != nil {
if cpuPrfF, err = cores.StartCPUProfiling(
path.Join(*flags.CpuPrfDir, utils.CpuPathCgr)); err != nil {
return
}
defer func() { //here
if cgr.cS == nil {
pprof.StopCPUProfile()
cpuProfileFile.Close()
cpuPrfF.Close()
}
}()
}
@@ -371,5 +380,22 @@ func (cgr *CGREngine) Start(ctx *context.Context, shtDw context.CancelFunc, flag
utils.Logger.Info(fmt.Sprintf("<CoreS> starting version <%s><%s>", vers, goVers))
cgr.cfg.LazySanityCheck()
if err = cgr.InitServices(ctx, shtDw, *flags.HttpPrfPath, cpuPrfF, *flags.MemPrfDir, memPrfStop); err != nil {
return
}
if *preload != utils.EmptyString {
runPreload(ldrs, internalLoaderSChan, shdChan)
}
// Serve rpc connections
// go startRPC(server, internalAdminSChan, internalCDRServerChan,
// internalResourceSChan, internalStatSChan,
// internalAttributeSChan, internalChargerSChan, internalThresholdSChan,
// internalRouteSChan, internalSessionSChan, internalAnalyzerSChan,
// internalDispatcherSChan, internalLoaderSChan,
// internalCacheSChan, internalEEsChan, internalRateSChan, internalActionSChan,
// internalAccountSChan, shdChan)
return
}

View File

@@ -47,7 +47,7 @@ func NewCGREngineFlags() *CGREngineFlags {
CfgPath: fs.String(utils.CfgPathCgr, utils.ConfigPath, "Configuration directory path."),
Version: fs.Bool(utils.VersionCgr, false, "Prints the application version."),
PidFile: fs.String(utils.PidCgr, utils.EmptyString, "Write pid file"),
HttPrfPath: fs.String(utils.HttpPrfPthCgr, utils.EmptyString, "http address used for program profiling"),
HttpPrfPath: fs.String(utils.HttpPrfPthCgr, utils.EmptyString, "http address used for program profiling"),
CpuPrfDir: fs.String(utils.CpuProfDirCgr, utils.EmptyString, "write cpu profile to files"),
MemPrfDir: fs.String(utils.MemProfDirCgr, utils.EmptyString, "write memory profile to file"),
MemPrfInterval: fs.Duration(utils.MemProfIntervalCgr, 5*time.Second, "Time between memory profile saves"),
@@ -68,7 +68,7 @@ type CGREngineFlags struct {
CfgPath *string
Version *bool
PidFile *string
HttPrfPath *string
HttpPrfPath *string
CpuPrfDir *string
MemPrfDir *string
MemPrfInterval *time.Duration
@@ -184,11 +184,7 @@ func cgrInitCacheS(ctx *context.Context, shutdown context.CancelFunc,
if !cfg.DispatcherSCfg().Enabled {
server.RpcRegister(chSv1)
}
var rpc birpc.ClientConnector = chSv1
if anz.IsRunning() {
rpc = anz.GetAnalyzerS().NewAnalyzerConnector(rpc, utils.MetaInternal, utils.EmptyString, utils.CacheS)
}
iCacheSCh <- rpc
iCacheSCh <- anz.GetInternalCodec(chSv1, utils.CacheS)
return
}

View File

@@ -56,7 +56,7 @@ func (srvMngr *ServiceManager) GetConfig() *config.CGRConfig {
}
// StartServices starts all enabled services
func (srvMngr *ServiceManager) StartServices(ctx *context.Context, shtDwn context.CancelFunc) (err error) {
func (srvMngr *ServiceManager) StartServices(ctx *context.Context, shtDwn context.CancelFunc) {
go srvMngr.handleReload(ctx, shtDwn)
for _, service := range srvMngr.subsystems {
if service.ShouldRun() && !service.IsRunning() {
@@ -71,7 +71,6 @@ func (srvMngr *ServiceManager) StartServices(ctx *context.Context, shtDwn contex
}
}
// startServer()
return
}
// AddServices adds given services