diff --git a/apier/v1/apier.go b/apier/v1/apier.go index fd0c3ce4f..23b1647ad 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -33,7 +33,6 @@ import ( "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/scheduler" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // SchedulerGeter used to avoid ciclic dependency @@ -47,13 +46,10 @@ type ApierV1 struct { DataManager *engine.DataManager Config *config.CGRConfig Responder *engine.Responder - CDRs rpcclient.ClientConnector // FixMe: populate it from cgr-engine - SchedulerService SchedulerGeter // Need to have them capitalize so we can export in V2 + SchedulerService SchedulerGeter // Need to have them capitalize so we can export in V2 HTTPPoster *engine.HTTPPoster FilterS *engine.FilterS //Used for CDR Exporter - CacheS rpcclient.ClientConnector - SchedulerS rpcclient.ClientConnector - AttributeS rpcclient.ClientConnector + ConnMgr *engine.ConnManager } // Call implements rpcclient.ClientConnector interface for internal RPC @@ -220,8 +216,8 @@ func (apiv1 *ApierV1) LoadDestination(attrs AttrLoadDestination, reply *string) return utils.NewErrMandatoryIeMissing("TPid") } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, - attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, apiv1.Config.ApierCfg().CachesConns, + apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -249,7 +245,7 @@ func (apiv1 *ApierV1) LoadRatingPlan(attrs AttrLoadRatingPlan, reply *string) er } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -269,7 +265,7 @@ func (apiv1 *ApierV1) LoadRatingProfile(attrs utils.TPRatingProfile, reply *stri } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -292,7 +288,7 @@ func (apiv1 *ApierV1) LoadSharedGroup(attrs AttrLoadSharedGroup, reply *string) } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -318,7 +314,7 @@ func (apiv1 *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -348,7 +344,7 @@ func (apiv1 *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply if err := dbReader.ReloadCache(caching, true, attrs.ArgDispatcher); err != nil { return utils.NewErrServerError(err) } - if apiv1.SchedulerS != nil { + if len(apiv1.Config.ApierCfg().SchedulerConns) != 0 { utils.Logger.Info("ApierV1.LoadTariffPlanFromStorDb, reloading scheduler.") if err := dbReader.ReloadScheduler(true); err != nil { return utils.NewErrServerError(err) @@ -810,7 +806,7 @@ func (apiv1 *ApierV1) LoadAccountActions(attrs utils.TPAccountActions, reply *st } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -848,7 +844,7 @@ func (apiv1 *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, loader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), engine.NewFileCSVStorage(utils.CSV_SEP, attrs.FolderPath, attrs.Recursive), "", apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -881,7 +877,7 @@ func (apiv1 *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, if err := loader.ReloadCache(caching, true, attrs.ArgDispatcher); err != nil { return utils.NewErrServerError(err) } - if apiv1.SchedulerS != nil { + if len(apiv1.Config.ApierCfg().SchedulerConns) != 0 { utils.Logger.Info("ApierV1.LoadTariffPlanFromFolder, reloading scheduler.") if err := loader.ReloadScheduler(true); err != nil { return utils.NewErrServerError(err) @@ -913,7 +909,7 @@ func (apiv1 *ApierV1) RemoveTPFromFolder(attrs utils.AttrLoadTpFromFolder, reply // create the TpReader loader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), engine.NewFileCSVStorage(utils.CSV_SEP, attrs.FolderPath, attrs.Recursive), "", apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -946,7 +942,7 @@ func (apiv1 *ApierV1) RemoveTPFromFolder(attrs utils.AttrLoadTpFromFolder, reply if err := loader.ReloadCache(caching, true, attrs.ArgDispatcher); err != nil { return utils.NewErrServerError(err) } - if apiv1.SchedulerS != nil { + if len(apiv1.Config.ApierCfg().SchedulerConns) != 0 { utils.Logger.Info("ApierV1.RemoveTPFromFolder, reloading scheduler.") if err := loader.ReloadScheduler(true); err != nil { return utils.NewErrServerError(err) @@ -966,7 +962,7 @@ func (apiv1 *ApierV1) RemoveTPFromStorDB(attrs AttrLoadTpFromStorDb, reply *stri } dbReader, err := engine.NewTpReader(apiv1.DataManager.DataDB(), apiv1.StorDb, attrs.TPid, apiv1.Config.GeneralCfg().DefaultTimezone, - apiv1.CacheS, apiv1.SchedulerS) + apiv1.Config.ApierCfg().CachesConns, apiv1.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -997,7 +993,7 @@ func (apiv1 *ApierV1) RemoveTPFromStorDB(attrs AttrLoadTpFromStorDb, reply *stri if err := dbReader.ReloadCache(caching, true, attrs.ArgDispatcher); err != nil { return utils.NewErrServerError(err) } - if apiv1.SchedulerS != nil { + if len(apiv1.Config.ApierCfg().SchedulerConns) != 0 { utils.Logger.Info("ApierV1.RemoveTPFromStorDB, reloading scheduler.") if err := dbReader.ReloadScheduler(true); err != nil { return utils.NewErrServerError(err) @@ -1268,23 +1264,27 @@ func (apiv1 *ApierV1) CallCache(cacheOpt string, args utils.ArgsGetCacheItem) (e case utils.META_NONE: return case utils.MetaReload: - if err = apiv1.CacheS.Call(utils.CacheSv1ReloadCache, utils.AttrReloadCacheWithArgDispatcher{ - AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { + if err = apiv1.ConnMgr.Call(apiv1.Config.ApierCfg().CachesConns, + utils.CacheSv1ReloadCache, utils.AttrReloadCacheWithArgDispatcher{ + AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { return err } case utils.MetaLoad: - if err = apiv1.CacheS.Call(utils.CacheSv1LoadCache, utils.AttrReloadCacheWithArgDispatcher{ - AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { + if err = apiv1.ConnMgr.Call(apiv1.Config.ApierCfg().CachesConns, + utils.CacheSv1LoadCache, utils.AttrReloadCacheWithArgDispatcher{ + AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { return err } case utils.MetaRemove: - if err = apiv1.CacheS.Call(utils.CacheSv1RemoveItem, + if err = apiv1.ConnMgr.Call(apiv1.Config.ApierCfg().CachesConns, + utils.CacheSv1RemoveItem, &utils.ArgsGetCacheItemWithArgDispatcher{ArgsGetCacheItem: args}, &reply); err != nil { return err } case utils.MetaClear: - if err = apiv1.CacheS.Call(utils.CacheSv1FlushCache, utils.AttrReloadCacheWithArgDispatcher{ - AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { + if err = apiv1.ConnMgr.Call(apiv1.Config.ApierCfg().CachesConns, + utils.CacheSv1FlushCache, utils.AttrReloadCacheWithArgDispatcher{ + AttrReloadCache: composeArgsReload(args)}, &reply); err != nil { return err } } @@ -1373,24 +1373,6 @@ func (apiv1 *ApierV1) GetRatingPlanIDs(args utils.TenantArgWithPaginator, attrPr return nil } -// SetAttributeSConnection sets the new connection to the attribute service -// only used on reload -func (apiv1 *ApierV1) SetAttributeSConnection(attrS rpcclient.ClientConnector) { - apiv1.AttributeS = attrS -} - -// SetCacheSConnection sets the new connection to the cache service -// only used on reload -func (apiv1 *ApierV1) SetCacheSConnection(chS rpcclient.ClientConnector) { - apiv1.CacheS = chS -} - -// SetSchedulerSConnection sets the new connection to the scheduler service -// only used on reload -func (apiv1 *ApierV1) SetSchedulerSConnection(schS rpcclient.ClientConnector) { - apiv1.SchedulerS = schS -} - // SetStorDB sets the new connection for StorDB // only used on reload func (apiv1 *ApierV1) SetStorDB(storDB engine.StorDB) { diff --git a/apier/v1/cdre.go b/apier/v1/cdre.go index 63b7071ba..3df76855e 100644 --- a/apier/v1/cdre.go +++ b/apier/v1/cdre.go @@ -148,7 +148,7 @@ func (api *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.Ex filePath, utils.META_NONE, exportID, exportTemplate.Synchronous, exportTemplate.Attempts, fieldSep, api.Config.GeneralCfg().HttpSkipTlsVerify, api.HTTPPoster, - api.AttributeS, api.FilterS) + api.Config.ApierCfg().AttributeSConns, api.FilterS) if err != nil { return utils.NewErrServerError(err) } @@ -288,7 +288,7 @@ func (api *ApierV1) ExportCDRs(arg ArgExportCDRs, reply *RplExportedCDRs) (err e filePath, utils.META_NONE, exportID, synchronous, attempts, fieldSep, api.Config.GeneralCfg().HttpSkipTlsVerify, - api.HTTPPoster, api.AttributeS, api.FilterS) + api.HTTPPoster, api.Config.ApierCfg().AttributeSConns, api.FilterS) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 94e7143c0..055635277 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -57,7 +57,7 @@ func (apiv2 *ApierV2) LoadRatingProfile(attrs AttrLoadRatingProfile, reply *stri tpRpf := &utils.TPRatingProfile{TPid: attrs.TPid} dbReader, err := engine.NewTpReader(apiv2.DataManager.DataDB(), apiv2.StorDb, attrs.TPid, apiv2.Config.GeneralCfg().DefaultTimezone, - apiv2.CacheS, apiv2.SchedulerS) + apiv2.Config.ApierCfg().CachesConns, apiv2.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -80,7 +80,7 @@ func (apiv2 *ApierV2) LoadAccountActions(attrs AttrLoadAccountActions, reply *st } dbReader, err := engine.NewTpReader(apiv2.DataManager.DataDB(), apiv2.StorDb, attrs.TPid, apiv2.Config.GeneralCfg().DefaultTimezone, - apiv2.CacheS, apiv2.SchedulerS) + apiv2.Config.ApierCfg().CachesConns, apiv2.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -113,7 +113,7 @@ func (apiv2 *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, } loader, err := engine.NewTpReader(apiv2.DataManager.DataDB(), engine.NewFileCSVStorage(utils.CSV_SEP, attrs.FolderPath, attrs.Recursive), "", apiv2.Config.GeneralCfg().DefaultTimezone, - apiv2.CacheS, apiv2.SchedulerS) + apiv2.Config.ApierCfg().CachesConns, apiv2.Config.ApierCfg().SchedulerConns) if err != nil { return utils.NewErrServerError(err) } @@ -144,7 +144,7 @@ func (apiv2 *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, if err := loader.ReloadCache(caching, true, attrs.ArgDispatcher); err != nil { return utils.NewErrServerError(err) } - if apiv2.SchedulerS != nil { + if len(apiv2.Config.ApierCfg().SchedulerConns) != 0 { utils.Logger.Info("ApierV2.LoadTariffPlanFromFolder, reloading scheduler.") if err := loader.ReloadScheduler(true); err != nil { return utils.NewErrServerError(err) diff --git a/apier/v2/cdre.go b/apier/v2/cdre.go index f31694604..b61715079 100644 --- a/apier/v2/cdre.go +++ b/apier/v2/cdre.go @@ -105,7 +105,7 @@ func (apiv2 *ApierV2) ExportCdrsToFile(attr AttrExportCdrsToFile, reply *utils.E cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, filePath, utils.META_NONE, exportID, exportTemplate.Synchronous, exportTemplate.Attempts, fieldSep, apiv2.Config.GeneralCfg().HttpSkipTlsVerify, - apiv2.HTTPPoster, apiv2.AttributeS, apiv2.FilterS) + apiv2.HTTPPoster, apiv2.Config.ApierCfg().AttributeSConns, apiv2.FilterS) if err != nil { return utils.NewErrServerError(err) } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index ad7d19494..7b1877c6d 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -498,6 +498,11 @@ func main() { internalStatSChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency internalResourceSChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency internalSupplierSChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency + internalSchedulerSChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency + internalRALsChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency + internalResponderChan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency + internalAPIerV1Chan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency + internalAPIerV2Chan := make(chan rpcclient.RpcClientConnection, 1) // needed to avod cyclic dependency // init CacheS cacheS := initCacheS(internalCacheSChan, server, dmService.GetDM(), exitChan) @@ -512,8 +517,7 @@ func main() { srvManager := servmanager.NewServiceManager(cfg, exitChan) connManager := services.NewConnManagerService(cfg, map[string]chan rpcclient.RpcClientConnection{ //utils.AnalyzerSv1: anz.GetIntenternalChan(), - //utils.ApierV1: rals.GetAPIv1().GetIntenternalChan(), - //utils.ApierV2: rals.GetAPIv2().GetIntenternalChan(), + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerV1Chan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): internalAttributeSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): internalCacheSChan, //utils.CDRsV1: cdrS.GetIntenternalChan(), @@ -521,17 +525,17 @@ func main() { utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): internalChargerSChan, utils.GuardianSv1: internalGuardianSChan, //utils.LoaderSv1: ldrs.GetIntenternalChan(), - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): internalResourceSChan, - //utils.Responder: rals.GetResponder().GetIntenternalChan(), - //utils.SchedulerSv1: schS.GetIntenternalChan(), - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS): internalSessionSChan, - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS): internalStatSChan, - //utils.SupplierSv1: supS.GetIntenternalChan(), + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): internalResourceSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder): internalResponderChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler): internalSchedulerSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS): internalSessionSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS): internalStatSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSuppliers): internalSupplierSChan, 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.RALsV1: rals.GetIntenternalChan(), + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): internalRALsChan, }) attrS := services.NewAttributeService(cfg, dmService, cacheS, filterSChan, server, internalAttributeSChan) @@ -543,12 +547,16 @@ func main() { internalStatSChan, connManager.GetConnMgr()) reS := services.NewResourceService(cfg, dmService, cacheS, filterSChan, server, internalResourceSChan, connManager.GetConnMgr()) - supS := services.NewSupplierService(cfg, dmService, cacheS, filterSChan, server, internalSupplierSChan, connManager.GetConnMgr()) - schS := services.NewSchedulerService(cfg, dmService, cacheS, filterSChan, server, internalCDRServerChan, dspS.GetIntenternalChan()) + supS := services.NewSupplierService(cfg, dmService, cacheS, filterSChan, server, + internalSupplierSChan, connManager.GetConnMgr()) + + schS := services.NewSchedulerService(cfg, dmService, cacheS, filterSChan, + server, internalSchedulerSChan, connManager.GetConnMgr()) + rals := services.NewRalService(cfg, dmService, storDBService, cacheS, filterSChan, server, - tS.GetIntenternalChan(), stS.GetIntenternalChan(), internalCacheSChan, - schS.GetIntenternalChan(), attrS.GetIntenternalChan(), dspS.GetIntenternalChan(), - schS, exitChan) + internalRALsChan, internalResponderChan, internalAPIerV1Chan, internalAPIerV2Chan, + schS, exitChan, connManager.GetConnMgr()) + cdrS := services.NewCDRServer(cfg, dmService, storDBService, filterSChan, server, internalCDRServerChan, chrS.GetIntenternalChan(), rals.GetResponder().GetIntenternalChan(), attrS.GetIntenternalChan(), tS.GetIntenternalChan(), diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index e81249167..5d8e096c2 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -24,7 +24,6 @@ import ( "log" "os" "strings" - "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -84,12 +83,6 @@ var ( `Separator for csv file (by default "," is used)`) recursive = cgrLoaderFlags.Bool("recursive", false, "Loads data from folder recursive.") - fromStorDB = cgrLoaderFlags.Bool("from_stordb", false, "Load the tariff plan from storDb to dataDb") - toStorDB = cgrLoaderFlags.Bool("to_stordb", false, "Import the tariff plan from files to storDb") - rpcEncoding = cgrLoaderFlags.String("rpc_encoding", utils.MetaJSON, "RPC encoding used <*gob|*json>") - cacheSAddress = cgrLoaderFlags.String("caches_address", dfltCfg.LoaderCgrCfg().CachesConns[0].Address, - "CacheS component to contact for cache reloads, empty to disable automatic cache reloads") - schedulerAddress = cgrLoaderFlags.String("scheduler_address", dfltCfg.LoaderCgrCfg().SchedulerConns[0].Address, "") importID = cgrLoaderFlags.String("import_id", "", "Uniquely identify an import/load, postpended to some automatic fields") timezone = cgrLoaderFlags.String("timezone", "", `Timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB>`) @@ -99,12 +92,10 @@ var ( apiKey = cgrLoaderFlags.String("api_key", "", "Api Key used to comosed ArgDispatcher") routeID = cgrLoaderFlags.String("route_id", "", "RouteID used to comosed ArgDispatcher") - err error - dm *engine.DataManager - storDb engine.LoadStorage - cacheS rpcclient.ClientConnector - schedulerS rpcclient.ClientConnector - loader engine.LoadReader + err error + dm *engine.DataManager + storDb engine.LoadStorage + loader engine.LoadReader ) func main() { @@ -198,29 +189,30 @@ func main() { ldrCfg.LoaderCgrCfg().FieldSeparator = rune((*fieldSep)[0]) } - if *cacheSAddress != dfltCfg.LoaderCgrCfg().CachesConns[0].Address { - ldrCfg.LoaderCgrCfg().CachesConns = make([]*config.RemoteHost, 0) - if *cacheSAddress != "" { - ldrCfg.LoaderCgrCfg().CachesConns = append(ldrCfg.LoaderCgrCfg().CachesConns, - &config.RemoteHost{ - Address: *cacheSAddress, - Transport: *rpcEncoding, - }) - } - } - - if *schedulerAddress != dfltCfg.LoaderCgrCfg().SchedulerConns[0].Address { - ldrCfg.LoaderCgrCfg().SchedulerConns = make([]*config.RemoteHost, 0) - if *schedulerAddress != "" { - ldrCfg.LoaderCgrCfg().SchedulerConns = append(ldrCfg.LoaderCgrCfg().SchedulerConns, - &config.RemoteHost{Address: *schedulerAddress}) - } - } - - if len(ldrCfg.LoaderCgrCfg().CachesConns) != 0 && - *rpcEncoding != dfltCfg.LoaderCgrCfg().CachesConns[0].Transport { - ldrCfg.LoaderCgrCfg().CachesConns[0].Transport = *rpcEncoding - } + // DON"T FORGET TO UPDATE CGR_LOADER WITH CACHEID AND SCHEDID + //if *cacheSAddress != dfltCfg.LoaderCgrCfg().CachesConns[0].Address { + // ldrCfg.LoaderCgrCfg().CachesConns = make([]*config.RemoteHost, 0) + // if *cacheSAddress != "" { + // ldrCfg.LoaderCgrCfg().CachesConns = append(ldrCfg.LoaderCgrCfg().CachesConns, + // &config.RemoteHost{ + // Address: *cacheSAddress, + // Transport: *rpcEncoding, + // }) + // } + //} + // + //if *schedulerAddress != dfltCfg.LoaderCgrCfg().SchedulerConns[0].Address { + // ldrCfg.LoaderCgrCfg().SchedulerConns = make([]*config.RemoteHost, 0) + // if *schedulerAddress != "" { + // ldrCfg.LoaderCgrCfg().SchedulerConns = append(ldrCfg.LoaderCgrCfg().SchedulerConns, + // &config.RemoteHost{Address: *schedulerAddress}) + // } + //} + // + //if len(ldrCfg.LoaderCgrCfg().CachesConns) != 0 && + // *rpcEncoding != dfltCfg.LoaderCgrCfg().CachesConns[0].Transport { + // ldrCfg.LoaderCgrCfg().CachesConns[0].Transport = *rpcEncoding + //} if *importID == "" { *importID = utils.UUIDSha1Prefix() @@ -320,36 +312,8 @@ func main() { loader = engine.NewFileCSVStorage(ldrCfg.LoaderCgrCfg().FieldSeparator, *dataPath, *recursive) } - if len(ldrCfg.LoaderCgrCfg().CachesConns) != 0 { // Init connection to CacheS so we can reload it's data - if cacheS, err = rpcclient.NewRPCClient(utils.TCP, - ldrCfg.LoaderCgrCfg().CachesConns[0].Address, - ldrCfg.LoaderCgrCfg().CachesConns[0].TLS, ldrCfg.TlsCfg().ClientKey, - ldrCfg.TlsCfg().ClientCerificate, ldrCfg.TlsCfg().CaCertificate, 3, 3, - time.Duration(1*time.Second), time.Duration(5*time.Minute), - ldrCfg.LoaderCgrCfg().CachesConns[0].Transport, - nil, false); err != nil { - log.Fatalf("Could not connect to CacheS: %s", err.Error()) - return - } - } else { - log.Print("WARNING: automatic cache reloading is disabled!") - } - - if len(ldrCfg.LoaderCgrCfg().SchedulerConns) != 0 { // Init connection to Scheduler so we can reload it's data - if schedulerS, err = rpcclient.NewRPCClient(utils.TCP, - ldrCfg.LoaderCgrCfg().SchedulerConns[0].Address, - ldrCfg.LoaderCgrCfg().SchedulerConns[0].TLS, ldrCfg.TlsCfg().ClientKey, - ldrCfg.TlsCfg().ClientCerificate, ldrCfg.TlsCfg().CaCertificate, 3, 3, - time.Duration(1*time.Second), time.Duration(5*time.Minute), - ldrCfg.LoaderCgrCfg().SchedulerConns[0].Transport, - nil, false); err != nil { - log.Fatalf("Could not connect to Scheduler: %s", err.Error()) - return - } - } - tpReader, err := engine.NewTpReader(dm.DataDB(), loader, ldrCfg.LoaderCgrCfg().TpID, - ldrCfg.GeneralCfg().DefaultTimezone, cacheS, schedulerS) + ldrCfg.GeneralCfg().DefaultTimezone, ldrCfg.LoaderCgrCfg().CachesConns, ldrCfg.LoaderCgrCfg().SchedulerConns) if err != nil { log.Fatal(err) } @@ -377,7 +341,7 @@ func main() { }); err != nil { log.Fatal("Could not reload cache: ", err) } - if schedulerS != nil { + if len(ldrCfg.LoaderCgrCfg().SchedulerConns) != 0 { if err := tpReader.ReloadScheduler(*verbose); err != nil { log.Fatal("Could not reload scheduler: ", err) } diff --git a/config/apiercfg.go b/config/apiercfg.go index 6c800c6d8..4b1375e21 100644 --- a/config/apiercfg.go +++ b/config/apiercfg.go @@ -18,11 +18,13 @@ along with this program. If not, see package config +import "github.com/cgrates/cgrates/utils" + // ApierCfg is the configuration of Apier service type ApierCfg struct { - CachesConns []*RemoteHost // connections towards Cache - SchedulerConns []*RemoteHost // connections towards Scheduler - AttributeSConns []*RemoteHost // connections towards AttributeS + CachesConns []string // connections towards Cache + SchedulerConns []string // connections towards Scheduler + AttributeSConns []string // connections towards AttributeS } func (aCfg *ApierCfg) loadFromJsonCfg(jsnCfg *ApierJsonCfg) (err error) { @@ -30,24 +32,36 @@ func (aCfg *ApierCfg) loadFromJsonCfg(jsnCfg *ApierJsonCfg) (err error) { return } if jsnCfg.Caches_conns != nil { - aCfg.CachesConns = make([]*RemoteHost, len(*jsnCfg.Caches_conns)) - for idx, jsnHaCfg := range *jsnCfg.Caches_conns { - aCfg.CachesConns[idx] = NewDfltRemoteHost() - aCfg.CachesConns[idx].loadFromJsonCfg(jsnHaCfg) + aCfg.CachesConns = make([]string, len(*jsnCfg.Caches_conns)) + for idx, conn := range *jsnCfg.Caches_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + aCfg.CachesConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) + } else { + aCfg.CachesConns[idx] = conn + } } } if jsnCfg.Scheduler_conns != nil { - aCfg.SchedulerConns = make([]*RemoteHost, len(*jsnCfg.Scheduler_conns)) - for idx, jsnHaCfg := range *jsnCfg.Scheduler_conns { - aCfg.SchedulerConns[idx] = NewDfltRemoteHost() - aCfg.SchedulerConns[idx].loadFromJsonCfg(jsnHaCfg) + aCfg.SchedulerConns = make([]string, len(*jsnCfg.Scheduler_conns)) + for idx, conn := range *jsnCfg.Scheduler_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + aCfg.SchedulerConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler) + } else { + aCfg.SchedulerConns[idx] = conn + } } } if jsnCfg.Attributes_conns != nil { - aCfg.AttributeSConns = make([]*RemoteHost, len(*jsnCfg.Attributes_conns)) - for idx, jsnHaCfg := range *jsnCfg.Attributes_conns { - aCfg.AttributeSConns[idx] = NewDfltRemoteHost() - aCfg.AttributeSConns[idx].loadFromJsonCfg(jsnHaCfg) + aCfg.AttributeSConns = make([]string, len(*jsnCfg.Attributes_conns)) + for idx, conn := range *jsnCfg.Attributes_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + aCfg.AttributeSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) + } else { + aCfg.AttributeSConns[idx] = conn + } } } diff --git a/config/config.go b/config/config.go index 519875be7..07c554548 100755 --- a/config/config.go +++ b/config/config.go @@ -370,6 +370,7 @@ func (cfg *CGRConfig) loadRPCConns(jsnCfg *CgrJsonCfg) (err error) { }, } for key, val := range jsnRpcConns { + cfg.rpcConns[key] = new(RPCConn) if err = cfg.rpcConns[key].loadFromJsonCfg(val); err != nil { return } diff --git a/config/config_defaults.go b/config/config_defaults.go index daeea6cd1..847fee759 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -808,12 +808,8 @@ const CGRATES_CFG_JSON = ` "data_path": "./", // path towards tariff plan files "disable_reverse": false, // disable reverse computing "field_separator": ",", // separator used in case of csv files - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "127.0.0.1:2012", "transport": "*json"} - ], + "caches_conns":["*localhost"], + "scheduler_conns": ["*localhost"], }, @@ -850,9 +846,7 @@ const CGRATES_CFG_JSON = ` "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "*internal"}, - ], + "caches_conns":["*internal"], "scheduler_conns": [], // connections to SchedulerS for reloads "attributes_conns": [], // connections to AttributeS for CDRExporter }, diff --git a/config/config_it_test.go b/config/config_it_test.go index d15acddfe..ebbf6fbd2 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -254,14 +254,9 @@ func TestCGRConfigReloadSchedulerS(t *testing.T) { t.Errorf("Expected OK received: %s", reply) } expAttr := &SchedulerCfg{ - Enabled: true, - CDRsConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - Filters: []string{}, + Enabled: true, + CDRsConns: []string{utils.MetaLocalHost}, + Filters: []string{}, } if !reflect.DeepEqual(expAttr, cfg.SchedulerCfg()) { t.Errorf("Expected %s , received: %s ", utils.ToJSON(expAttr), utils.ToJSON(cfg.SchedulerCfg())) @@ -330,19 +325,9 @@ func TestCGRConfigReloadRALs(t *testing.T) { RemoveExpired: true, MaxComputedUsage: maxComp, BalanceRatingSubject: blMap, - ThresholdSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - StatSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - MaxIncrements: 1000000, + ThresholdSConns: []string{utils.MetaLocalHost}, + StatSConns: []string{utils.MetaLocalHost}, + MaxIncrements: 1000000, } if !reflect.DeepEqual(expAttr, cfg.RalsCfg()) { t.Errorf("Expected %s , received: %s ", utils.ToJSON(expAttr), utils.ToJSON(cfg.RalsCfg())) diff --git a/config/config_json_test.go b/config/config_json_test.go index f2e3ff999..90642d483 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -321,8 +321,8 @@ func TestDfStorDBJsonCfg(t *testing.T) { func TestDfRalsJsonCfg(t *testing.T) { eCfg := &RalsJsonCfg{ Enabled: utils.BoolPointer(false), - Thresholds_conns: &[]*RemoteHostJson{}, - Stats_conns: &[]*RemoteHostJson{}, + Thresholds_conns: &[]string{}, + Stats_conns: &[]string{}, Rp_subject_prefix_matching: utils.BoolPointer(false), Remove_expired: utils.BoolPointer(true), Max_computed_usage: &map[string]string{ @@ -350,7 +350,7 @@ func TestDfRalsJsonCfg(t *testing.T) { func TestDfSchedulerJsonCfg(t *testing.T) { eCfg := &SchedulerJsonCfg{ Enabled: utils.BoolPointer(false), - Cdrs_conns: &[]*RemoteHostJson{}, + Cdrs_conns: &[]string{}, Filters: &[]string{}, } if cfg, err := dfCgrJsonCfg.SchedulerJsonCfg(); err != nil { @@ -1573,18 +1573,8 @@ func TestDfLoaderCfg(t *testing.T) { Data_path: utils.StringPointer("./"), Disable_reverse: utils.BoolPointer(false), Field_separator: utils.StringPointer(","), - Caches_conns: &[]*RemoteHostJson{ - { - Address: utils.StringPointer("127.0.0.1:2012"), - Transport: utils.StringPointer(utils.MetaJSON), - }, - }, - Scheduler_conns: &[]*RemoteHostJson{ - { - Address: utils.StringPointer("127.0.0.1:2012"), - Transport: utils.StringPointer(utils.MetaJSON), - }, - }, + Caches_conns: &[]string{utils.MetaLocalHost}, + Scheduler_conns: &[]string{utils.MetaLocalHost}, } if cfg, err := dfCgrJsonCfg.LoaderCfgJson(); err != nil { t.Error(err) @@ -1647,13 +1637,9 @@ func TestDfAnalyzerCfg(t *testing.T) { func TestDfApierCfg(t *testing.T) { eCfg := &ApierJsonCfg{ - Caches_conns: &[]*RemoteHostJson{ - { - Address: utils.StringPointer(utils.MetaInternal), - }, - }, - Scheduler_conns: &[]*RemoteHostJson{}, - Attributes_conns: &[]*RemoteHostJson{}, + Caches_conns: &[]string{utils.MetaInternal}, + Scheduler_conns: &[]string{}, + Attributes_conns: &[]string{}, } if cfg, err := dfCgrJsonCfg.ApierCfgJson(); err != nil { t.Error(err) diff --git a/config/config_test.go b/config/config_test.go index 482059311..87558162d 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -464,7 +464,7 @@ func TestCgrCfgJSONDefaultsStorDB(t *testing.T) { } func TestCgrCfgJSONDefaultsRALs(t *testing.T) { - eHaPoolcfg := []*RemoteHost{} + eHaPoolcfg := []string{} if cgrCfg.RalsCfg().Enabled != false { t.Errorf("Expecting: false , received: %+v", cgrCfg.RalsCfg().Enabled) @@ -503,7 +503,7 @@ func TestCgrCfgJSONDefaultsRALs(t *testing.T) { func TestCgrCfgJSONDefaultsScheduler(t *testing.T) { eSchedulerCfg := &SchedulerCfg{ Enabled: false, - CDRsConns: []*RemoteHost{}, + CDRsConns: []string{}, Filters: []string{}, } if !reflect.DeepEqual(cgrCfg.schedulerCfg, eSchedulerCfg) { @@ -1553,18 +1553,8 @@ func TestCgrLoaderCfgDefault(t *testing.T) { DataPath: "./", DisableReverse: false, FieldSeparator: rune(','), - CachesConns: []*RemoteHost{ - { - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - SchedulerConns: []*RemoteHost{ - { - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, + CachesConns: []string{utils.MetaLocalHost}, + SchedulerConns: []string{utils.MetaLocalHost}, } if !reflect.DeepEqual(cgrCfg.LoaderCgrCfg(), eLdrCfg) { t.Errorf("received: %+v, expecting: %+v", utils.ToJSON(cgrCfg.LoaderCgrCfg()), utils.ToJSON(eLdrCfg)) @@ -1774,13 +1764,9 @@ func TestNewCGRConfigFromPathNotFound(t *testing.T) { func TestCgrCfgJSONDefaultApierCfg(t *testing.T) { aCfg := &ApierCfg{ - CachesConns: []*RemoteHost{ - { - Address: utils.MetaInternal, - }, - }, - SchedulerConns: []*RemoteHost{}, - AttributeSConns: []*RemoteHost{}, + CachesConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}, + SchedulerConns: []string{}, + AttributeSConns: []string{}, } if !reflect.DeepEqual(cgrCfg.apier, aCfg) { t.Errorf("received: %+v, expecting: %+v", cgrCfg.apier, aCfg) @@ -1944,31 +1930,24 @@ func TestCheckConfigSanity(t *testing.T) { // Rater checks cfg, _ := NewDefaultCGRConfig() cfg.ralsCfg = &RalsCfg{ - Enabled: true, - StatSConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + StatSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component." if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.statsCfg.Enabled = true - cfg.ralsCfg.ThresholdSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.ralsCfg.ThresholdSConns = []string{utils.MetaInternal} + expected = " not enabled but requested by component." if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.ralsCfg = &RalsCfg{ Enabled: false, - StatSConns: []*RemoteHost{}, - ThresholdSConns: []*RemoteHost{}, + StatSConns: []string{}, + ThresholdSConns: []string{}, } // CDRServer checks cfg.thresholdSCfg.Enabled = true diff --git a/config/configsanity.go b/config/configsanity.go index 21269c347..5ec7aaf3a 100644 --- a/config/configsanity.go +++ b/config/configsanity.go @@ -28,21 +28,21 @@ import ( func (cfg *CGRConfig) checkConfigSanity() error { // Rater checks - if cfg.ralsCfg.Enabled && !cfg.dispatcherSCfg.Enabled { - if !cfg.statsCfg.Enabled { - for _, connCfg := range cfg.ralsCfg.StatSConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", - utils.StatS, utils.RALService) - } + if cfg.ralsCfg.Enabled { + for _, connID := range cfg.ralsCfg.StatSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.RALService) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.RALService, connID) } } - if !cfg.thresholdSCfg.Enabled { - for _, connCfg := range cfg.ralsCfg.ThresholdSConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", - utils.ThresholdS, utils.RALService) - } + for _, connID := range cfg.ralsCfg.ThresholdSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.RALService) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.RALService, connID) } } } @@ -376,10 +376,13 @@ func (cfg *CGRConfig) checkConfigSanity() error { } } // Scheduler check connection with CDR Server - if !cfg.cdrsCfg.Enabled && !cfg.dispatcherSCfg.Enabled { - for _, connCfg := range cfg.schedulerCfg.CDRsConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("%s Server not enabled but requested by %s", utils.CDR, utils.SchedulerS) + if cfg.schedulerCfg.Enabled { + for _, connID := range cfg.schedulerCfg.CDRsConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.cdrsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.CDRs, utils.SchedulerS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SchedulerS, connID) } } } @@ -452,5 +455,22 @@ func (cfg *CGRConfig) checkConfigSanity() error { return fmt.Errorf("Replicate connections required by: <%s>", item) } } + // APIer sanity checks + for _, connID := range cfg.apier.AttributeSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.ApierV1) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.ApierV1, connID) + } + } + for _, connID := range cfg.apier.SchedulerConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.schedulerCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SchedulerS, utils.ApierV1) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.ApierV1, connID) + } + } return nil } diff --git a/config/configsanity_test.go b/config/configsanity_test.go index 0f23d4ed2..1d4fb0623 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -27,24 +27,16 @@ func TestConfigSanityRater(t *testing.T) { cfg, _ := NewDefaultCGRConfig() cfg.ralsCfg = &RalsCfg{ - Enabled: true, - StatSConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + StatSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component." if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.statsCfg.Enabled = true - cfg.ralsCfg.ThresholdSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.ralsCfg.ThresholdSConns = []string{utils.MetaInternal} expected = " not enabled but requested by component." if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) @@ -578,14 +570,10 @@ func TestConfigSanitySupplierS(t *testing.T) { func TestConfigSanityScheduler(t *testing.T) { cfg, _ = NewDefaultCGRConfig() cfg.schedulerCfg = &SchedulerCfg{ - Enabled: true, - CDRsConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + CDRsConns: []string{utils.MetaInternal}, } - expected := "CDR Server not enabled but requested by SchedulerS" + expected := " not enabled but requested by component." if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index c3adb8bfa..3eebbcdb0 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -110,8 +110,8 @@ type FilterSJsonCfg struct { // Rater config section type RalsJsonCfg struct { Enabled *bool - Thresholds_conns *[]*RemoteHostJson - Stats_conns *[]*RemoteHostJson + Thresholds_conns *[]string + Stats_conns *[]string Rp_subject_prefix_matching *bool Remove_expired *bool Max_computed_usage *map[string]string @@ -122,7 +122,7 @@ type RalsJsonCfg struct { // Scheduler config section type SchedulerJsonCfg struct { Enabled *bool - Cdrs_conns *[]*RemoteHostJson + Cdrs_conns *[]string Filters *[]string } @@ -523,8 +523,8 @@ type LoaderCfgJson struct { Data_path *string Disable_reverse *bool Field_separator *string - Caches_conns *[]*RemoteHostJson - Scheduler_conns *[]*RemoteHostJson + Caches_conns *[]string + Scheduler_conns *[]string } type MigratorCfgJson struct { @@ -574,7 +574,7 @@ type AnalyzerSJsonCfg struct { } type ApierJsonCfg struct { - Caches_conns *[]*RemoteHostJson - Scheduler_conns *[]*RemoteHostJson - Attributes_conns *[]*RemoteHostJson + Caches_conns *[]string + Scheduler_conns *[]string + Attributes_conns *[]string } diff --git a/config/loadercgrcfg.go b/config/loadercgrcfg.go index beb0f0525..168c2709c 100644 --- a/config/loadercgrcfg.go +++ b/config/loadercgrcfg.go @@ -18,13 +18,15 @@ along with this program. If not, see package config +import "github.com/cgrates/cgrates/utils" + type LoaderCgrCfg struct { TpID string DataPath string DisableReverse bool FieldSeparator rune // The separator to use when reading csvs - CachesConns []*RemoteHost - SchedulerConns []*RemoteHost + CachesConns []string + SchedulerConns []string } func (ld *LoaderCgrCfg) loadFromJsonCfg(jsnCfg *LoaderCfgJson) (err error) { @@ -45,17 +47,25 @@ func (ld *LoaderCgrCfg) loadFromJsonCfg(jsnCfg *LoaderCfgJson) (err error) { ld.FieldSeparator = rune(sepStr[0]) } if jsnCfg.Caches_conns != nil { - ld.CachesConns = make([]*RemoteHost, len(*jsnCfg.Caches_conns)) - for idx, jsnHaCfg := range *jsnCfg.Caches_conns { - ld.CachesConns[idx] = NewDfltRemoteHost() - ld.CachesConns[idx].loadFromJsonCfg(jsnHaCfg) + ld.CachesConns = make([]string, len(*jsnCfg.Caches_conns)) + for idx, conn := range *jsnCfg.Caches_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + ld.CachesConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) + } else { + ld.CachesConns[idx] = conn + } } } if jsnCfg.Scheduler_conns != nil { - ld.SchedulerConns = make([]*RemoteHost, len(*jsnCfg.Scheduler_conns)) - for idx, jsnScheHaCfg := range *jsnCfg.Scheduler_conns { - ld.SchedulerConns[idx] = NewDfltRemoteHost() - ld.SchedulerConns[idx].loadFromJsonCfg(jsnScheHaCfg) + ld.SchedulerConns = make([]string, len(*jsnCfg.Caches_conns)) + for idx, conn := range *jsnCfg.Caches_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + ld.SchedulerConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler) + } else { + ld.SchedulerConns[idx] = conn + } } } return nil diff --git a/config/loadercgrcfg_test.go b/config/loadercgrcfg_test.go index 0c93fa07b..2254aca45 100644 --- a/config/loadercgrcfg_test.go +++ b/config/loadercgrcfg_test.go @@ -42,18 +42,14 @@ func TestLoaderCgrCfgloadFromJsonCfg(t *testing.T) { "data_path": "", // path towards tariff plan files "disable_reverse": false, // disable reverse computing "field_separator": ";", // separator used in case of csv files - "caches_conns":[ // addresses towards cacheS components for reloads - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "scheduler_conns": [ - {"address": "127.0.0.1:2012"} - ], + "caches_conns":["*localhost"], + "scheduler_conns": ["*localhost"], }, }` expected = LoaderCgrCfg{ FieldSeparator: rune(';'), - CachesConns: []*RemoteHost{{Address: "127.0.0.1:2012", Transport: "*json"}}, - SchedulerConns: []*RemoteHost{{Address: "127.0.0.1:2012"}}, + CachesConns: []string{utils.MetaLocalHost}, + SchedulerConns: []string{utils.MetaLocalHost}, } if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) diff --git a/config/ralscfg.go b/config/ralscfg.go index fb39920b5..cfca36bbb 100644 --- a/config/ralscfg.go +++ b/config/ralscfg.go @@ -26,9 +26,9 @@ import ( // Rater config section type RalsCfg struct { - Enabled bool // start standalone server (no balancer) - ThresholdSConns []*RemoteHost // address where to reach ThresholdS config - StatSConns []*RemoteHost + Enabled bool // start standalone server (no balancer) + ThresholdSConns []string // address where to reach ThresholdS config + StatSConns []string RpSubjectPrefixMatching bool // enables prefix matching for the rating profile subject RemoveExpired bool MaxComputedUsage map[string]time.Duration @@ -45,17 +45,25 @@ func (ralsCfg *RalsCfg) loadFromJsonCfg(jsnRALsCfg *RalsJsonCfg) (err error) { ralsCfg.Enabled = *jsnRALsCfg.Enabled } if jsnRALsCfg.Thresholds_conns != nil { - ralsCfg.ThresholdSConns = make([]*RemoteHost, len(*jsnRALsCfg.Thresholds_conns)) - for idx, jsnHaCfg := range *jsnRALsCfg.Thresholds_conns { - ralsCfg.ThresholdSConns[idx] = NewDfltRemoteHost() - ralsCfg.ThresholdSConns[idx].loadFromJsonCfg(jsnHaCfg) + ralsCfg.ThresholdSConns = make([]string, len(*jsnRALsCfg.Thresholds_conns)) + for idx, conn := range *jsnRALsCfg.Thresholds_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + ralsCfg.ThresholdSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) + } else { + ralsCfg.ThresholdSConns[idx] = conn + } } } if jsnRALsCfg.Stats_conns != nil { - ralsCfg.StatSConns = make([]*RemoteHost, len(*jsnRALsCfg.Stats_conns)) - for idx, jsnHaCfg := range *jsnRALsCfg.Stats_conns { - ralsCfg.StatSConns[idx] = NewDfltRemoteHost() - ralsCfg.StatSConns[idx].loadFromJsonCfg(jsnHaCfg) + ralsCfg.StatSConns = make([]string, len(*jsnRALsCfg.Stats_conns)) + for idx, conn := range *jsnRALsCfg.Stats_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + ralsCfg.StatSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) + } else { + ralsCfg.StatSConns[idx] = conn + } } } if jsnRALsCfg.Rp_subject_prefix_matching != nil { diff --git a/config/ralscfg_test.go b/config/ralscfg_test.go index ba808a0b2..6fb9e4541 100644 --- a/config/ralscfg_test.go +++ b/config/ralscfg_test.go @@ -55,8 +55,8 @@ func TestRalsCfgFromJsonCfg(t *testing.T) { ralscfg.MaxComputedUsage = make(map[string]time.Duration) expected = RalsCfg{ Enabled: false, - ThresholdSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, + ThresholdSConns: []string{}, + StatSConns: []string{}, RpSubjectPrefixMatching: false, MaxComputedUsage: map[string]time.Duration{ utils.ANY: time.Duration(189 * time.Hour), diff --git a/config/schedulercfg.go b/config/schedulercfg.go index 6c0fb3994..888c86669 100755 --- a/config/schedulercfg.go +++ b/config/schedulercfg.go @@ -18,9 +18,11 @@ along with this program. If not, see package config +import "github.com/cgrates/cgrates/utils" + type SchedulerCfg struct { Enabled bool - CDRsConns []*RemoteHost + CDRsConns []string Filters []string } @@ -32,10 +34,14 @@ func (schdcfg *SchedulerCfg) loadFromJsonCfg(jsnCfg *SchedulerJsonCfg) error { schdcfg.Enabled = *jsnCfg.Enabled } if jsnCfg.Cdrs_conns != nil { - schdcfg.CDRsConns = make([]*RemoteHost, len(*jsnCfg.Cdrs_conns)) - for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - schdcfg.CDRsConns[idx] = NewDfltRemoteHost() - schdcfg.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) + schdcfg.CDRsConns = make([]string, len(*jsnCfg.Cdrs_conns)) + for idx, conn := range *jsnCfg.Cdrs_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if conn == utils.MetaInternal { + schdcfg.CDRsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs) + } else { + schdcfg.CDRsConns[idx] = conn + } } } if jsnCfg.Filters != nil { diff --git a/config/schedulercfg_test.go b/config/schedulercfg_test.go index 28377270b..e09dbff3c 100644 --- a/config/schedulercfg_test.go +++ b/config/schedulercfg_test.go @@ -42,7 +42,7 @@ func TestSchedulerCfgloadFromJsonCfg(t *testing.T) { }` expected = SchedulerCfg{ Enabled: true, - CDRsConns: []*RemoteHost{}, + CDRsConns: []string{}, } if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) diff --git a/data/conf/samples/acc_balance_keep/cgrates.json b/data/conf/samples/acc_balance_keep/cgrates.json index 9f4fef9b3..40d696a44 100644 --- a/data/conf/samples/acc_balance_keep/cgrates.json +++ b/data/conf/samples/acc_balance_keep/cgrates.json @@ -31,18 +31,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], "remove_expired":false, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "cdrs_conns": ["*localhost"], }, @@ -127,9 +123,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/acc_balance_keep_gob/cgrates.json b/data/conf/samples/acc_balance_keep_gob/cgrates.json index 908fa2b5e..486a1a25e 100644 --- a/data/conf/samples/acc_balance_keep_gob/cgrates.json +++ b/data/conf/samples/acc_balance_keep_gob/cgrates.json @@ -7,6 +7,13 @@ "reply_timeout": "30s", }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + "listen": { "rpc_json": ":2012", @@ -31,18 +38,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], "remove_expired":false, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "cdrs_conns": ["conn1"], }, @@ -127,9 +130,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/actions/cgradmin.json b/data/conf/samples/actions/cgradmin.json index b2c402a99..50ea3e2e5 100644 --- a/data/conf/samples/actions/cgradmin.json +++ b/data/conf/samples/actions/cgradmin.json @@ -26,9 +26,7 @@ "scheduler": { "enabled": true, // start Scheduler service: - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR Server, empty to disable CDR capturing <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], }, "cdrs": { @@ -52,9 +50,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/actions_gob/cgradmin.json b/data/conf/samples/actions_gob/cgradmin.json index 9633a6369..e7e77e842 100644 --- a/data/conf/samples/actions_gob/cgradmin.json +++ b/data/conf/samples/actions_gob/cgradmin.json @@ -26,9 +26,7 @@ "scheduler": { "enabled": true, // start Scheduler service: - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR Server, empty to disable CDR capturing <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], }, "cdrs": { @@ -52,9 +50,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/apier/apier.json b/data/conf/samples/apier/apier.json index d45eee2de..6d6c1f56b 100644 --- a/data/conf/samples/apier/apier.json +++ b/data/conf/samples/apier/apier.json @@ -82,9 +82,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrcflatstore/cgrates.json b/data/conf/samples/cdrcflatstore/cgrates.json index 7a5f11d09..cb69380e8 100644 --- a/data/conf/samples/cdrcflatstore/cgrates.json +++ b/data/conf/samples/cdrcflatstore/cgrates.json @@ -69,9 +69,7 @@ ], "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrcfwv/cgrates.json b/data/conf/samples/cdrcfwv/cgrates.json index 0afdcd89a..158d368a2 100644 --- a/data/conf/samples/cdrcfwv/cgrates.json +++ b/data/conf/samples/cdrcfwv/cgrates.json @@ -76,9 +76,7 @@ ], "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrcfwvwithfilter/cgrates.json b/data/conf/samples/cdrcfwvwithfilter/cgrates.json index 06ae9d624..42c849adc 100755 --- a/data/conf/samples/cdrcfwvwithfilter/cgrates.json +++ b/data/conf/samples/cdrcfwvwithfilter/cgrates.json @@ -120,9 +120,7 @@ ], "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrewithattributes/cgrates.json b/data/conf/samples/cdrewithattributes/cgrates.json index e8c614be8..29700f57a 100755 --- a/data/conf/samples/cdrewithattributes/cgrates.json +++ b/data/conf/samples/cdrewithattributes/cgrates.json @@ -75,15 +75,9 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "*internal"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], // connections to AttributeS for CDRExporter + "caches_conns":["*internal"], + "scheduler_conns": ["*internal"], + "attributes_conns": ["*internal"], // connections to AttributeS for CDRExporter }, } diff --git a/data/conf/samples/cdrewithfilter/cgrates.json b/data/conf/samples/cdrewithfilter/cgrates.json index 44ce120fd..b3335ab96 100755 --- a/data/conf/samples/cdrewithfilter/cgrates.json +++ b/data/conf/samples/cdrewithfilter/cgrates.json @@ -136,9 +136,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/cdrsv1internal/cgrates.json b/data/conf/samples/cdrsv1internal/cgrates.json index 608cf3c09..8e83cb8c7 100644 --- a/data/conf/samples/cdrsv1internal/cgrates.json +++ b/data/conf/samples/cdrsv1internal/cgrates.json @@ -33,9 +33,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2internal/cgrates.json b/data/conf/samples/cdrsv2internal/cgrates.json index 97c2cb68d..cc4a2f3ea 100644 --- a/data/conf/samples/cdrsv2internal/cgrates.json +++ b/data/conf/samples/cdrsv2internal/cgrates.json @@ -15,9 +15,7 @@ "rals": { "enabled": true, // enable Rater service: - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], }, "scheduler": { @@ -64,9 +62,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2mongo/cgrates.json b/data/conf/samples/cdrsv2mongo/cgrates.json index 33ecb284e..4920c08d2 100644 --- a/data/conf/samples/cdrsv2mongo/cgrates.json +++ b/data/conf/samples/cdrsv2mongo/cgrates.json @@ -16,9 +16,7 @@ "rals": { "enabled": true, // enable Rater service: - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], }, "scheduler": { @@ -65,9 +63,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2mongo_gob/cgrates.json b/data/conf/samples/cdrsv2mongo_gob/cgrates.json index 58978178c..5be297564 100644 --- a/data/conf/samples/cdrsv2mongo_gob/cgrates.json +++ b/data/conf/samples/cdrsv2mongo_gob/cgrates.json @@ -8,6 +8,15 @@ "log_level": 7, }, + +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + + "stor_db": { "db_type": "mongo", // stor database type to use: "db_port": 27017, // the port to reach the stordb @@ -16,9 +25,7 @@ "rals": { "enabled": true, // enable Rater service: - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "thresholds_conns": ["conn1"], }, "scheduler": { @@ -65,9 +72,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json index 0471d82af..a4183c336 100644 --- a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json +++ b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json @@ -16,9 +16,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], }, "scheduler": { @@ -65,9 +63,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json b/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json index 028173859..b5d88038c 100644 --- a/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json +++ b/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json @@ -9,6 +9,14 @@ }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + + "stor_db": { "db_password": "CGRateS.org", }, @@ -16,9 +24,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "thresholds_conns": ["conn1"], }, "scheduler": { @@ -65,9 +71,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cdrsv2psql/cdrsv2psql.json b/data/conf/samples/cdrsv2psql/cdrsv2psql.json index 640222717..9fb8258c7 100644 --- a/data/conf/samples/cdrsv2psql/cdrsv2psql.json +++ b/data/conf/samples/cdrsv2psql/cdrsv2psql.json @@ -16,9 +16,7 @@ "rals": { "enabled": true, // enable Rater service: - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], }, "scheduler": { @@ -65,9 +63,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/cgradmin/cgradmin.json b/data/conf/samples/cgradmin/cgradmin.json deleted file mode 100644 index 212c3d648..000000000 --- a/data/conf/samples/cgradmin/cgradmin.json +++ /dev/null @@ -1,48 +0,0 @@ -{ -// CGRateS Configuration file -// -// Used for cgradmin -// Starts rater, scheduler - -"general": { -}, - -"listen": { - "rpc_json": ":2012", // RPC JSON listening address - "rpc_gob": ":2013", // RPC GOB listening address - "http": ":2080", // HTTP listening address -}, - -"data_db": { // database used to store offline tariff plans and CDRs - "db_type": "mongo", // stor database type to use: - "db_host": "127.0.0.1", // the host to connect to - "db_port": 27017, // the port to reach the stordb - "db_name": "datadb", -}, - -"stor_db": { // database used to store offline tariff plans and CDRs - "db_type": "mongo", // stor database type to use: - "db_host": "127.0.0.1", // the host to connect to - "db_port": 27017, // the port to reach the stordb - "db_name": "stordb", -}, - -"rals": { - "enabled": true, // enable Rater service: -}, - -"scheduler": { - "enabled": true, // start Scheduler service: -}, - -"users": { - "enabled": true, // starts users service: . -}, - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - -} diff --git a/data/conf/samples/cluelrn/cgrates.json b/data/conf/samples/cluelrn/cgrates.json index 7d35cf9a4..5f395e1f3 100644 --- a/data/conf/samples/cluelrn/cgrates.json +++ b/data/conf/samples/cluelrn/cgrates.json @@ -56,9 +56,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/dbinternal/cgrates.json b/data/conf/samples/dbinternal/cgrates.json index f31f41cdc..2d68c3abc 100755 --- a/data/conf/samples/dbinternal/cgrates.json +++ b/data/conf/samples/dbinternal/cgrates.json @@ -26,9 +26,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, @@ -83,9 +81,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/diamagent/cgrates.json b/data/conf/samples/diamagent/cgrates.json index 05f30fcb0..1de7a2048 100644 --- a/data/conf/samples/diamagent/cgrates.json +++ b/data/conf/samples/diamagent/cgrates.json @@ -75,9 +75,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/diamagentmaxconn/cgrates.json b/data/conf/samples/diamagentmaxconn/cgrates.json index e8782d40c..52aac2bfa 100755 --- a/data/conf/samples/diamagentmaxconn/cgrates.json +++ b/data/conf/samples/diamagentmaxconn/cgrates.json @@ -87,9 +87,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/diamsctpagent/cgrates.json b/data/conf/samples/diamsctpagent/cgrates.json index b276d8d8c..4c94e19c9 100755 --- a/data/conf/samples/diamsctpagent/cgrates.json +++ b/data/conf/samples/diamsctpagent/cgrates.json @@ -79,9 +79,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/dispatchers/all/cgrates.json b/data/conf/samples/dispatchers/all/cgrates.json index 17a2edeab..65248a955 100644 --- a/data/conf/samples/dispatchers/all/cgrates.json +++ b/data/conf/samples/dispatchers/all/cgrates.json @@ -21,6 +21,15 @@ "db_name": "11", // data_db database name to connect to }, + +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:6012", "transport":"*json"}], + }, +}, + + "stor_db": { "db_password": "CGRateS.org", }, @@ -92,12 +101,8 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:6012", "transport": "*json"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "caches_conns":["conn1"], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/dispatchers/all2/cgrates.json b/data/conf/samples/dispatchers/all2/cgrates.json index c48c77b67..3366ce629 100644 --- a/data/conf/samples/dispatchers/all2/cgrates.json +++ b/data/conf/samples/dispatchers/all2/cgrates.json @@ -21,6 +21,15 @@ "db_name": "12", // data_db database name to connect to }, + +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:7012", "transport":"*json"}], + }, +}, + + "stor_db": { "db_type":"*internal", }, @@ -92,12 +101,8 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:7012", "transport": "*json"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "caches_conns":["conn1"], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/dispatchers/diamagent/cgrates.json b/data/conf/samples/dispatchers/diamagent/cgrates.json index 1d8ee4ae1..785b8ed42 100644 --- a/data/conf/samples/dispatchers/diamagent/cgrates.json +++ b/data/conf/samples/dispatchers/diamagent/cgrates.json @@ -55,8 +55,6 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/dispatchers/dispatchers/cgrates.json b/data/conf/samples/dispatchers/dispatchers/cgrates.json index 1db50a217..a3aac3b90 100755 --- a/data/conf/samples/dispatchers/dispatchers/cgrates.json +++ b/data/conf/samples/dispatchers/dispatchers/cgrates.json @@ -65,8 +65,6 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json index 947a8584f..f51389261 100644 --- a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json +++ b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json @@ -73,8 +73,6 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json b/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json index b61830f27..871d7a4a5 100755 --- a/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json +++ b/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json @@ -45,8 +45,6 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/dispatchers/radagent/cgrates.json b/data/conf/samples/dispatchers/radagent/cgrates.json index 9c7587016..4b52384a9 100644 --- a/data/conf/samples/dispatchers/radagent/cgrates.json +++ b/data/conf/samples/dispatchers/radagent/cgrates.json @@ -140,8 +140,6 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/dnsagent/cgrates.json b/data/conf/samples/dnsagent/cgrates.json index 9be97eb78..00e5ed06d 100644 --- a/data/conf/samples/dnsagent/cgrates.json +++ b/data/conf/samples/dnsagent/cgrates.json @@ -83,8 +83,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/dnsagent_reload/cgrates.json b/data/conf/samples/dnsagent_reload/cgrates.json index e28ab0b3e..d5e570fe7 100644 --- a/data/conf/samples/dnsagent_reload/cgrates.json +++ b/data/conf/samples/dnsagent_reload/cgrates.json @@ -19,9 +19,7 @@ "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "*internal"}, - ], + "cdrs_conns": ["*internal"], }, @@ -83,8 +81,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/ers/cgrates.json b/data/conf/samples/ers/cgrates.json index 7cda37d55..b6f15854c 100644 --- a/data/conf/samples/ers/cgrates.json +++ b/data/conf/samples/ers/cgrates.json @@ -211,9 +211,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_example/cgrates.json b/data/conf/samples/ers_example/cgrates.json index 4491afb2f..f1592df8e 100644 --- a/data/conf/samples/ers_example/cgrates.json +++ b/data/conf/samples/ers_example/cgrates.json @@ -108,8 +108,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/ers_reload/disabled/cgrates.json b/data/conf/samples/ers_reload/disabled/cgrates.json index afa905d7c..1579f44f1 100644 --- a/data/conf/samples/ers_reload/disabled/cgrates.json +++ b/data/conf/samples/ers_reload/disabled/cgrates.json @@ -79,9 +79,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_reload/first_reload/cgrates.json b/data/conf/samples/ers_reload/first_reload/cgrates.json index bd495ea90..a47b5f1e5 100644 --- a/data/conf/samples/ers_reload/first_reload/cgrates.json +++ b/data/conf/samples/ers_reload/first_reload/cgrates.json @@ -121,9 +121,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_reload/internal/cgrates.json b/data/conf/samples/ers_reload/internal/cgrates.json index 712c1d783..010a5641d 100644 --- a/data/conf/samples/ers_reload/internal/cgrates.json +++ b/data/conf/samples/ers_reload/internal/cgrates.json @@ -108,9 +108,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } \ No newline at end of file diff --git a/data/conf/samples/ers_reload/second_reload/cgrates.json b/data/conf/samples/ers_reload/second_reload/cgrates.json index 282b0274b..d57c25a01 100644 --- a/data/conf/samples/ers_reload/second_reload/cgrates.json +++ b/data/conf/samples/ers_reload/second_reload/cgrates.json @@ -210,9 +210,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/filtered_scheduler/cgrates.json b/data/conf/samples/filtered_scheduler/cgrates.json index be7fa1063..725d588eb 100644 --- a/data/conf/samples/filtered_scheduler/cgrates.json +++ b/data/conf/samples/filtered_scheduler/cgrates.json @@ -40,9 +40,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/filtered_scheduler2/cgrates.json b/data/conf/samples/filtered_scheduler2/cgrates.json index 09a3679e0..d661deee2 100644 --- a/data/conf/samples/filtered_scheduler2/cgrates.json +++ b/data/conf/samples/filtered_scheduler2/cgrates.json @@ -40,9 +40,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/filters/cgrates.json b/data/conf/samples/filters/cgrates.json index a7df763df..1f73700e2 100644 --- a/data/conf/samples/filters/cgrates.json +++ b/data/conf/samples/filters/cgrates.json @@ -30,9 +30,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], }, "scheduler": { @@ -73,12 +71,8 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:2012", "transport": "*json"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "caches_conns":["*localhost"], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/filters_gob/cgrates.json b/data/conf/samples/filters_gob/cgrates.json index 0ad8dfdef..b1a467e99 100644 --- a/data/conf/samples/filters_gob/cgrates.json +++ b/data/conf/samples/filters_gob/cgrates.json @@ -8,9 +8,16 @@ "node_id": "CGRFilterS", }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, -"liste3": { - "rpc_gob": ":2012", + +"listen": { + "rpc_json": ":2012", "rpc_gob": ":2013", "http": ":2080", }, @@ -30,9 +37,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "thresholds_conns": ["conn1"], }, "scheduler": { @@ -73,12 +78,8 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:2012",3"transport": "*gob"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "caches_conns":["conn1"], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/fscsv/cgrates.json b/data/conf/samples/fscsv/cgrates.json index c1f433448..8dac2ff96 100644 --- a/data/conf/samples/fscsv/cgrates.json +++ b/data/conf/samples/fscsv/cgrates.json @@ -19,9 +19,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/httpagent/cgrates.json b/data/conf/samples/httpagent/cgrates.json index 9d47dea62..0f386bc40 100644 --- a/data/conf/samples/httpagent/cgrates.json +++ b/data/conf/samples/httpagent/cgrates.json @@ -70,9 +70,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagent_gob/cgrates.json b/data/conf/samples/httpagent_gob/cgrates.json index 0b05460d6..364e8030f 100644 --- a/data/conf/samples/httpagent_gob/cgrates.json +++ b/data/conf/samples/httpagent_gob/cgrates.json @@ -14,6 +14,13 @@ "http": ":2080", }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + "stor_db": { "db_password": "CGRateS.org", @@ -70,9 +77,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagenttls/cgrates.json b/data/conf/samples/httpagenttls/cgrates.json index b011a248d..87e3fd238 100755 --- a/data/conf/samples/httpagenttls/cgrates.json +++ b/data/conf/samples/httpagenttls/cgrates.json @@ -83,9 +83,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagenttls_gob/cgrates.json b/data/conf/samples/httpagenttls_gob/cgrates.json index 0c982d105..c8e06f1cd 100755 --- a/data/conf/samples/httpagenttls_gob/cgrates.json +++ b/data/conf/samples/httpagenttls_gob/cgrates.json @@ -17,6 +17,15 @@ "http_tls": "localhost:2280", }, + +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + + "tls": { "server_certificate" : "/usr/share/cgrates/tls/server.crt", // path to server certificate(must conatin server.crt + ca.crt) "server_key":"/usr/share/cgrates/tls/server.key", // path to server key @@ -83,9 +92,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/loaders/tutmongo/cgrates.json b/data/conf/samples/loaders/tutmongo/cgrates.json index 68b95d148..c151f6d22 100644 --- a/data/conf/samples/loaders/tutmongo/cgrates.json +++ b/data/conf/samples/loaders/tutmongo/cgrates.json @@ -31,17 +31,13 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "cdrs_conns": ["*localhost"], }, @@ -170,8 +166,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/loaders/tutmysql/cgrates.json b/data/conf/samples/loaders/tutmysql/cgrates.json index 156a09a44..5d41973b7 100644 --- a/data/conf/samples/loaders/tutmysql/cgrates.json +++ b/data/conf/samples/loaders/tutmysql/cgrates.json @@ -28,17 +28,13 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"}, - ], + "thresholds_conns": ["*internal"], }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "*internal"}, - ], + "cdrs_conns": ["*internal"], }, @@ -176,9 +172,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/mongoatlas/cgrates.json b/data/conf/samples/mongoatlas/cgrates.json index 2fe85301e..cb3c58289 100755 --- a/data/conf/samples/mongoatlas/cgrates.json +++ b/data/conf/samples/mongoatlas/cgrates.json @@ -65,9 +65,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, @@ -162,9 +160,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/mongoreplica/cgrates.json b/data/conf/samples/mongoreplica/cgrates.json index 2f9139bce..2f7299ffe 100755 --- a/data/conf/samples/mongoreplica/cgrates.json +++ b/data/conf/samples/mongoreplica/cgrates.json @@ -37,9 +37,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, @@ -117,9 +115,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json b/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json index 3788dbf7e..d2a1d36b3 100644 --- a/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json +++ b/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json @@ -130,9 +130,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/osips_training/cgrates.json b/data/conf/samples/osips_training/cgrates.json deleted file mode 100644 index f211e6b57..000000000 --- a/data/conf/samples/osips_training/cgrates.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - -// Real-time Charging System for Telecom & ISP environments -// Copyright (C) ITsysCOM GmbH -// -// This file contains the default configuration hardcoded into CGRateS. -// This is what you get when you load CGRateS with an empty configuration file. - -"listen": { - "rpc_json": ":2012", // RPC JSON listening address - "rpc_gob": ":2013", // RPC GOB listening address - "http": ":2080", // HTTP listening address -}, - - -"rals": { - "enabled": true, -}, - - -"scheduler": { - "enabled": true, -}, - - -"cdrs": { - "enabled": true, // start the CDR Server service: -}, - - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - - -} diff --git a/data/conf/samples/precache/tutmongo/cgrates.json b/data/conf/samples/precache/tutmongo/cgrates.json index 2ae88ca0f..472a229c7 100644 --- a/data/conf/samples/precache/tutmongo/cgrates.json +++ b/data/conf/samples/precache/tutmongo/cgrates.json @@ -82,9 +82,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/precache/tutmysql/cgrates.json b/data/conf/samples/precache/tutmysql/cgrates.json index 9a7eac82e..734e6c231 100644 --- a/data/conf/samples/precache/tutmysql/cgrates.json +++ b/data/conf/samples/precache/tutmysql/cgrates.json @@ -73,9 +73,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/radagent/cgrates.json b/data/conf/samples/radagent/cgrates.json index 167f89b7d..18d875173 100644 --- a/data/conf/samples/radagent/cgrates.json +++ b/data/conf/samples/radagent/cgrates.json @@ -170,9 +170,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/radagent_gob/cgrates.json b/data/conf/samples/radagent_gob/cgrates.json index 8e81dcbdc..c4e087f32 100644 --- a/data/conf/samples/radagent_gob/cgrates.json +++ b/data/conf/samples/radagent_gob/cgrates.json @@ -170,9 +170,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/remote_replication/engine1_mongo/cgrates.json b/data/conf/samples/remote_replication/engine1_mongo/cgrates.json index ca8ea370b..bbc4b6f8e 100644 --- a/data/conf/samples/remote_replication/engine1_mongo/cgrates.json +++ b/data/conf/samples/remote_replication/engine1_mongo/cgrates.json @@ -36,9 +36,7 @@ }, "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/remote_replication/engine1_redis/cgrates.json b/data/conf/samples/remote_replication/engine1_redis/cgrates.json index 172ab11e3..a01a3c578 100644 --- a/data/conf/samples/remote_replication/engine1_redis/cgrates.json +++ b/data/conf/samples/remote_replication/engine1_redis/cgrates.json @@ -33,9 +33,7 @@ "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/remote_replication/engine2_mongo/cgrates.json b/data/conf/samples/remote_replication/engine2_mongo/cgrates.json index 4c8e561e4..fca65e916 100644 --- a/data/conf/samples/remote_replication/engine2_mongo/cgrates.json +++ b/data/conf/samples/remote_replication/engine2_mongo/cgrates.json @@ -37,9 +37,7 @@ "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/remote_replication/engine2_redis/cgrates.json b/data/conf/samples/remote_replication/engine2_redis/cgrates.json index e7337f37d..e4517eb9c 100644 --- a/data/conf/samples/remote_replication/engine2_redis/cgrates.json +++ b/data/conf/samples/remote_replication/engine2_redis/cgrates.json @@ -33,9 +33,7 @@ "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/remote_replication/internal/cgrates.json b/data/conf/samples/remote_replication/internal/cgrates.json index 98060a329..e53bc1466 100644 --- a/data/conf/samples/remote_replication/internal/cgrates.json +++ b/data/conf/samples/remote_replication/internal/cgrates.json @@ -80,9 +80,7 @@ "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/remote_replication/internal_gob/cgrates.json b/data/conf/samples/remote_replication/internal_gob/cgrates.json index eeb37e445..b82669572 100644 --- a/data/conf/samples/remote_replication/internal_gob/cgrates.json +++ b/data/conf/samples/remote_replication/internal_gob/cgrates.json @@ -86,9 +86,7 @@ "apier": { - "scheduler_conns": [ - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/replication_mongo/cgrates.json b/data/conf/samples/replication_mongo/cgrates.json deleted file mode 100644 index fbce5edd8..000000000 --- a/data/conf/samples/replication_mongo/cgrates.json +++ /dev/null @@ -1,49 +0,0 @@ -{ -// CGRateS Configuration file - - -"general": { - "log_level": 7, - "reply_timeout": "30s", -}, - - -"listen": { - "rpc_json": ":2022", - "rpc_gob": ":2023", - "http": ":2280" -}, - - -"data_db": { - "db_type": "mongo", - "db_name": "10", - "db_port": 27017, -}, - - -"stor_db": { - "db_type": "mongo", - "db_name": "cgrates", - "db_port": 27017, -}, - - -"rals": { - "enabled": true, -}, - - -"scheduler": { - "enabled": true, -}, - - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - - -} diff --git a/data/conf/samples/reslimiter/cgrates.json b/data/conf/samples/reslimiter/cgrates.json deleted file mode 100644 index c475ff147..000000000 --- a/data/conf/samples/reslimiter/cgrates.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - -"general": { - "log_level": 7, -}, - -"listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", -}, - - -"stor_db": { - "db_password": "CGRateS.org", -}, - - -"rals": { - "enabled": true, - "stats_conns": [ - {"address": "*internal"} - ], -}, - -"stats": { - "enabled": true, -}, - - -"resources": { - "enabled": true, - "cache_dump_interval": "0s", - "usage_ttl": "3h", -}, - -} diff --git a/data/conf/samples/rpccaching/cgrates.json b/data/conf/samples/rpccaching/cgrates.json index 137ffe181..367a5178a 100644 --- a/data/conf/samples/rpccaching/cgrates.json +++ b/data/conf/samples/rpccaching/cgrates.json @@ -73,9 +73,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/sessions/cgrates.json b/data/conf/samples/sessions/cgrates.json index 9a7cd2a39..88d3f4fdd 100644 --- a/data/conf/samples/sessions/cgrates.json +++ b/data/conf/samples/sessions/cgrates.json @@ -107,9 +107,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json b/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json index 80e40d1ed..c6358b276 100644 --- a/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json +++ b/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json @@ -56,9 +56,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json b/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json index 6350c90f5..b1cb50764 100644 --- a/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json +++ b/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json @@ -57,9 +57,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/smfs/smfs.json b/data/conf/samples/smfs/smfs.json deleted file mode 100644 index 094e7eecf..000000000 --- a/data/conf/samples/smfs/smfs.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - -// Real-time Charging System for Telecom & ISP environments -// Copyright (C) ITsysCOM GmbH -// -// This file contains the default configuration hardcoded into CGRateS. -// This is what you get when you load CGRateS with an empty configuration file. - - -"sm_freeswitch": { - "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2013"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2013"} - ], - "debit_interval": "5s", - "channel_sync_interval": "10s", - "event_socket_conns":[ - {"address": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5} - ], -}, - -} \ No newline at end of file diff --git a/data/conf/samples/smg/cgrates.json b/data/conf/samples/smg/cgrates.json index eec964432..0673bd872 100644 --- a/data/conf/samples/smg/cgrates.json +++ b/data/conf/samples/smg/cgrates.json @@ -69,9 +69,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/smg_automatic_debits/cgrates.json b/data/conf/samples/smg_automatic_debits/cgrates.json index 6d58c654a..ae71059a9 100644 --- a/data/conf/samples/smg_automatic_debits/cgrates.json +++ b/data/conf/samples/smg_automatic_debits/cgrates.json @@ -48,9 +48,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/smg_gob/cgrates.json b/data/conf/samples/smg_gob/cgrates.json index bbe142e69..bbe7db286 100644 --- a/data/conf/samples/smg_gob/cgrates.json +++ b/data/conf/samples/smg_gob/cgrates.json @@ -69,9 +69,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/smgeneric/cgrates.json b/data/conf/samples/smgeneric/cgrates.json index 44a0c41de..f984850b9 100644 --- a/data/conf/samples/smgeneric/cgrates.json +++ b/data/conf/samples/smgeneric/cgrates.json @@ -12,6 +12,15 @@ "http": "0.0.0.0:3080", // HTTP listening address }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [ + {"address": "127.0.0.1:3012", "transport":"*json"} + ], + }, +}, + "stor_db": { // database used to store offline tariff plans and CDRs "db_password": "CGRateS.org", // password to use when connecting to stordb @@ -63,12 +72,8 @@ }, "apier": { - "caches_conns":[ // connections to CacheS for reloads - {"address": "127.0.0.1:3012", "transport": "*json"}, - ], - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "caches_conns":["conn1"], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/smgreplcmaster/cgrates.json b/data/conf/samples/smgreplcmaster/cgrates.json index 3ef8da5c2..eb4e43254 100644 --- a/data/conf/samples/smgreplcmaster/cgrates.json +++ b/data/conf/samples/smgreplcmaster/cgrates.json @@ -55,9 +55,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/smgreplcmaster_gob/cgrates.json b/data/conf/samples/smgreplcmaster_gob/cgrates.json index ac47877cd..43367a794 100644 --- a/data/conf/samples/smgreplcmaster_gob/cgrates.json +++ b/data/conf/samples/smgreplcmaster_gob/cgrates.json @@ -55,9 +55,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/smgreplcslave/cgrates.json b/data/conf/samples/smgreplcslave/cgrates.json index 6fbfbd80d..7e70e937a 100644 --- a/data/conf/samples/smgreplcslave/cgrates.json +++ b/data/conf/samples/smgreplcslave/cgrates.json @@ -56,9 +56,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/smgreplcslave_gob/cgrates.json b/data/conf/samples/smgreplcslave_gob/cgrates.json index d1cbbc4e4..61d922aa2 100644 --- a/data/conf/samples/smgreplcslave_gob/cgrates.json +++ b/data/conf/samples/smgreplcslave_gob/cgrates.json @@ -56,9 +56,7 @@ }, "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/stats/cgrates.json b/data/conf/samples/stats/cgrates.json deleted file mode 100644 index 5d1fd64eb..000000000 --- a/data/conf/samples/stats/cgrates.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - -"general": { - "log_level": 7, -}, - -"listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", -}, - - -"stor_db": { - "db_password": "CGRateS.org", -}, - - -"rals": { - "enabled": true, -}, - - -"stats": { - "enabled": true, - "store_interval": "0s", -}, - -} diff --git a/data/conf/samples/tls_gob/cgrates.json b/data/conf/samples/tls_gob/cgrates.json index dbbd1f504..f4476e86f 100755 --- a/data/conf/samples/tls_gob/cgrates.json +++ b/data/conf/samples/tls_gob/cgrates.json @@ -55,7 +55,7 @@ "rpc_conns": { "conn1": { - "strategy": "first", + "strategy": "*first", "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], }, }, diff --git a/data/conf/samples/tutinternal/cgrates.json b/data/conf/samples/tutinternal/cgrates.json index 37eecb2e5..ae6e4cc2b 100644 --- a/data/conf/samples/tutinternal/cgrates.json +++ b/data/conf/samples/tutinternal/cgrates.json @@ -28,18 +28,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"}, - ], + "thresholds_conns": ["*internal"], "max_increments":3000000, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "*internal"}, - ], + "cdrs_conns": ["*internal"], }, @@ -112,9 +108,9 @@ }, - "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], - }, +"apier": { + "scheduler_conns": ["*internal"], +}, + + } diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json index 9155d5058..50ec5c0c6 100644 --- a/data/conf/samples/tutmongo/cgrates.json +++ b/data/conf/samples/tutmongo/cgrates.json @@ -31,18 +31,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], "max_increments":3000000, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "cdrs_conns": ["*localhost"], }, @@ -135,9 +131,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo2/cgrates.json b/data/conf/samples/tutmongo2/cgrates.json index b2963e252..8d291cadc 100644 --- a/data/conf/samples/tutmongo2/cgrates.json +++ b/data/conf/samples/tutmongo2/cgrates.json @@ -31,20 +31,14 @@ "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "cdrs_conns": ["*localhost"], }, "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], + "stats_conns": ["*localhost"], }, @@ -167,9 +161,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo2_gob/cgrates.json b/data/conf/samples/tutmongo2_gob/cgrates.json index ddc10f10d..64de18c04 100644 --- a/data/conf/samples/tutmongo2_gob/cgrates.json +++ b/data/conf/samples/tutmongo2_gob/cgrates.json @@ -10,7 +10,7 @@ "rpc_conns": { "conn1": { - "strategy": "first", + "strategy": "*first", "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], }, }, @@ -38,20 +38,14 @@ "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "cdrs_conns": ["conn1"], }, "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "thresholds_conns": ["conn1"], + "stats_conns": ["conn1"], }, @@ -174,9 +168,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo_gob/cgrates.json b/data/conf/samples/tutmongo_gob/cgrates.json index 2d136c2a1..3b90367e9 100644 --- a/data/conf/samples/tutmongo_gob/cgrates.json +++ b/data/conf/samples/tutmongo_gob/cgrates.json @@ -7,6 +7,13 @@ "reply_timeout": "30s", }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + "listen": { "rpc_json": ":2012", @@ -31,18 +38,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], "max_increments":3000000, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "cdrs_conns": ["conn1"], }, @@ -135,9 +138,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongonew/cgrates.json b/data/conf/samples/tutmongonew/cgrates.json index 4b09eb643..ab1bfc9ec 100644 --- a/data/conf/samples/tutmongonew/cgrates.json +++ b/data/conf/samples/tutmongonew/cgrates.json @@ -31,9 +31,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, @@ -132,9 +130,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json index 22e1a3ae8..46a0dabd2 100644 --- a/data/conf/samples/tutmysql/cgrates.json +++ b/data/conf/samples/tutmysql/cgrates.json @@ -28,18 +28,14 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"}, - ], + "thresholds_conns": ["*internal"], "max_increments":3000000, }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "*internal"}, - ], + "cdrs_conns": ["*internal"], }, @@ -140,9 +136,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql2/cgrates.json b/data/conf/samples/tutmysql2/cgrates.json index 572616137..0af14e145 100644 --- a/data/conf/samples/tutmysql2/cgrates.json +++ b/data/conf/samples/tutmysql2/cgrates.json @@ -23,20 +23,14 @@ "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "cdrs_conns": ["*localhost"], }, "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "thresholds_conns": ["*localhost"], + "stats_conns": ["*localhost"], }, @@ -133,8 +127,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*localhost"], }, } diff --git a/data/conf/samples/tutmysql2_gob/cgrates.json b/data/conf/samples/tutmysql2_gob/cgrates.json index fef2c652c..4ee9352b4 100644 --- a/data/conf/samples/tutmysql2_gob/cgrates.json +++ b/data/conf/samples/tutmysql2_gob/cgrates.json @@ -11,7 +11,7 @@ "rpc_conns": { "conn1": { - "strategy": "first", + "strategy": "*first", "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], }, }, @@ -31,20 +31,14 @@ "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "cdrs_conns": ["conn1"], }, "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "thresholds_conns": ["conn1"], + "stats_conns": ["conn1"], }, @@ -141,8 +135,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/data/conf/samples/tutmysql_internal/cgrates.json b/data/conf/samples/tutmysql_internal/cgrates.json index 12ee29947..e8370a71d 100644 --- a/data/conf/samples/tutmysql_internal/cgrates.json +++ b/data/conf/samples/tutmysql_internal/cgrates.json @@ -27,17 +27,13 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"}, - ], + "thresholds_conns": ["*internal"], }, "scheduler": { "enabled": true, - "cdrs_conns": [ - {"address": "*internal"}, - ], + "cdrs_conns": ["*internal"], }, @@ -257,9 +253,7 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/tutpostgres/cgrates.json b/data/conf/samples/tutpostgres/cgrates.json index ff6c32ea7..ae955851c 100644 --- a/data/conf/samples/tutpostgres/cgrates.json +++ b/data/conf/samples/tutpostgres/cgrates.json @@ -28,9 +28,7 @@ "rals": { "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], + "thresholds_conns": ["*internal"], }, @@ -102,8 +100,6 @@ "apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], + "scheduler_conns": ["*internal"], }, } diff --git a/engine/account.go b/engine/account.go index a1e46d8b2..250b1b55d 100644 --- a/engine/account.go +++ b/engine/account.go @@ -536,7 +536,7 @@ func (ub *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun boo defaultBalance := ub.GetDefaultMoneyBalance() defaultBalance.SubstractValue(cost) //send default balance to thresholdS to be processed - if thresholdS != nil { + if len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 { acntTnt := utils.NewTenantID(ub.ID) thEv := &ArgsProcessEvent{ CGREvent: &utils.CGREvent{ @@ -549,7 +549,8 @@ func (ub *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun boo utils.BalanceID: defaultBalance.ID, utils.Units: defaultBalance.Value}}} var tIDs []string - if err := thresholdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: <%s> processing balance event <%+v> with ThresholdS.", @@ -1103,10 +1104,11 @@ func (acnt *Account) Publish() { utils.Account: acntTnt.ID, utils.AllowNegative: acnt.AllowNegative, utils.Disabled: acnt.Disabled}} - if statS != nil { + if len(config.CgrConfig().RalsCfg().StatSConns) != 0 { go func() { var reply []string - if err := statS.Call(utils.StatSv1ProcessEvent, &StatsArgsProcessEvent{CGREvent: cgrEv}, &reply); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().StatSConns, + utils.StatSv1ProcessEvent, &StatsArgsProcessEvent{CGREvent: cgrEv}, &reply); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: %s processing balance event %+v with StatS.", @@ -1114,10 +1116,11 @@ func (acnt *Account) Publish() { } }() } - if thresholdS != nil { + if len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 { go func() { var tIDs []string - if err := thresholdS.Call(utils.ThresholdSv1ProcessEvent, + if err := connMgr.Call(config.CgrConfig().RalsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, &ArgsProcessEvent{CGREvent: cgrEv}, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( diff --git a/engine/balances.go b/engine/balances.go index c0675af85..10844fadb 100644 --- a/engine/balances.go +++ b/engine/balances.go @@ -721,10 +721,11 @@ func (b *Balance) Publish() { if !b.ExpirationDate.IsZero() { cgrEv.Event[utils.ExpiryTime] = b.ExpirationDate.Format(time.RFC3339) } - if statS != nil { + if len(config.CgrConfig().RalsCfg().StatSConns) != 0 { go func() { var reply []string - if err := statS.Call(utils.StatSv1ProcessEvent, &StatsArgsProcessEvent{CGREvent: cgrEv}, &reply); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().StatSConns, + utils.StatSv1ProcessEvent, &StatsArgsProcessEvent{CGREvent: cgrEv}, &reply); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: %s processing balance event %+v with StatS.", @@ -732,10 +733,11 @@ func (b *Balance) Publish() { } }() } - if thresholdS != nil { + if len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 { go func() { var tIDs []string - if err := thresholdS.Call(utils.ThresholdSv1ProcessEvent, &ArgsProcessEvent{CGREvent: cgrEv}, &tIDs); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, &ArgsProcessEvent{CGREvent: cgrEv}, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: %s processing balance event %+v with ThresholdS.", @@ -840,9 +842,10 @@ func (bc Balances) SaveDirtyBalances(acc *Account) { if !b.ExpirationDate.IsZero() { thEv.Event[utils.ExpiryTime] = b.ExpirationDate.Format(time.RFC3339) } - if thresholdS != nil { + if len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 { var tIDs []string - if err := thresholdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: %s processing balance event %+v with ThresholdS.", @@ -855,7 +858,7 @@ func (bc Balances) SaveDirtyBalances(acc *Account) { savedAccounts[b.account.ID] = b.account } } - if len(savedAccounts) != 0 && thresholdS != nil { + if len(savedAccounts) != 0 && len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 { for _, acnt := range savedAccounts { acntTnt := utils.NewTenantID(acnt.ID) thEv := &ArgsProcessEvent{ @@ -869,7 +872,8 @@ func (bc Balances) SaveDirtyBalances(acc *Account) { utils.AllowNegative: acnt.AllowNegative, utils.Disabled: acnt.Disabled}}} var tIDs []string - if err := thresholdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && + if err := connMgr.Call(config.CgrConfig().RalsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( fmt.Sprintf(" error: %s processing account event %+v with ThresholdS.", err.Error(), thEv)) diff --git a/engine/calldesc.go b/engine/calldesc.go index 7ab6c933e..d1653a6a5 100644 --- a/engine/calldesc.go +++ b/engine/calldesc.go @@ -57,9 +57,8 @@ var ( cdrStorage CdrStorage debitPeriod = 10 * time.Second globalRoundingDecimals = 6 - thresholdS rpcclient.ClientConnector // used by RALs to communicate with ThresholdS - statS rpcclient.ClientConnector - schedCdrsConns rpcclient.ClientConnector + connMgr *ConnManager + schedCdrsConns rpcclient.RpcClientConnection rpSubjectPrefixMatching bool ) @@ -68,12 +67,9 @@ func SetDataStorage(dm2 *DataManager) { dm = dm2 } -func SetThresholdS(thdS rpcclient.ClientConnector) { - thresholdS = thdS -} - -func SetStatS(stsS rpcclient.ClientConnector) { - statS = stsS +// SetConnManager is the exported method to set the connectionManager used when operate on an account. +func SetConnManager(conMgr *ConnManager) { + connMgr = conMgr } // SetRoundingDecimals sets the global rounding method and decimal precision for GetCost method diff --git a/engine/cdre.go b/engine/cdre.go index 99c259c64..253ee3eb8 100644 --- a/engine/cdre.go +++ b/engine/cdre.go @@ -34,7 +34,6 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) const ( @@ -54,7 +53,7 @@ const ( func NewCDRExporter(cdrs []*CDR, exportTemplate *config.CdreCfg, exportFormat, exportPath, fallbackPath, exportID string, synchronous bool, attempts int, fieldSeparator rune, - httpSkipTlsCheck bool, httpPoster *HTTPPoster, attrS rpcclient.ClientConnector, filterS *FilterS) (*CDRExporter, error) { + httpSkipTlsCheck bool, httpPoster *HTTPPoster, attrsConns []string, filterS *FilterS) (*CDRExporter, error) { if len(cdrs) == 0 { // Nothing to export return nil, nil } @@ -71,7 +70,7 @@ func NewCDRExporter(cdrs []*CDR, exportTemplate *config.CdreCfg, exportFormat, e httpSkipTlsCheck: httpSkipTlsCheck, httpPoster: httpPoster, negativeExports: make(map[string]string), - attrS: attrS, + attrsConns: attrsConns, filterS: filterS, } return cdre, nil @@ -103,8 +102,8 @@ type CDRExporter struct { positiveExports []string // CGRIDs of successfully exported CDRs negativeExports map[string]string // CGRIDs of failed exports - attrS rpcclient.ClientConnector - filterS *FilterS + attrsConns []string + filterS *FilterS } // Handle various meta functions used in header/trailer @@ -302,7 +301,7 @@ func (cdre *CDRExporter) processCDR(cdr *CDR) (err error) { } // send the cdr to be processed by attributeS if cdre.exportTemplate.AttributeSContext != utils.EmptyString { - if cdre.attrS == nil { + if len(cdre.attrsConns) == 0 { return errors.New("no connection to AttributeS") } args := &AttrArgsProcessEvent{ @@ -310,7 +309,8 @@ func (cdre *CDRExporter) processCDR(cdr *CDR) (err error) { CGREvent: cdr.AsCGREvent(), } var evReply AttrSProcessEventReply - if err = cdre.attrS.Call(utils.AttributeSv1ProcessEvent, + if err = connMgr.Call(cdre.attrsConns, + utils.AttributeSv1ProcessEvent, args, &evReply); err != nil { return err } diff --git a/engine/cdrs.go b/engine/cdrs.go index 41051d1f0..23f0021d5 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -437,7 +437,7 @@ func (cdrS *CDRServer) exportCDRs(cdrs []*CDR) (err error) { expTpl.ExportPath, cdrS.cgrCfg.GeneralCfg().FailedPostsDir, "CDRSReplication", expTpl.Synchronous, expTpl.Attempts, expTpl.FieldSeparator, cdrS.cgrCfg.GeneralCfg().HttpSkipTlsVerify, cdrS.httpPoster, - cdrS.attrS, cdrS.filterS); err != nil { + cdrS.cgrCfg.ApierCfg().AttributeSConns, cdrS.filterS); err != nil { // DON"T FORHERT TO TAKE ATTRIBUTESC FROM CDRS utils.Logger.Err(fmt.Sprintf(" Building CDRExporter for online exports got error: <%s>", err.Error())) continue } diff --git a/engine/libtest.go b/engine/libtest.go index cb6111974..2edb09368 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -31,7 +31,6 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/ltcache" - "github.com/cgrates/rpcclient" "github.com/creack/pty" ) @@ -376,8 +375,9 @@ func StopStartEngine(cfgPath string, waitEngine int) (*exec.Cmd, error) { } func LoadTariffPlanFromFolder(tpPath, timezone string, dm *DataManager, disable_reverse bool, - cacheS rpcclient.ClientConnector, schedulerS rpcclient.ClientConnector) error { - loader, err := NewTpReader(dm.dataDB, NewFileCSVStorage(utils.CSV_SEP, tpPath, false), "", timezone, cacheS, schedulerS) + cacheConns, schedConns []string) error { + loader, err := NewTpReader(dm.dataDB, NewFileCSVStorage(utils.CSV_SEP, tpPath, false), "", + timezone, cacheConns, schedConns) if err != nil { return utils.NewErrServerError(err) } diff --git a/engine/tpreader.go b/engine/tpreader.go index b3063e6cf..27bc02990 100644 --- a/engine/tpreader.go +++ b/engine/tpreader.go @@ -62,13 +62,13 @@ type TpReader struct { thresholds []*utils.TenantID // IDs of thresholds which need creation based on thresholdProfiles revDests, acntActionPlans map[string][]string - cacheS rpcclient.ClientConnector - schedulerS rpcclient.ClientConnector + cacheConns []string + schedulerConns []string } func NewTpReader(db DataDB, lr LoadReader, tpid, timezone string, - cacheS rpcclient.ClientConnector, schedulerS rpcclient.ClientConnector) (*TpReader, error) { - var rmtConns, rplConns *rpcclient.RPCPool + cacheConns, schedulerConns []string) (*TpReader, error) { + var rmtConns, rplConns *rpcclient.RpcClientPool if len(config.CgrConfig().DataDbCfg().RmtConns) != 0 { var err error rmtConns, err = NewRPCPool(rpcclient.PoolFirstPositive, config.CgrConfig().TlsCfg().ClientKey, @@ -92,12 +92,12 @@ func NewTpReader(db DataDB, lr LoadReader, tpid, timezone string, } } tpr := &TpReader{ - tpid: tpid, - timezone: timezone, - dm: NewDataManager(db, config.CgrConfig().CacheCfg(), rmtConns, rplConns), // ToDo: add ChacheCfg as parameter to the NewTpReader - lr: lr, - cacheS: cacheS, - schedulerS: schedulerS, + tpid: tpid, + timezone: timezone, + dm: NewDataManager(db, config.CgrConfig().CacheCfg(), rmtConns, rplConns), // ToDo: add ChacheCfg as parameter to the NewTpReader + lr: lr, + cacheConns: cacheConns, + schedulerConns: schedulerConns, } tpr.Init() //add *any and *asap timing tag (in case of no timings file) @@ -2385,7 +2385,7 @@ func (tpr *TpReader) RemoveFromDatabase(verbose, disable_reverse bool) (err erro } func (tpr *TpReader) ReloadCache(caching string, verbose bool, argDispatcher *utils.ArgDispatcher) (err error) { - if tpr.cacheS == nil { + if len(tpr.cacheConns) == 0 { log.Print("Disabled automatic reload") return } @@ -2450,20 +2450,20 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, argDispatcher *ut case utils.META_NONE: return case utils.MetaReload: - if err = tpr.cacheS.Call(utils.CacheSv1ReloadCache, cacheArgs, &reply); err != nil { + if err = connMgr.Call(tpr.cacheConns, utils.CacheSv1ReloadCache, cacheArgs, &reply); err != nil { return } case utils.MetaLoad: - if err = tpr.cacheS.Call(utils.CacheSv1LoadCache, cacheArgs, &reply); err != nil { + if err = connMgr.Call(tpr.cacheConns, utils.CacheSv1LoadCache, cacheArgs, &reply); err != nil { return } case utils.MetaRemove: - if err = tpr.cacheS.Call(utils.CacheSv1FlushCache, cacheArgs, &reply); err != nil { + if err = connMgr.Call(tpr.cacheConns, utils.CacheSv1FlushCache, cacheArgs, &reply); err != nil { return } case utils.MetaClear: cacheArgs.FlushAll = true - if err = tpr.cacheS.Call(utils.CacheSv1FlushCache, cacheArgs, &reply); err != nil { + if err = connMgr.Call(tpr.cacheConns, utils.CacheSv1FlushCache, cacheArgs, &reply); err != nil { return } } @@ -2498,7 +2498,7 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, argDispatcher *ut ArgDispatcher: argDispatcher, CacheIDs: cacheIDs, } - if err = tpr.cacheS.Call(utils.CacheSv1Clear, clearArgs, &reply); err != nil { + if err = connMgr.Call(tpr.cacheConns, utils.CacheSv1Clear, clearArgs, &reply); err != nil { log.Printf("WARNING: Got error on cache clear: %s\n", err.Error()) } @@ -2523,7 +2523,7 @@ func (tpr *TpReader) ReloadScheduler(verbose bool) (err error) { if verbose { log.Print("Reloading scheduler") } - if err = tpr.schedulerS.Call(utils.SchedulerSv1Reload, + if err = connMgr.Call(tpr.schedulerConns, utils.SchedulerSv1Reload, new(utils.CGREventWithArgDispatcher), &reply); err != nil { log.Printf("WARNING: Got error on scheduler reload: %s\n", err.Error()) } diff --git a/general_tests/tut_smgeneric_it_test.go b/general_tests/tut_smgeneric_it_test.go index 1c1f4fdfb..b0396a111 100644 --- a/general_tests/tut_smgeneric_it_test.go +++ b/general_tests/tut_smgeneric_it_test.go @@ -143,6 +143,7 @@ func testTutSMGCacheStats(t *testing.T) { expectedStats[utils.CacheActionTriggers].Items = 1 expectedStats[utils.CacheLoadIDs].Items = 20 expectedStats[utils.CacheChargerProfiles].Items = 1 + expectedStats[utils.CacheRPCConnections].Items = 2 if err := tutSMGRpc.Call(utils.CacheSv1GetCacheStats, new(utils.AttrCacheIDsWithArgDispatcher), &rcvStats); err != nil { t.Error("Got error on CacheSv1.GetCacheStats: ", err.Error()) } else if !reflect.DeepEqual(expectedStats, rcvStats) { diff --git a/services/apierv1.go b/services/apierv1.go index b1157d0ea..6feb90820 100644 --- a/services/apierv1.go +++ b/services/apierv1.go @@ -32,23 +32,21 @@ import ( // NewApierV1Service returns the ApierV1 Service func NewApierV1Service(cfg *config.CGRConfig, dm *DataDBService, storDB *StorDBService, filterSChan chan *engine.FilterS, - server *utils.Server, cacheSChan, schedChan, attrsChan, - dispatcherChan chan rpcclient.ClientConnector, + server *utils.Server, schedService *SchedulerService, - responderService *ResponderService) *ApierV1Service { + responderService *ResponderService, + internalAPIerV1Chan chan rpcclient.RpcClientConnection, + connMgr *engine.ConnManager) *ApierV1Service { return &ApierV1Service{ - connChan: make(chan rpcclient.ClientConnector, 1), + connChan: internalAPIerV1Chan, cfg: cfg, dm: dm, storDB: storDB, filterSChan: filterSChan, server: server, - cacheSChan: cacheSChan, - schedChan: schedChan, - attrsChan: attrsChan, - dispatcherChan: dispatcherChan, schedService: schedService, responderService: responderService, + connMgr: connMgr, } } @@ -60,12 +58,9 @@ type ApierV1Service struct { storDB *StorDBService filterSChan chan *engine.FilterS server *utils.Server - cacheSChan chan rpcclient.ClientConnector - schedChan chan rpcclient.ClientConnector - attrsChan chan rpcclient.ClientConnector - dispatcherChan chan rpcclient.ClientConnector schedService *SchedulerService responderService *ResponderService + connMgr *engine.ConnManager api *v1.ApierV1 connChan chan rpcclient.ClientConnector @@ -84,28 +79,6 @@ func (api *ApierV1Service) Start() (err error) { api.Lock() defer api.Unlock() - // create cache connection - var cacheSrpc, schedulerSrpc, attributeSrpc rpcclient.ClientConnector - if cacheSrpc, err = NewConnection(api.cfg, api.cacheSChan, api.dispatcherChan, api.cfg.ApierCfg().CachesConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.CacheS, err.Error())) - return - } - - // create scheduler connection - if schedulerSrpc, err = NewConnection(api.cfg, api.schedChan, api.dispatcherChan, api.cfg.ApierCfg().SchedulerConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.SchedulerS, err.Error())) - return - } - - // create scheduler connection - if attributeSrpc, err = NewConnection(api.cfg, api.attrsChan, api.dispatcherChan, api.cfg.ApierCfg().AttributeSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.AttributeS, err.Error())) - return - } - api.api = &v1.ApierV1{ DataManager: api.dm.GetDM(), CdrDb: api.storDB.GetDM(), @@ -115,10 +88,9 @@ func (api *ApierV1Service) Start() (err error) { SchedulerService: api.schedService, HTTPPoster: engine.NewHTTPPoster(api.cfg.GeneralCfg().HttpSkipTlsVerify, api.cfg.GeneralCfg().ReplyTimeout), - FilterS: filterS, - CacheS: cacheSrpc, - SchedulerS: schedulerSrpc, - AttributeS: attributeSrpc} + FilterS: filterS, + ConnMgr: api.connMgr, + } if !api.cfg.DispatcherSCfg().Enabled { api.server.RpcRegister(api.api) @@ -141,33 +113,10 @@ func (api *ApierV1Service) GetIntenternalChan() (conn chan rpcclient.ClientConne // Reload handles the change of config func (api *ApierV1Service) Reload() (err error) { - var cacheSrpc, schedulerSrpc, attributeSrpc rpcclient.ClientConnector - if cacheSrpc, err = NewConnection(api.cfg, api.cacheSChan, api.dispatcherChan, api.cfg.ApierCfg().CachesConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.CacheS, err.Error())) - return - } - - // create scheduler connection - if schedulerSrpc, err = NewConnection(api.cfg, api.schedChan, api.dispatcherChan, api.cfg.ApierCfg().SchedulerConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.SchedulerS, err.Error())) - return - } - - // create scheduler connection - if attributeSrpc, err = NewConnection(api.cfg, api.attrsChan, api.dispatcherChan, api.cfg.ApierCfg().AttributeSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.ApierV1, utils.AttributeS, err.Error())) - return - } api.Lock() if api.storDB.WasReconnected() { // rewrite the connection if was changed api.api.SetStorDB(api.storDB.GetDM()) } - api.api.SetAttributeSConnection(attributeSrpc) - api.api.SetCacheSConnection(cacheSrpc) - api.api.SetSchedulerSConnection(schedulerSrpc) api.Unlock() return } diff --git a/services/apierv2.go b/services/apierv2.go index 256791f11..dd2067db6 100644 --- a/services/apierv2.go +++ b/services/apierv2.go @@ -30,10 +30,11 @@ import ( // NewApierV2Service returns the ApierV2 Service func NewApierV2Service(apiv1 *ApierV1Service, cfg *config.CGRConfig, - server *utils.Server) *ApierV2Service { + server *utils.Server, + internalAPIerV1Chan chan rpcclient.RpcClientConnection) *ApierV2Service { return &ApierV2Service{ apiv1: apiv1, - connChan: make(chan rpcclient.ClientConnector, 1), + connChan: internalAPIerV1Chan, cfg: cfg, server: server, } diff --git a/services/cdrs_it_test.go b/services/cdrs_it_test.go index 576eca4f2..7f6643b64 100644 --- a/services/cdrs_it_test.go +++ b/services/cdrs_it_test.go @@ -70,10 +70,9 @@ func TestCdrsReload(t *testing.T) { stordb := NewStorDBService(cfg) chrS := NewChargerService(cfg, db, chS, filterSChan, server, nil, nil) schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - tS.GetIntenternalChan(), internalChan, cacheSChan, internalChan, internalChan, - internalChan, schS, engineShutdown) + make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + schS, engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, make(chan rpcclient.ClientConnector, 1), chrS.GetIntenternalChan(), ralS.GetResponder().GetIntenternalChan(), diff --git a/services/rals.go b/services/rals.go index 54d2a615a..236396d63 100644 --- a/services/rals.go +++ b/services/rals.go @@ -33,19 +33,21 @@ import ( // NewRalService returns the Ral Service func NewRalService(cfg *config.CGRConfig, dm *DataDBService, storDB *StorDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, server *utils.Server, - thsChan, stsChan, cacheSChan, schedChan, attrsChan, dispatcherChan chan rpcclient.ClientConnector, - schedulerService *SchedulerService, exitChan chan bool) *RalService { - resp := NewResponderService(cfg, server, thsChan, stsChan, dispatcherChan, exitChan) - apiv1 := NewApierV1Service(cfg, dm, storDB, filterSChan, server, cacheSChan, schedChan, attrsChan, dispatcherChan, schedulerService, resp) - apiv2 := NewApierV2Service(apiv1, cfg, server) + internalRALsChan, internalResponderChan, internalAPIerV1Chan, internalAPIerV2Chan chan rpcclient.RpcClientConnection, + schedulerService *SchedulerService, exitChan chan bool, + connMgr *engine.ConnManager) *RalService { + resp := NewResponderService(cfg, server, internalResponderChan, exitChan) + apiv1 := NewApierV1Service(cfg, dm, storDB, filterSChan, server, schedulerService, resp, internalAPIerV1Chan, connMgr) + apiv2 := NewApierV2Service(apiv1, cfg, server, internalAPIerV2Chan) return &RalService{ - connChan: make(chan rpcclient.ClientConnector, 1), + connChan: internalRALsChan, cfg: cfg, cacheS: cacheS, server: server, apiv1: apiv1, apiv2: apiv2, responder: resp, + connMgr: connMgr, } } @@ -60,6 +62,7 @@ type RalService struct { apiv2 *ApierV2Service responder *ResponderService connChan chan rpcclient.ClientConnector + connMgr *engine.ConnManager } // Start should handle the sercive start @@ -68,7 +71,7 @@ func (rals *RalService) Start() (err error) { if rals.IsRunning() { return fmt.Errorf("service aleady running") } - + engine.SetConnManager(rals.connMgr) engine.SetRpSubjectPrefixMatching(rals.cfg.RalsCfg().RpSubjectPrefixMatching) rals.Lock() defer rals.Unlock() diff --git a/services/rals_it_test.go b/services/rals_it_test.go index ed1f2cf27..177f7855d 100644 --- a/services/rals_it_test.go +++ b/services/rals_it_test.go @@ -70,8 +70,8 @@ func TestRalsReload(t *testing.T) { schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - tS.GetIntenternalChan(), internalChan, cacheSChan, internalChan, internalChan, - internalChan, schS, engineShutdown) + make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + schS, engineShutdown, nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), ralS, schS, tS, NewLoaderService(cfg, db, filterSChan, server, cacheSChan, nil, engineShutdown), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/responders.go b/services/responders.go index 841832065..2ab30588d 100644 --- a/services/responders.go +++ b/services/responders.go @@ -30,28 +30,22 @@ import ( // NewResponderService returns the Resonder Service func NewResponderService(cfg *config.CGRConfig, server *utils.Server, - thsChan, stsChan, dispatcherChan chan rpcclient.ClientConnector, + internalRALsChan chan rpcclient.RpcClientConnection, exitChan chan bool) *ResponderService { return &ResponderService{ - connChan: make(chan rpcclient.ClientConnector, 1), - cfg: cfg, - server: server, - thsChan: thsChan, - stsChan: stsChan, - dispatcherChan: dispatcherChan, - exitChan: exitChan, + connChan: internalRALsChan, + cfg: cfg, + server: server, + exitChan: exitChan, } } // ResponderService implements Service interface type ResponderService struct { sync.RWMutex - cfg *config.CGRConfig - server *utils.Server - thsChan chan rpcclient.ClientConnector - stsChan chan rpcclient.ClientConnector - dispatcherChan chan rpcclient.ClientConnector - exitChan chan bool + cfg *config.CGRConfig + server *utils.Server + exitChan chan bool resp *engine.Responder connChan chan rpcclient.ClientConnector @@ -64,23 +58,6 @@ func (resp *ResponderService) Start() (err error) { return fmt.Errorf("service aleady running") } - var thdS, stats rpcclient.ClientConnector - if thdS, err = NewConnection(resp.cfg, resp.thsChan, resp.dispatcherChan, resp.cfg.RalsCfg().ThresholdSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.RALService, utils.ThresholdS, err.Error())) - return - } - if stats, err = NewConnection(resp.cfg, resp.stsChan, resp.dispatcherChan, resp.cfg.RalsCfg().StatSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.RALService, utils.StatS, err.Error())) - return - } - if thdS != nil { - engine.SetThresholdS(thdS) // temporary architectural fix until we will have separate AccountS - } - if stats != nil { - engine.SetStatS(stats) - } resp.Lock() defer resp.Unlock() resp.resp = &engine.Responder{ @@ -105,25 +82,8 @@ func (resp *ResponderService) GetIntenternalChan() (conn chan rpcclient.ClientCo // Reload handles the change of config func (resp *ResponderService) Reload() (err error) { - var thdS, stats rpcclient.ClientConnector - if thdS, err = NewConnection(resp.cfg, resp.thsChan, resp.dispatcherChan, resp.cfg.RalsCfg().ThresholdSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.RALService, utils.ThresholdS, err.Error())) - return - } - if stats, err = NewConnection(resp.cfg, resp.stsChan, resp.dispatcherChan, resp.cfg.RalsCfg().StatSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s, error: %s", - utils.RALService, utils.StatS, err.Error())) - return - } resp.Lock() resp.resp.MaxComputedUsage = resp.cfg.RalsCfg().MaxComputedUsage // this may cause concurrency problems - if thdS != nil { - engine.SetThresholdS(thdS) // temporary architectural fix until we will have separate AccountS - } - if stats != nil { - engine.SetStatS(stats) - } resp.Unlock() return } diff --git a/services/schedulers.go b/services/schedulers.go index f42a2216d..edb377a3d 100644 --- a/services/schedulers.go +++ b/services/schedulers.go @@ -33,34 +33,32 @@ import ( // NewSchedulerService returns the Scheduler Service func NewSchedulerService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, fltrSChan chan *engine.FilterS, - server *utils.Server, internalCDRServerChan, - dispatcherChan chan rpcclient.ClientConnector) *SchedulerService { + server *utils.Server, internalSchedulerrSChan chan rpcclient.RpcClientConnection, + connMgr *engine.ConnManager) *SchedulerService { return &SchedulerService{ - connChan: make(chan rpcclient.ClientConnector, 1), - cfg: cfg, - dm: dm, - cacheS: cacheS, - fltrSChan: fltrSChan, - server: server, - cdrSChan: internalCDRServerChan, - dispatcherChan: dispatcherChan, + connChan: internalSchedulerrSChan, + cfg: cfg, + dm: dm, + cacheS: cacheS, + fltrSChan: fltrSChan, + server: server, + connMgr: connMgr, } } // SchedulerService implements Service interface type SchedulerService struct { sync.RWMutex - cfg *config.CGRConfig - dm *DataDBService - cacheS *engine.CacheS - fltrSChan chan *engine.FilterS - server *utils.Server - cdrSChan chan rpcclient.ClientConnector - dispatcherChan chan rpcclient.ClientConnector + cfg *config.CGRConfig + dm *DataDBService + cacheS *engine.CacheS + fltrSChan chan *engine.FilterS + server *utils.Server schS *scheduler.Scheduler rpc *v1.SchedulerSv1 connChan chan rpcclient.ClientConnector + connMgr *engine.ConnManager } // Start should handle the sercive start @@ -86,16 +84,6 @@ func (schS *SchedulerService) Start() (err error) { } schS.connChan <- schS.rpc - // Create connection to CDR Server and share it in engine(used for *cdrlog action) - cdrsConn, err := NewConnection(schS.cfg, schS.cdrSChan, schS.dispatcherChan, schS.cfg.SchedulerCfg().CDRsConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to CDRServer: %s", utils.SchedulerS, err.Error())) - return - } - - // ToDo: this should be send to scheduler - engine.SetSchedCdrsConns(cdrsConn) - return } @@ -106,13 +94,6 @@ func (schS *SchedulerService) GetIntenternalChan() (conn chan rpcclient.ClientCo // Reload handles the change of config func (schS *SchedulerService) Reload() (err error) { - cdrsConn, err := NewConnection(schS.cfg, schS.cdrSChan, schS.dispatcherChan, schS.cfg.SchedulerCfg().CDRsConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to CDRServer: %s", utils.SchedulerS, err.Error())) - return - } - // ToDo: this should be send to scheduler - engine.SetSchedCdrsConns(cdrsConn) schS.Lock() schS.schS.Reload() schS.Unlock() diff --git a/services/schedulers_it_test.go b/services/schedulers_it_test.go index 501d07ed5..b0eaaa8fb 100644 --- a/services/schedulers_it_test.go +++ b/services/schedulers_it_test.go @@ -45,11 +45,10 @@ func TestSchedulerSReload(t *testing.T) { close(chS.GetPrecacheChannel(utils.CacheActionPlans)) server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) - internalCdrSChan := make(chan rpcclient.ClientConnector, 1) - internalCdrSChan <- nil db := NewDataDBService(cfg) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, internalCdrSChan, nil) - srvMngr.AddServices(NewConnManagerService(cfg, nil), schS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + srvMngr.AddServices(NewConnManagerService(cfg, nil), schS, + NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/sessions_it_test.go b/services/sessions_it_test.go index 10da6ee38..3d747a268 100644 --- a/services/sessions_it_test.go +++ b/services/sessions_it_test.go @@ -73,8 +73,8 @@ func TestSessionSReload(t *testing.T) { chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - /*tS*/ internalChan, internalChan, cacheSChan, internalChan, internalChan, - internalChan, schS, engineShutdown) + make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + schS, engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, make(chan rpcclient.ClientConnector, 1), chrS.GetIntenternalChan(), ralS.GetResponder().GetIntenternalChan(),