diff --git a/services/cgr-engine.go b/services/cgr-engine.go index bc063999c..ae089d302 100644 --- a/services/cgr-engine.go +++ b/services/cgr-engine.go @@ -123,43 +123,6 @@ func (cgr *CGREngine) AddService(service servmanager.Service, connName, apiPrefi cgr.cM.AddInternalConn(connName, apiPrefix, iConnCh) } -func InitConfigFromPath(path, nodeID string, lgLevel int) (cfg *config.CGRConfig, err error) { - // Init config - if cfg, err = config.NewCGRConfigFromPath(path); err != nil { - err = fmt.Errorf("could not parse config: <%s>", err) - return - } - if cfg.ConfigDBCfg().Type != utils.MetaInternal { - var d config.ConfigDB - if d, err = engine.NewDataDBConn(cfg.ConfigDBCfg().Type, - cfg.ConfigDBCfg().Host, cfg.ConfigDBCfg().Port, - cfg.ConfigDBCfg().Name, cfg.ConfigDBCfg().User, - cfg.ConfigDBCfg().Password, cfg.GeneralCfg().DBDataEncoding, - cfg.ConfigDBCfg().Opts); err != nil { // Cannot configure getter database, show stopper - err = fmt.Errorf("could not configure configDB: <%s>", err) - return - } - if err = cfg.LoadFromDB(d); err != nil { - err = fmt.Errorf("could not parse config from DB: <%s>", err) - return - } - } - if nodeID != utils.EmptyString { - cfg.GeneralCfg().NodeID = nodeID - } - if lgLevel != -1 { // Modify the log level if provided by command arguments - cfg.GeneralCfg().LogLevel = lgLevel - } - if utils.ConcurrentReqsLimit != 0 { // used as shared variable - cfg.CoreSCfg().Caps = utils.ConcurrentReqsLimit - } - if len(utils.ConcurrentReqsStrategy) != 0 { - cfg.CoreSCfg().CapsStrategy = utils.ConcurrentReqsStrategy - } - config.SetCgrConfig(cfg) // Share the config object - return -} - func (cgr *CGREngine) InitServices(httpPrfPath string, cpuPrfFl io.Closer, memPrfDir string, memPrfStop chan struct{}) (err error) { if len(cgr.cfg.HTTPCfg().RegistrarSURL) != 0 { cgr.server.RegisterHTTPFunc(cgr.cfg.HTTPCfg().RegistrarSURL, registrarc.Registrar) @@ -450,6 +413,13 @@ func RunCGREngine(fs []string) (err error) { if err = cgr.Init(ctx, cancel, flags, vers); err != nil { return } + + // cgr-manager + // iConn := make(chan birpc.ClientConnector) + // cgrM := NewCGRManager(cfg, cgr.cM, iConn, cgr.srvDep) + // cgr.AddService(cgrM, utils.ConcatenatedKey(utils.MetaInternal, "CgrManager"), "CgrmanagerSv1", iConn) + // + if err = cgr.StartServices(ctx, cancel, *flags.Preload); err != nil { return } diff --git a/services/cgr-manager.go b/services/cgr-manager.go new file mode 100644 index 000000000..a5969d0e5 --- /dev/null +++ b/services/cgr-manager.go @@ -0,0 +1,79 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package services + +import ( + "sync" + + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/servmanager" +) + +// NewCGRManager . +func NewCGRManager(cfg *config.CGRConfig, cM *engine.ConnManager, + iConnCh chan birpc.ClientConnector, + srvDep map[string]*sync.WaitGroup) servmanager.Service { + return &CGRManager{ + cfg: cfg, + srvDep: srvDep, + cM: cM, + iConnCh: iConnCh, + } +} + +// CGRManager implements Agent interface +type CGRManager struct { + cfg *config.CGRConfig + srvDep map[string]*sync.WaitGroup + cM *engine.ConnManager + iConnCh chan birpc.ClientConnector +} + +// Start should handle the sercive start +func (gv *CGRManager) Start(*context.Context, context.CancelFunc) error { + return nil +} + +// Reload handles the change of config +func (gv *CGRManager) Reload(*context.Context, context.CancelFunc) error { + return nil +} + +// Shutdown stops the service +func (gv *CGRManager) Shutdown() error { + return nil +} + +// IsRunning returns if the service is running +func (gv *CGRManager) IsRunning() bool { + return true +} + +// ServiceName returns the service name +func (gv *CGRManager) ServiceName() string { + return "CGRManager" +} + +// ShouldRun returns if the service should be running +func (gv *CGRManager) ShouldRun() bool { + return true +} diff --git a/services/libcgr-engine.go b/services/libcgr-engine.go index 39ac070a7..a36b90372 100644 --- a/services/libcgr-engine.go +++ b/services/libcgr-engine.go @@ -228,12 +228,39 @@ func waitForFilterS(ctx *context.Context, fsCh chan *engine.FilterS) (filterS *e return } -func getCacheS(ctx *context.Context, csCh chan *engine.CacheS) (cS *engine.CacheS, err error) { - select { - case <-ctx.Done(): - err = ctx.Err() - case cS = <-csCh: - csCh <- cS +func InitConfigFromPath(path, nodeID string, lgLevel int) (cfg *config.CGRConfig, err error) { + // Init config + if cfg, err = config.NewCGRConfigFromPath(path); err != nil { + err = fmt.Errorf("could not parse config: <%s>", err) + return } + if cfg.ConfigDBCfg().Type != utils.MetaInternal { + var d config.ConfigDB + if d, err = engine.NewDataDBConn(cfg.ConfigDBCfg().Type, + cfg.ConfigDBCfg().Host, cfg.ConfigDBCfg().Port, + cfg.ConfigDBCfg().Name, cfg.ConfigDBCfg().User, + cfg.ConfigDBCfg().Password, cfg.GeneralCfg().DBDataEncoding, + cfg.ConfigDBCfg().Opts); err != nil { // Cannot configure getter database, show stopper + err = fmt.Errorf("could not configure configDB: <%s>", err) + return + } + if err = cfg.LoadFromDB(d); err != nil { + err = fmt.Errorf("could not parse config from DB: <%s>", err) + return + } + } + if nodeID != utils.EmptyString { + cfg.GeneralCfg().NodeID = nodeID + } + if lgLevel != -1 { // Modify the log level if provided by command arguments + cfg.GeneralCfg().LogLevel = lgLevel + } + if utils.ConcurrentReqsLimit != 0 { // used as shared variable + cfg.CoreSCfg().Caps = utils.ConcurrentReqsLimit + } + if len(utils.ConcurrentReqsStrategy) != 0 { + cfg.CoreSCfg().CapsStrategy = utils.ConcurrentReqsStrategy + } + config.SetCgrConfig(cfg) // Share the config object return }