From 95477bcabc071cc2d7295e16a0b2cd4b04373cc0 Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 10 Dec 2019 04:32:26 -0500 Subject: [PATCH] Add conncetions from Sessions and CDRs through ConnManager --- apier/v1/debit_test.go | 15 ++ cdrc/cdrc.go | 14 +- cdrc/csv.go | 10 +- cdrc/partial_cdr.go | 18 +- cdrc/partialcsv_it_test.go | 1 + cmd/cgr-engine/cgr-engine.go | 48 ++--- config/cdrccfg.go | 21 +- config/cdrccfg_test.go | 6 +- config/cdrscfg.go | 70 ++++--- config/cdrscfg_test.go | 14 +- config/cfg_data2.json | 7 - config/config_defaults.go | 4 +- config/config_it_test.go | 62 ++---- config/config_json_test.go | 36 ++-- config/config_test.go | 105 ++++------ config/configcdrc_test.go | 8 +- config/configsanity.go | 162 ++++++++------- config/configsanity_test.go | 117 +++-------- config/libconfig_json.go | 28 +-- config/smconfig.go | 112 ++++++---- config/smconfig_test.go | 24 +-- .../samples/acc_balance_keep/cgrates.json | 4 +- .../samples/acc_balance_keep_gob/cgrates.json | 4 +- data/conf/samples/actions/cgradmin.json | 4 +- data/conf/samples/actions_gob/cgradmin.json | 11 +- data/conf/samples/apier/apier.json | 8 +- data/conf/samples/cdrcflatstore/cgrates.json | 4 +- data/conf/samples/cdrcfwv/cgrates.json | 4 +- .../samples/cdrcfwvwithfilter/cgrates.json | 8 +- .../samples/cdrcxmlwithfilter/cgrates.json | 2 +- data/conf/samples/cdrewithfilter/cgrates.json | 32 +-- .../cdrsreplicationmaster.json | 8 +- .../cdrsonexpslave/cdrsreplicationslave.json | 8 +- data/conf/samples/cdrsv1internal/cgrates.json | 4 +- data/conf/samples/cdrsv2internal/cgrates.json | 20 +- data/conf/samples/cdrsv2mongo/cgrates.json | 20 +- .../conf/samples/cdrsv2mongo_gob/cgrates.json | 20 +- .../conf/samples/cdrsv2mysql/cdrsv2mysql.json | 20 +- .../samples/cdrsv2mysql_gob/cdrsv2mysql.json | 20 +- data/conf/samples/cdrsv2psql/cdrsv2psql.json | 20 +- data/conf/samples/diamagent/cgrates.json | 16 +- .../samples/diamagentmaxconn/cgrates.json | 16 +- data/conf/samples/diamsctpagent/cgrates.json | 16 +- .../conf/samples/dispatchers/all/cgrates.json | 32 +-- .../samples/dispatchers/all2/cgrates.json | 32 +-- .../dispatchers/diamagent/cgrates.json | 4 +- .../dispatchers/dispatchers/cgrates.json | 20 +- .../dispatchers_mongo/cgrates.json | 23 +- data/conf/samples/dnsagent/cgrates.json | 20 +- .../conf/samples/dnsagent_reload/cgrates.json | 24 +-- data/conf/samples/ers/cgrates.json | 30 +-- data/conf/samples/ers_example/cgrates.json | 28 +-- .../samples/ers_reload/disabled/cgrates.json | 28 +-- .../ers_reload/first_reload/cgrates.json | 28 +-- .../samples/ers_reload/internal/cgrates.json | 28 +-- .../ers_reload/second_reload/cgrates.json | 28 +-- data/conf/samples/hapool/cgrrater1/cgr.json | 27 --- data/conf/samples/hapool/cgrrater2/cgr.json | 28 --- data/conf/samples/hapool/cgrsmg1/cgr.json | 26 --- data/conf/samples/hapool/cgrsmg2/cgr.json | 27 --- data/conf/samples/hapool/dagent/cgr.json | 10 - data/conf/samples/httpagent/cgrates.json | 24 +-- data/conf/samples/httpagent_gob/cgrates.json | 24 +-- data/conf/samples/httpagenttls/cgrates.json | 27 +-- .../samples/httpagenttls_gob/cgrates.json | 27 +-- .../samples/loaders/tutmongo/cgrates.json | 12 +- .../samples/loaders/tutmysql/cgrates.json | 28 +-- data/conf/samples/mongoatlas/cgrates.json | 12 +- data/conf/samples/mongoreplica/cgrates.json | 12 +- data/conf/samples/radagent/cgrates.json | 24 +-- data/conf/samples/radagent_gob/cgrates.json | 32 ++- data/conf/samples/rpccaching/cgrates.json | 16 +- data/conf/samples/sessions/cgrates.json | 40 +--- .../smgreplcmaster/cgrates.json | 12 +- .../smgreplcslave/cgrates.json | 23 +- data/conf/samples/smg/cgrates.json | 12 +- .../samples/smg_automatic_debits/cgrates.json | 12 +- data/conf/samples/smg_gob/cgrates.json | 12 +- data/conf/samples/smgeneric/cgrates.json | 12 +- data/conf/samples/smgreplcmaster/cgrates.json | 12 +- .../samples/smgreplcmaster_gob/cgrates.json | 12 +- data/conf/samples/smgreplcslave/cgrates.json | 20 +- .../samples/smgreplcslave_gob/cgrates.json | 19 +- data/conf/samples/tls/cgrates.json | 16 +- data/conf/samples/tls_gob/cgrates.json | 16 +- data/conf/samples/tutinternal/cgrates.json | 28 +-- data/conf/samples/tutmongo/cgrates.json | 12 +- data/conf/samples/tutmongo2/cgrates.json | 28 +-- data/conf/samples/tutmongo2_gob/cgrates.json | 28 +-- data/conf/samples/tutmongo_gob/cgrates.json | 12 +- data/conf/samples/tutmongonew/cgrates.json | 16 +- data/conf/samples/tutmysql/cgrates.json | 28 +-- data/conf/samples/tutmysql2/cgrates.json | 28 +-- data/conf/samples/tutmysql2_gob/cgrates.json | 28 +-- .../samples/tutmysql_internal/cgrates.json | 30 +-- data/conf/samples/tutpostgres/cgrates.json | 12 +- engine/cdrs.go | 133 +++++------- services/cdrs.go | 110 ++-------- services/cdrs_it_test.go | 7 +- services/chargers_it_test.go | 4 +- services/dnsagent_it_test.go | 5 +- services/ers_it_test.go | 4 +- services/rals_it_test.go | 6 +- services/resources_it_test.go | 4 +- services/schedulers_it_test.go | 2 +- services/sessions.go | 156 ++------------ services/sessions_it_test.go | 14 +- services/stats_it_test.go | 4 +- services/suppliers_it_test.go | 4 +- services/thresholds_it_test.go | 2 +- sessions/sessions.go | 196 ++++-------------- sessions/sessions_test.go | 141 ++----------- 112 files changed, 937 insertions(+), 2155 deletions(-) delete mode 100644 data/conf/samples/hapool/cgrrater1/cgr.json delete mode 100644 data/conf/samples/hapool/cgrrater2/cgr.json delete mode 100644 data/conf/samples/hapool/cgrsmg1/cgr.json delete mode 100644 data/conf/samples/hapool/cgrsmg2/cgr.json delete mode 100644 data/conf/samples/hapool/dagent/cgr.json diff --git a/apier/v1/debit_test.go b/apier/v1/debit_test.go index 60dc39ed1..58ec6773c 100644 --- a/apier/v1/debit_test.go +++ b/apier/v1/debit_test.go @@ -37,6 +37,21 @@ var ( func init() { apierDebitStorage = engine.NewInternalDB(nil, nil) cfg, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg) + responder := &engine.Responder{MaxComputedUsage: cfg.RalsCfg().MaxComputedUsage} + dm = engine.NewDataManager(apierDebitStorage, config.CgrConfig().CacheCfg(), nil, nil) + engine.SetDataStorage(dm) + apierDebit = &ApierV1{ + DataManager: dm, + Config: cfg, + Responder: responder, + } +} + +func TestDebitUsageWithOptionsSetConfig(t *testing.T) { + apierDebitStorage = engine.NewInternalDB(nil, nil) + cfg, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg) responder := &engine.Responder{MaxComputedUsage: cfg.RalsCfg().MaxComputedUsage} dm = engine.NewDataManager(apierDebitStorage, config.CgrConfig().CacheCfg(), nil, nil) engine.SetDataStorage(dm) diff --git a/cdrc/cdrc.go b/cdrc/cdrc.go index adc97c47f..3b469b6c9 100644 --- a/cdrc/cdrc.go +++ b/cdrc/cdrc.go @@ -53,16 +53,16 @@ Parameters specific per config instance: * cdrSourceId, cdrFilter, cdrFields */ func NewCdrc(cdrcCfgs []*config.CdrcCfg, httpSkipTlsCheck bool, cdrs rpcclient.ClientConnector, - closeChan chan struct{}, dfltTimezone string, filterS *engine.FilterS) (cdrc *Cdrc, err error) { + closeChan chan struct{}, dfltTimezone string, filterS *engine.FilterS, connMgr *engine.ConnManager) (cdrc *Cdrc, err error) { cdrcCfg := cdrcCfgs[0] cdrc = &Cdrc{ httpSkipTlsCheck: httpSkipTlsCheck, cdrcCfgs: cdrcCfgs, dfltCdrcCfg: cdrcCfg, timezone: utils.FirstNonEmpty(cdrcCfg.Timezone, dfltTimezone), - cdrs: cdrs, closeChan: closeChan, maxOpenFiles: make(chan struct{}, cdrcCfg.MaxOpenFiles), + connMgr: connMgr, } // Before processing, make sure in and out folders exist if utils.CDRCFileFormats.Has(cdrcCfg.CdrFormat) { @@ -81,7 +81,7 @@ func NewCdrc(cdrcCfgs []*config.CdrcCfg, httpSkipTlsCheck bool, cdrs rpcclient.C cdrcCfg.CDROutPath, cdrcCfg.FieldSeparator) cdrc.partialRecordsCache = NewPartialRecordsCache(cdrcCfg.PartialRecordCache, cdrcCfg.PartialCacheExpiryAction, cdrcCfg.CDROutPath, - cdrcCfg.FieldSeparator, cdrc.timezone, httpSkipTlsCheck, cdrs, filterS) + cdrcCfg.FieldSeparator, cdrc.timezone, httpSkipTlsCheck, filterS, cdrc.dfltCdrcCfg.CdrsConns, cdrc.connMgr) cdrc.filterS = filterS return } @@ -91,12 +91,12 @@ type Cdrc struct { cdrcCfgs []*config.CdrcCfg // All cdrc config profiles attached to this CDRC (key will be profile instance name) dfltCdrcCfg *config.CdrcCfg timezone string - cdrs rpcclient.ClientConnector closeChan chan struct{} // Used to signal config reloads when we need to span different CDRC-Client maxOpenFiles chan struct{} // Maximum number of simultaneous files processed filterS *engine.FilterS unpairedRecordsCache *UnpairedRecordsCache // Shared between all files in the folder we process partialRecordsCache *PartialRecordsCache + connMgr *engine.ConnManager } // When called fires up folder monitoring, either automated via inotify or manual by sleeping between processing @@ -186,8 +186,8 @@ func (self *Cdrc) processFile(filePath string) error { csvReader.Comment = '#' recordsProcessor = NewCsvRecordsProcessor(csvReader, self.timezone, fn, self.dfltCdrcCfg, self.cdrcCfgs, self.httpSkipTlsCheck, - self.dfltCdrcCfg.CacheDumpFields, self.filterS, self.cdrs, - self.unpairedRecordsCache, self.partialRecordsCache) + self.dfltCdrcCfg.CacheDumpFields, self.filterS, + self.unpairedRecordsCache, self.partialRecordsCache, self.connMgr) case utils.MetaFileFWV: recordsProcessor = NewFwvRecordsProcessor(file, self.dfltCdrcCfg, self.cdrcCfgs, self.httpSkipTlsCheck, self.timezone, self.filterS) @@ -217,7 +217,7 @@ func (self *Cdrc) processFile(filePath string) error { utils.Logger.Info(fmt.Sprintf(" DryRun CDR: %+v", storedCdr)) continue } - if err := self.cdrs.Call(utils.CDRsV1ProcessEvent, + if err := self.connMgr.Call(self.dfltCdrcCfg.CdrsConns, utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{CGREvent: *storedCdr.AsCGREvent()}, &reply); err != nil { utils.Logger.Err(fmt.Sprintf(" Failed sending CDR, %+v, error: %s", storedCdr, err.Error())) } else if reply != "OK" { diff --git a/cdrc/csv.go b/cdrc/csv.go index 3e3daac26..bd3ef5f36 100644 --- a/cdrc/csv.go +++ b/cdrc/csv.go @@ -28,21 +28,22 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func NewCsvRecordsProcessor(csvReader *csv.Reader, timezone, fileName string, dfltCdrcCfg *config.CdrcCfg, cdrcCfgs []*config.CdrcCfg, httpSkipTlsCheck bool, cacheDumpFields []*config.FCTemplate, - filterS *engine.FilterS, cdrs rpcclient.ClientConnector, - unp *UnpairedRecordsCache, prt *PartialRecordsCache) *CsvRecordsProcessor { + filterS *engine.FilterS, + unp *UnpairedRecordsCache, prt *PartialRecordsCache, + connMgr *engine.ConnManager) *CsvRecordsProcessor { return &CsvRecordsProcessor{csvReader: csvReader, timezone: timezone, fileName: fileName, dfltCdrcCfg: dfltCdrcCfg, cdrcCfgs: cdrcCfgs, httpSkipTlsCheck: httpSkipTlsCheck, unpairedRecordsCache: unp, partialRecordsCache: prt, - partialCacheDumpFields: cacheDumpFields, filterS: filterS} + partialCacheDumpFields: cacheDumpFields, filterS: filterS, + connMgr: connMgr} } @@ -58,6 +59,7 @@ type CsvRecordsProcessor struct { partialRecordsCache *PartialRecordsCache // Cache records which are of type "Partial" partialCacheDumpFields []*config.FCTemplate filterS *engine.FilterS + connMgr *engine.ConnManager } func (self *CsvRecordsProcessor) ProcessedRecordsNr() int64 { diff --git a/cdrc/partial_cdr.go b/cdrc/partial_cdr.go index 7c59350a3..39d3692f2 100644 --- a/cdrc/partial_cdr.go +++ b/cdrc/partial_cdr.go @@ -31,7 +31,6 @@ import ( "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) const ( @@ -40,13 +39,15 @@ const ( func NewPartialRecordsCache(ttl time.Duration, expiryAction string, cdrOutDir string, csvSep rune, timezone string, httpSkipTlsCheck bool, - cdrs rpcclient.ClientConnector, filterS *engine.FilterS) *PartialRecordsCache { + filterS *engine.FilterS, cdrsConnIDs []string, connMgr *engine.ConnManager) *PartialRecordsCache { return &PartialRecordsCache{ttl: ttl, expiryAction: expiryAction, cdrOutDir: cdrOutDir, csvSep: csvSep, timezone: timezone, - httpSkipTlsCheck: httpSkipTlsCheck, cdrs: cdrs, - partialRecords: make(map[string]*PartialCDRRecord), - dumpTimers: make(map[string]*time.Timer), - guard: guardian.Guardian, filterS: filterS} + httpSkipTlsCheck: httpSkipTlsCheck, + partialRecords: make(map[string]*PartialCDRRecord), + dumpTimers: make(map[string]*time.Timer), + guard: guardian.Guardian, filterS: filterS, + connMgr: connMgr, + cdrsConnIDs: cdrsConnIDs} } type PartialRecordsCache struct { @@ -56,11 +57,12 @@ type PartialRecordsCache struct { csvSep rune timezone string httpSkipTlsCheck bool - cdrs rpcclient.ClientConnector partialRecords map[string]*PartialCDRRecord // [OriginID]*PartialRecord dumpTimers map[string]*time.Timer // [OriginID]*time.Timer which can be canceled or reset guard *guardian.GuardianLocker filterS *engine.FilterS + connMgr *engine.ConnManager + cdrsConnIDs []string } // Dumps the cache into a .unpaired file in the outdir and cleans cache after @@ -103,7 +105,7 @@ func (prc *PartialRecordsCache) postCDR(originID string) { cdr := prc.partialRecords[originID].MergeCDRs() cdr.Partial = false // force completion var reply string - if err := prc.cdrs.Call(utils.CDRsV1ProcessEvent, + if err := prc.connMgr.Call(prc.cdrsConnIDs, utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{CGREvent: *cdr.AsCGREvent()}, &reply); err != nil { utils.Logger.Err(fmt.Sprintf(" Failed sending CDR %+v from partial cache, error: %s", cdr, err.Error())) } else if reply != utils.OK { diff --git a/cdrc/partialcsv_it_test.go b/cdrc/partialcsv_it_test.go index d28f689e8..901d3a7c4 100644 --- a/cdrc/partialcsv_it_test.go +++ b/cdrc/partialcsv_it_test.go @@ -102,6 +102,7 @@ func TestPartcsvITStartEngine(t *testing.T) { // Connect rpc client to rater func TestPartcsvITRpcConn(t *testing.T) { + time.Sleep(5 * time.Second) var err error partcsvRPC, err = newRPCClient(partcsvCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 9b9bd9725..e7b4a6959 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -60,16 +60,11 @@ var ( cfg *config.CGRConfig ) -func startCdrcs(internalCdrSChan, internalRaterChan, internalDispatcherSChan chan rpcclient.ClientConnector, - filterSChan chan *engine.FilterS, exitChan chan bool) { +func startCdrcs(filterSChan chan *engine.FilterS, exitChan chan bool, connMgr *engine.ConnManager) { filterS := <-filterSChan filterSChan <- filterS cdrcInitialized := false // Control whether the cdrc was already initialized (so we don't reload in that case) var cdrcChildrenChan chan struct{} // Will use it to communicate with the children of one fork - intCdrSChan := internalCdrSChan - if cfg.DispatcherSCfg().Enabled { - intCdrSChan = internalDispatcherSChan - } for { select { case <-exitChan: // Stop forking CDRCs @@ -90,9 +85,9 @@ func startCdrcs(internalCdrSChan, internalRaterChan, internalDispatcherSChan cha } } if len(enabledCfgs) != 0 { - go startCdrc(intCdrSChan, internalRaterChan, enabledCfgs, + go startCdrc(enabledCfgs, cfg.GeneralCfg().HttpSkipTlsVerify, filterSChan, - cdrcChildrenChan, exitChan) + cdrcChildrenChan, exitChan, connMgr) } else { utils.Logger.Info(" No enabled CDRC clients") } @@ -102,26 +97,15 @@ func startCdrcs(internalCdrSChan, internalRaterChan, internalDispatcherSChan cha } // Fires up a cdrc instance -func startCdrc(internalCdrSChan, internalRaterChan chan rpcclient.ClientConnector, cdrcCfgs []*config.CdrcCfg, httpSkipTlsCheck bool, - filterSChan chan *engine.FilterS, closeChan chan struct{}, exitChan chan bool) { +func startCdrc(cdrcCfgs []*config.CdrcCfg, httpSkipTlsCheck bool, + filterSChan chan *engine.FilterS, closeChan chan struct{}, exitChan chan bool, connMgr *engine.ConnManager) { filterS := <-filterSChan filterSChan <- filterS var err error var cdrsConn rpcclient.ClientConnector - cdrcCfg := cdrcCfgs[0] - cdrsConn, err = engine.NewRPCPool(rpcclient.PoolFirst, cfg.TlsCfg().ClientKey, - cfg.TlsCfg().ClientCerificate, cfg.TlsCfg().CaCertificate, - cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, - cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, - cdrcCfg.CdrsConns, internalCdrSChan, false) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to CDRS via RPC: %s", err.Error())) - exitChan <- true - return - } cdrc, err := cdrc.NewCdrc(cdrcCfgs, httpSkipTlsCheck, cdrsConn, closeChan, - cfg.GeneralCfg().DefaultTimezone, filterS) + cfg.GeneralCfg().DefaultTimezone, filterS, connMgr) if err != nil { utils.Logger.Crit(fmt.Sprintf("Cdrc config parsing error: %s", err.Error())) exitChan <- true @@ -520,10 +504,9 @@ func main() { 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(), - //utils.CDRsV2: cdrS.GetIntenternalChan(), - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): internalChargerSChan, - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaGuardian): internalGuardianSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs): internalCDRServerChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): internalChargerSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaGuardian): internalGuardianSChan, //utils.LoaderSv1: ldrs.GetIntenternalChan(), utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): internalResourceSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder): internalResponderChan, @@ -536,6 +519,7 @@ func main() { utils.ConcatenatedKey(utils.MetaInternal, utils.MetaConfig): internalConfigChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCore): internalCoreSv1Chan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): internalRALsChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaDispatchers): internalDispatcherSChan, }) attrS := services.NewAttributeService(cfg, dmService, cacheS, filterSChan, server, internalAttributeSChan) @@ -558,14 +542,10 @@ func main() { schS, exitChan, connManager.GetConnMgr()) cdrS := services.NewCDRServer(cfg, dmService, storDBService, filterSChan, server, internalCDRServerChan, - chrS.GetIntenternalChan(), rals.GetResponder().GetIntenternalChan(), - attrS.GetIntenternalChan(), tS.GetIntenternalChan(), - stS.GetIntenternalChan(), dspS.GetIntenternalChan()) + connManager.GetConnMgr()) + + smg := services.NewSessionService(cfg, dmService, server, internalSessionSChan, exitChan, connManager.GetConnMgr()) - smg := services.NewSessionService(cfg, dmService, server, chrS.GetIntenternalChan(), - rals.GetResponder().GetIntenternalChan(), reS.GetIntenternalChan(), - tS.GetIntenternalChan(), stS.GetIntenternalChan(), supS.GetIntenternalChan(), - attrS.GetIntenternalChan(), cdrS.GetIntenternalChan(), dspS.GetIntenternalChan(), internalSessionSChan, exitChan) ldrs := services.NewLoaderService(cfg, dmService, filterSChan, server, internalCacheSChan, dspS.GetIntenternalChan(), exitChan) anz := services.NewAnalyzerService(cfg, server, exitChan) @@ -618,7 +598,7 @@ func main() { initConfigSv1(internalConfigChan, server) // Start CDRC components if necessary - go startCdrcs(cdrS.GetIntenternalChan(), rals.GetResponder().GetIntenternalChan(), dspS.GetIntenternalChan(), filterSChan, exitChan) + go startCdrcs(filterSChan, exitChan, connManager.GetConnMgr()) // Serve rpc connections go startRpc(server, rals.GetResponder().GetIntenternalChan(), cdrS.GetIntenternalChan(), diff --git a/config/cdrccfg.go b/config/cdrccfg.go index 5d12714eb..006aa60d8 100644 --- a/config/cdrccfg.go +++ b/config/cdrccfg.go @@ -28,7 +28,7 @@ type CdrcCfg struct { ID string // free-form text identifying this CDRC instance Enabled bool // Enable/Disable the profile DryRun bool // Do not post CDRs to the server - CdrsConns []*RemoteHost // The address where CDRs can be reached + CdrsConns []string // The address where CDRs can be reached CdrFormat string // The type of CDR file to process <*csv|*opensips_flatstore> FieldSeparator rune // The separator to use when reading csvs Timezone string // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> @@ -65,10 +65,14 @@ func (self *CdrcCfg) loadFromJsonCfg(jsnCfg *CdrcJsonCfg, separator string) erro self.DryRun = *jsnCfg.Dry_run } if jsnCfg.Cdrs_conns != nil { - self.CdrsConns = make([]*RemoteHost, len(*jsnCfg.Cdrs_conns)) - for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - self.CdrsConns[idx] = NewDfltRemoteHost() - self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) + self.CdrsConns = make([]string, len(*jsnCfg.Cdrs_conns)) + for idx, connID := range *jsnCfg.Cdrs_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + self.CdrsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs) + } else { + self.CdrsConns[idx] = connID + } } } if jsnCfg.Cdr_format != nil { @@ -153,10 +157,9 @@ func (self *CdrcCfg) Clone() *CdrcCfg { clnCdrc.ID = self.ID clnCdrc.Enabled = self.Enabled clnCdrc.DryRun = self.DryRun - clnCdrc.CdrsConns = make([]*RemoteHost, len(self.CdrsConns)) - for idx, cdrConn := range self.CdrsConns { - clonedVal := *cdrConn - clnCdrc.CdrsConns[idx] = &clonedVal + clnCdrc.CdrsConns = make([]string, len(self.CdrsConns)) + for idx, connID := range self.CdrsConns { + clnCdrc.CdrsConns[idx] = connID } clnCdrc.CdrFormat = self.CdrFormat clnCdrc.FieldSeparator = self.FieldSeparator diff --git a/config/cdrccfg_test.go b/config/cdrccfg_test.go index fd8a6a9b2..4f4f9225b 100644 --- a/config/cdrccfg_test.go +++ b/config/cdrccfg_test.go @@ -27,7 +27,7 @@ import ( var cdrcCfg = CdrcCfg{ ID: utils.MetaDefault, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: "csv", FieldSeparator: ',', MaxOpenFiles: 1024, @@ -78,9 +78,7 @@ func TestCdrcCfgloadFromJsonCfg(t *testing.T) { "id": "*default", // identifier of the CDRC runner "enabled": false, // enable CDR client functionality "dry_run": false, // do not send the CDRs to CDRS, just parse them - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], "cdr_format": "csv", // CDR file format "field_separator": ",", // separator used in case of csv files "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> diff --git a/config/cdrscfg.go b/config/cdrscfg.go index c044d3f55..280d635d6 100644 --- a/config/cdrscfg.go +++ b/config/cdrscfg.go @@ -27,11 +27,11 @@ type CdrsCfg struct { ExtraFields []*utils.RSRField // Extra fields to store in CDRs StoreCdrs bool // store cdrs in storDb SMCostRetries int - ChargerSConns []*RemoteHost - RaterConns []*RemoteHost // address where to reach the Rater for cost calculation: <""|internal|x.y.z.y:1234> - AttributeSConns []*RemoteHost // address where to reach the users service: <""|internal|x.y.z.y:1234> - ThresholdSConns []*RemoteHost // address where to reach the thresholds service - StatSConns []*RemoteHost + ChargerSConns []string + RaterConns []string + AttributeSConns []string + ThresholdSConns []string + StatSConns []string OnlineCDRExports []string // list of CDRE templates to use for real-time CDR exports } @@ -55,38 +55,58 @@ func (cdrscfg *CdrsCfg) loadFromJsonCfg(jsnCdrsCfg *CdrsJsonCfg) (err error) { cdrscfg.SMCostRetries = *jsnCdrsCfg.Session_cost_retries } if jsnCdrsCfg.Chargers_conns != nil { - cdrscfg.ChargerSConns = make([]*RemoteHost, len(*jsnCdrsCfg.Chargers_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Chargers_conns { - cdrscfg.ChargerSConns[idx] = NewDfltRemoteHost() - cdrscfg.ChargerSConns[idx].loadFromJsonCfg(jsnHaCfg) + cdrscfg.ChargerSConns = make([]string, len(*jsnCdrsCfg.Chargers_conns)) + for idx, connID := range *jsnCdrsCfg.Chargers_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + cdrscfg.ChargerSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers) + } else { + cdrscfg.ChargerSConns[idx] = connID + } } } if jsnCdrsCfg.Rals_conns != nil { - cdrscfg.RaterConns = make([]*RemoteHost, len(*jsnCdrsCfg.Rals_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Rals_conns { - cdrscfg.RaterConns[idx] = NewDfltRemoteHost() - cdrscfg.RaterConns[idx].loadFromJsonCfg(jsnHaCfg) + cdrscfg.RaterConns = make([]string, len(*jsnCdrsCfg.Rals_conns)) + for idx, connID := range *jsnCdrsCfg.Rals_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + cdrscfg.RaterConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) + } else { + cdrscfg.RaterConns[idx] = connID + } } } if jsnCdrsCfg.Attributes_conns != nil { - cdrscfg.AttributeSConns = make([]*RemoteHost, len(*jsnCdrsCfg.Attributes_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Attributes_conns { - cdrscfg.AttributeSConns[idx] = NewDfltRemoteHost() - cdrscfg.AttributeSConns[idx].loadFromJsonCfg(jsnHaCfg) + cdrscfg.AttributeSConns = make([]string, len(*jsnCdrsCfg.Attributes_conns)) + for idx, connID := range *jsnCdrsCfg.Attributes_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + cdrscfg.AttributeSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) + } else { + cdrscfg.AttributeSConns[idx] = connID + } } } if jsnCdrsCfg.Thresholds_conns != nil { - cdrscfg.ThresholdSConns = make([]*RemoteHost, len(*jsnCdrsCfg.Thresholds_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Thresholds_conns { - cdrscfg.ThresholdSConns[idx] = NewDfltRemoteHost() - cdrscfg.ThresholdSConns[idx].loadFromJsonCfg(jsnHaCfg) + cdrscfg.ThresholdSConns = make([]string, len(*jsnCdrsCfg.Thresholds_conns)) + for idx, connID := range *jsnCdrsCfg.Thresholds_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + cdrscfg.ThresholdSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) + } else { + cdrscfg.ThresholdSConns[idx] = connID + } } } if jsnCdrsCfg.Stats_conns != nil { - cdrscfg.StatSConns = make([]*RemoteHost, len(*jsnCdrsCfg.Stats_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Stats_conns { - cdrscfg.StatSConns[idx] = NewDfltRemoteHost() - cdrscfg.StatSConns[idx].loadFromJsonCfg(jsnHaCfg) + cdrscfg.StatSConns = make([]string, len(*jsnCdrsCfg.Stats_conns)) + for idx, connID := range *jsnCdrsCfg.Stats_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + cdrscfg.StatSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) + } else { + cdrscfg.StatSConns[idx] = connID + } } } if jsnCdrsCfg.Online_cdr_exports != nil { diff --git a/config/cdrscfg_test.go b/config/cdrscfg_test.go index b5a3b7dd5..7bf3accb2 100644 --- a/config/cdrscfg_test.go +++ b/config/cdrscfg_test.go @@ -43,9 +43,7 @@ func TestCdrsCfgloadFromJsonCfg(t *testing.T) { "store_cdrs": true, // store cdrs in storDb "session_cost_retries": 5, // number of queries to sessions_costs before recalculating CDR "chargers_conns": [], // address where to reach the charger service, empty to disable charger functionality: <""|*internal|x.y.z.y:1234> - "rals_conns": [ - {"address": "*internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|*internal|x.y.z.y:1234> - ], + "rals_conns": ["*internal"], "attributes_conns": [], // address where to reach the attribute service, empty to disable attributes functionality: <""|*internal|x.y.z.y:1234> "thresholds_conns": [], // address where to reach the thresholds service, empty to disable thresholds functionality: <""|*internal|x.y.z.y:1234> "stats_conns": [], // address where to reach the stat service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234> @@ -55,11 +53,11 @@ func TestCdrsCfgloadFromJsonCfg(t *testing.T) { expected = CdrsCfg{ StoreCdrs: true, SMCostRetries: 5, - ChargerSConns: []*RemoteHost{}, - RaterConns: []*RemoteHost{{Address: utils.MetaInternal}}, - AttributeSConns: []*RemoteHost{}, - ThresholdSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, + ChargerSConns: []string{}, + RaterConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)}, + AttributeSConns: []string{}, + ThresholdSConns: []string{}, + StatSConns: []string{}, } if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) diff --git a/config/cfg_data2.json b/config/cfg_data2.json index 39acc7d18..70ea242c1 100644 --- a/config/cfg_data2.json +++ b/config/cfg_data2.json @@ -13,11 +13,4 @@ }, ], -"sm_freeswitch": { - "enabled": true, // starts SessionManager service: - "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers - {"address": "2.3.4.5:8021", "password": "ClueCon", "reconnects": 5}, - ], -}, - } diff --git a/config/config_defaults.go b/config/config_defaults.go index 847fee759..715ffe179 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -275,9 +275,7 @@ const CGRATES_CFG_JSON = ` "id": "*default", // identifier of the CDRC runner "enabled": false, // enable CDR client functionality "dry_run": false, // do not send the CDRs to CDRS, just parse them - "cdrs_conns": [ // connections to CDRs. <*internal|x.y.z.y:1234> - {"address": "*internal"} - ], + "cdrs_conns": ["*internal"], "cdr_format": "*file_csv", // CDR file format <*file_csv|*freeswitch_csv|*file_fwv|*opensips_flatstore|*partial_csv|*file_xml> "field_separator": ",", // separator used in case of csv files "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> diff --git a/config/config_it_test.go b/config/config_it_test.go index ebbf6fbd2..a3c1b6b9e 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -285,16 +285,11 @@ func TestCGRConfigReloadCDRs(t *testing.T) { utils.NewRSRFieldMustCompile("LCRProfile"), utils.NewRSRFieldMustCompile("ResourceID"), }, - ChargerSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - RaterConns: []*RemoteHost{}, - AttributeSConns: []*RemoteHost{}, - ThresholdSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, + ChargerSConns: []string{utils.MetaLocalHost}, + RaterConns: []string{}, + AttributeSConns: []string{}, + ThresholdSConns: []string{}, + StatSConns: []string{}, SMCostRetries: 5, StoreCdrs: true, } @@ -352,43 +347,16 @@ func TestCGRConfigReloadSessionS(t *testing.T) { t.Errorf("Expected OK received: %s", reply) } expAttr := &SessionSCfg{ - Enabled: true, - ListenBijson: "127.0.0.1:2014", - ChargerSConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, - RALsConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, - ResSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - ThreshSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, - SupplSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - AttrSConns: []*RemoteHost{ - &RemoteHost{ - Address: "127.0.0.1:2012", - Transport: utils.MetaJSON, - }, - }, - CDRsConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + ListenBijson: "127.0.0.1:2014", + ChargerSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)}, + RALsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)}, + ResSConns: []string{utils.MetaLocalHost}, + ThreshSConns: []string{}, + StatSConns: []string{}, + SupplSConns: []string{utils.MetaLocalHost}, + AttrSConns: []string{utils.MetaLocalHost}, + CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, ReplicationConns: []*RemoteHost{}, MaxCallDuration: 3 * time.Hour, diff --git a/config/config_json_test.go b/config/config_json_test.go index 90642d483..fd47c6439 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -366,11 +366,11 @@ func TestDfCdrsJsonCfg(t *testing.T) { Extra_fields: &[]string{}, Store_cdrs: utils.BoolPointer(true), Session_cost_retries: utils.IntPointer(5), - Chargers_conns: &[]*RemoteHostJson{}, - Rals_conns: &[]*RemoteHostJson{}, - Attributes_conns: &[]*RemoteHostJson{}, - Thresholds_conns: &[]*RemoteHostJson{}, - Stats_conns: &[]*RemoteHostJson{}, + Chargers_conns: &[]string{}, + Rals_conns: &[]string{}, + Attributes_conns: &[]string{}, + Thresholds_conns: &[]string{}, + Stats_conns: &[]string{}, Online_cdr_exports: &[]string{}, } if cfg, err := dfCgrJsonCfg.CdrsJsonCfg(); err != nil { @@ -527,12 +527,10 @@ func TestDfCdrcJsonCfg(t *testing.T) { } eCfg := []*CdrcJsonCfg{ { - Id: utils.StringPointer(utils.META_DEFAULT), - Enabled: utils.BoolPointer(false), - Dry_run: utils.BoolPointer(false), - Cdrs_conns: &[]*RemoteHostJson{{ - Address: utils.StringPointer(utils.MetaInternal), - }}, + Id: utils.StringPointer(utils.META_DEFAULT), + Enabled: utils.BoolPointer(false), + Dry_run: utils.BoolPointer(false), + Cdrs_conns: &[]string{utils.MetaInternal}, Cdr_format: utils.StringPointer("*file_csv"), Field_separator: utils.StringPointer(","), Timezone: utils.StringPointer(""), @@ -565,14 +563,14 @@ func TestSmgJsonCfg(t *testing.T) { eCfg := &SessionSJsonCfg{ Enabled: utils.BoolPointer(false), Listen_bijson: utils.StringPointer("127.0.0.1:2014"), - Chargers_conns: &[]*RemoteHostJson{}, - Rals_conns: &[]*RemoteHostJson{}, - Cdrs_conns: &[]*RemoteHostJson{}, - Resources_conns: &[]*RemoteHostJson{}, - Thresholds_conns: &[]*RemoteHostJson{}, - Stats_conns: &[]*RemoteHostJson{}, - Suppliers_conns: &[]*RemoteHostJson{}, - Attributes_conns: &[]*RemoteHostJson{}, + Chargers_conns: &[]string{}, + Rals_conns: &[]string{}, + Cdrs_conns: &[]string{}, + Resources_conns: &[]string{}, + Thresholds_conns: &[]string{}, + Stats_conns: &[]string{}, + Suppliers_conns: &[]string{}, + Attributes_conns: &[]string{}, Replication_conns: &[]*RemoteHostJson{}, Debit_interval: utils.StringPointer("0s"), Store_session_costs: utils.BoolPointer(false), diff --git a/config/config_test.go b/config/config_test.go index 87558162d..04694a28c 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -207,7 +207,7 @@ func TestCgrCfgCDRC(t *testing.T) { ID: utils.META_DEFAULT, Enabled: true, DryRun: false, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: utils.MetaFileCSV, FieldSeparator: rune(','), Timezone: "", @@ -512,7 +512,7 @@ func TestCgrCfgJSONDefaultsScheduler(t *testing.T) { } func TestCgrCfgJSONDefaultsCDRS(t *testing.T) { - eHaPoolCfg := []*RemoteHost{} + emptySlice := []string{} var eCdrExtr []*utils.RSRField if cgrCfg.CdrsCfg().Enabled != false { t.Errorf("Expecting: false , received: %+v", cgrCfg.CdrsCfg().Enabled) @@ -526,20 +526,20 @@ func TestCgrCfgJSONDefaultsCDRS(t *testing.T) { if cgrCfg.CdrsCfg().SMCostRetries != 5 { t.Errorf("Expecting: 5 , received: %+v", cgrCfg.CdrsCfg().SMCostRetries) } - if !reflect.DeepEqual(cgrCfg.CdrsCfg().RaterConns, eHaPoolCfg) { - t.Errorf("Expecting: %+v , received: %+v", eHaPoolCfg, cgrCfg.CdrsCfg().RaterConns) + if !reflect.DeepEqual(cgrCfg.CdrsCfg().RaterConns, emptySlice) { + t.Errorf("Expecting: %+v , received: %+v", emptySlice, cgrCfg.CdrsCfg().RaterConns) } - if !reflect.DeepEqual(cgrCfg.CdrsCfg().ChargerSConns, eHaPoolCfg) { - t.Errorf("Expecting: %+v , received: %+v", eHaPoolCfg, cgrCfg.CdrsCfg().ChargerSConns) + if !reflect.DeepEqual(cgrCfg.CdrsCfg().ChargerSConns, emptySlice) { + t.Errorf("Expecting: %+v , received: %+v", emptySlice, cgrCfg.CdrsCfg().ChargerSConns) } - if !reflect.DeepEqual(cgrCfg.CdrsCfg().AttributeSConns, eHaPoolCfg) { - t.Errorf("Expecting: %+v , received: %+v", eHaPoolCfg, cgrCfg.CdrsCfg().AttributeSConns) + if !reflect.DeepEqual(cgrCfg.CdrsCfg().AttributeSConns, emptySlice) { + t.Errorf("Expecting: %+v , received: %+v", emptySlice, cgrCfg.CdrsCfg().AttributeSConns) } - if !reflect.DeepEqual(cgrCfg.CdrsCfg().ThresholdSConns, eHaPoolCfg) { - t.Errorf("Expecting: %+v , received: %+v", eHaPoolCfg, cgrCfg.CdrsCfg().ThresholdSConns) + if !reflect.DeepEqual(cgrCfg.CdrsCfg().ThresholdSConns, emptySlice) { + t.Errorf("Expecting: %+v , received: %+v", emptySlice, cgrCfg.CdrsCfg().ThresholdSConns) } - if !reflect.DeepEqual(cgrCfg.CdrsCfg().StatSConns, eHaPoolCfg) { - t.Errorf("Expecting: %+v , received: %+v", eHaPoolCfg, cgrCfg.CdrsCfg().StatSConns) + if !reflect.DeepEqual(cgrCfg.CdrsCfg().StatSConns, emptySlice) { + t.Errorf("Expecting: %+v , received: %+v", emptySlice, cgrCfg.CdrsCfg().StatSConns) } if cgrCfg.CdrsCfg().OnlineCDRExports != nil { t.Errorf("Expecting: nil , received: %+v", cgrCfg.CdrsCfg().OnlineCDRExports) @@ -551,12 +551,8 @@ func TestCgrCfgJSONLoadCDRS(t *testing.T) { { "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|*internal|x.y.z.y:1234> - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], }, } ` @@ -567,10 +563,11 @@ func TestCgrCfgJSONLoadCDRS(t *testing.T) { if !cgrCfg.CdrsCfg().Enabled { t.Errorf("Expecting: true , received: %+v", cgrCfg.CdrsCfg().Enabled) } - expected := []*RemoteHost{{Address: utils.MetaInternal}} + expected := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)} if !reflect.DeepEqual(cgrCfg.CdrsCfg().ChargerSConns, expected) { t.Errorf("Expecting: %+v , received: %+v", expected, cgrCfg.CdrsCfg().ChargerSConns) } + expected = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)} if !reflect.DeepEqual(cgrCfg.CdrsCfg().RaterConns, expected) { t.Errorf("Expecting: %+v , received: %+v", expected, cgrCfg.CdrsCfg().RaterConns) } @@ -634,14 +631,14 @@ func TestCgrCfgJSONDefaultsSMGenericCfg(t *testing.T) { eSessionSCfg := &SessionSCfg{ Enabled: false, ListenBijson: "127.0.0.1:2014", - ChargerSConns: []*RemoteHost{}, - RALsConns: []*RemoteHost{}, - CDRsConns: []*RemoteHost{}, - ResSConns: []*RemoteHost{}, - ThreshSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, - SupplSConns: []*RemoteHost{}, - AttrSConns: []*RemoteHost{}, + ChargerSConns: []string{}, + RALsConns: []string{}, + CDRsConns: []string{}, + ResSConns: []string{}, + ThreshSConns: []string{}, + StatSConns: []string{}, + SupplSConns: []string{}, + AttrSConns: []string{}, ReplicationConns: []*RemoteHost{}, DebitInterval: 0 * time.Second, StoreSCosts: false, @@ -1589,7 +1586,7 @@ func TestCDRCWithDefault(t *testing.T) { ID: utils.META_DEFAULT, Enabled: false, DryRun: false, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: utils.MetaFileCSV, FieldSeparator: rune(','), Timezone: "", @@ -1952,44 +1949,29 @@ func TestCheckConfigSanity(t *testing.T) { // CDRServer checks cfg.thresholdSCfg.Enabled = true cfg.cdrsCfg = &CdrsCfg{ - Enabled: true, - ChargerSConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + ChargerSConns: []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.chargerSCfg.Enabled = true - cfg.cdrsCfg.RaterConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.RaterConns = []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.Enabled = true - cfg.cdrsCfg.AttributeSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.AttributeSConns = []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.statsCfg.Enabled = false cfg.attributeSCfg.Enabled = true - cfg.cdrsCfg.StatSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.StatSConns = []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) @@ -2003,12 +1985,8 @@ func TestCheckConfigSanity(t *testing.T) { } cfg.thresholdSCfg.Enabled = false cfg.cdrsCfg.OnlineCDRExports = []string{"stringx"} - cfg.cdrsCfg.ThresholdSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = "ThresholdS not enabled but requested by CDRs component." + cfg.cdrsCfg.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) } @@ -2029,14 +2007,13 @@ func TestCheckConfigSanity(t *testing.T) { cfg.CdrcProfiles = map[string][]*CdrcCfg{ "test": []*CdrcCfg{ &CdrcCfg{ - Enabled: true, - CdrsConns: []*RemoteHost{ - &RemoteHost{Address: utils.MetaInternal}, - }, + Enabled: true, + ID: "test", + CdrsConns: []string{utils.MetaInternal}, }, }, } - expected = " not enabled but referenced from " + expected = " not enabled but requested by cdrcProfile" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -2044,10 +2021,8 @@ func TestCheckConfigSanity(t *testing.T) { cfg.CdrcProfiles = map[string][]*CdrcCfg{ "test": []*CdrcCfg{ &CdrcCfg{ - Enabled: true, - CdrsConns: []*RemoteHost{ - &RemoteHost{Address: utils.MetaInternal}, - }, + Enabled: true, + CdrsConns: []string{utils.MetaInternal}, ContentFields: []*FCTemplate{}, }, }, diff --git a/config/configcdrc_test.go b/config/configcdrc_test.go index 5c5341908..c127bf9ed 100644 --- a/config/configcdrc_test.go +++ b/config/configcdrc_test.go @@ -37,7 +37,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { { ID: utils.META_DEFAULT, Enabled: false, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: "*file_csv", FieldSeparator: ',', RunDelay: 0, @@ -114,7 +114,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { { ID: "CDRC-CSV1", Enabled: true, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: "*file_csv", FieldSeparator: ',', RunDelay: 0, @@ -191,7 +191,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { { ID: "CDRC-CSV2", Enabled: true, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: "*file_csv", FieldSeparator: ',', RunDelay: 1000000000, @@ -252,7 +252,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { { ID: "CDRC-CSV3", Enabled: true, - CdrsConns: []*RemoteHost{{Address: utils.MetaInternal}}, + CdrsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, CdrFormat: utils.MetaFileCSV, FieldSeparator: ',', RunDelay: 0, diff --git a/config/configsanity.go b/config/configsanity.go index 5ec7aaf3a..72ce8dd9e 100644 --- a/config/configsanity.go +++ b/config/configsanity.go @@ -47,33 +47,45 @@ func (cfg *CGRConfig) checkConfigSanity() error { } } // CDRServer checks - if cfg.cdrsCfg.Enabled && !cfg.dispatcherSCfg.Enabled { - if !cfg.chargerSCfg.Enabled { - for _, conn := range cfg.cdrsCfg.ChargerSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.Chargers, utils.CDRs) - } + if cfg.cdrsCfg.Enabled { + for _, connID := range cfg.cdrsCfg.ChargerSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.chargerSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ChargerS, utils.CDRs) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) } } - if !cfg.ralsCfg.Enabled { - for _, cdrsRaterConn := range cfg.cdrsCfg.RaterConns { - if cdrsRaterConn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.CDRs) - } + for _, connID := range cfg.cdrsCfg.RaterConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.CDRs) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) } } - if !cfg.attributeSCfg.Enabled { - for _, connCfg := range cfg.cdrsCfg.AttributeSConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.CDRs) - } + for _, connID := range cfg.cdrsCfg.AttributeSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.CDRs) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) } } - if !cfg.statsCfg.Enabled { - for _, connCfg := range cfg.cdrsCfg.StatSConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.CDRs) - } + for _, connID := range cfg.cdrsCfg.StatSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.CDRs) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) + } + } + for _, connID := range cfg.cdrsCfg.ThresholdSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.CDRs) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) } } for _, cdrePrfl := range cfg.cdrsCfg.OnlineCDRExports { @@ -81,13 +93,6 @@ func (cfg *CGRConfig) checkConfigSanity() error { return fmt.Errorf("<%s> Cannot find CDR export template with ID: <%s>", utils.CDRs, cdrePrfl) } } - if !cfg.thresholdSCfg.Enabled { - for _, connCfg := range cfg.cdrsCfg.ThresholdSConns { - if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but requested by %s component.", utils.ThresholdS, utils.CDRs) - } - } - } } // CDRC sanity checks for _, cdrcCfgs := range cfg.CdrcProfiles { @@ -98,11 +103,12 @@ func (cfg *CGRConfig) checkConfigSanity() error { if len(cdrcInst.CdrsConns) == 0 { return fmt.Errorf("<%s> Instance: %s, %s enabled but no %s defined!", utils.CDRC, cdrcInst.ID, utils.CDRC, utils.CDRs) } - if !cfg.cdrsCfg.Enabled && !cfg.dispatcherSCfg.Enabled { - for _, conn := range cdrcInst.CdrsConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> not enabled but referenced from <%s>", utils.CDRs, utils.CDRC) - } + for _, connID := range cdrcInst.CdrsConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.cdrsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> cdrcProfile", utils.CDRs, cdrcInst.ID) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.CDRs, connID) } } if len(cdrcInst.ContentFields) == 0 { @@ -133,64 +139,72 @@ func (cfg *CGRConfig) checkConfigSanity() error { } } // SessionS checks - if cfg.sessionSCfg.Enabled && !cfg.dispatcherSCfg.Enabled { + if cfg.sessionSCfg.Enabled { if cfg.sessionSCfg.TerminateAttempts < 1 { return fmt.Errorf("<%s> 'terminate_attempts' should be at least 1", utils.SessionS) } - if !cfg.chargerSCfg.Enabled { - for _, conn := range cfg.sessionSCfg.ChargerSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled", utils.SessionS, utils.ChargerS) - } + for _, connID := range cfg.sessionSCfg.ChargerSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.chargerSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ChargerS, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.ralsCfg.Enabled { - for _, smgRALsConn := range cfg.sessionSCfg.RALsConns { - if smgRALsConn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.RALService) - } + for _, connID := range cfg.sessionSCfg.RALsConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.resourceSCfg.Enabled { - for _, conn := range cfg.sessionSCfg.ResSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.ResourceS) - } + for _, connID := range cfg.sessionSCfg.ResSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.resourceSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ResourceS, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.thresholdSCfg.Enabled { - for _, conn := range cfg.sessionSCfg.ThreshSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.ThresholdS) - } + for _, connID := range cfg.sessionSCfg.ThreshSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.statsCfg.Enabled { - for _, conn := range cfg.sessionSCfg.StatSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.StatS) - } + for _, connID := range cfg.sessionSCfg.StatSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.supplierSCfg.Enabled { - for _, conn := range cfg.sessionSCfg.SupplSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.SupplierS) - } + for _, connID := range cfg.sessionSCfg.SupplSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.supplierSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SupplierS, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.attributeSCfg.Enabled { - for _, conn := range cfg.sessionSCfg.AttrSConns { - if conn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> %s not enabled but requested by SMGeneric component.", utils.SessionS, utils.AttributeS) - } + for _, connID := range cfg.sessionSCfg.AttrSConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } - if !cfg.cdrsCfg.Enabled { - for _, smgCDRSConn := range cfg.sessionSCfg.CDRsConns { - if smgCDRSConn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> CDRS not enabled but referenced by SMGeneric component.", utils.SessionS) - } + for _, connID := range cfg.sessionSCfg.CDRsConns { + if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.cdrsCfg.Enabled { + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.CDRs, utils.SessionS) + } + if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { + return fmt.Errorf("<%s> Connection with id: <%s> not defined", utils.SessionS, connID) } } if cfg.cacheCfg[utils.CacheClosedSessions].Limit == 0 { diff --git a/config/configsanity_test.go b/config/configsanity_test.go index 1d4fb0623..1aec2e645 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -47,46 +47,31 @@ func TestConfigSanityCDRServer(t *testing.T) { cfg, _ := NewDefaultCGRConfig() cfg.cdrsCfg = &CdrsCfg{ - Enabled: true, - ChargerSConns: []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - }, + Enabled: true, + ChargerSConns: []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.chargerSCfg.Enabled = true - cfg.cdrsCfg.RaterConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.RaterConns = []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.Enabled = true - cfg.cdrsCfg.AttributeSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.AttributeSConns = []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.attributeSCfg.Enabled = true - cfg.cdrsCfg.StatSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } + cfg.cdrsCfg.StatSConns = []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) @@ -101,12 +86,8 @@ func TestConfigSanityCDRServer(t *testing.T) { } cfg.cdrsCfg.OnlineCDRExports = []string{"stringx"} - cfg.cdrsCfg.ThresholdSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = "ThresholdS not enabled but requested by CDRs component." + cfg.cdrsCfg.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) } @@ -128,14 +109,13 @@ func TestConfigSanityCDRC(t *testing.T) { cfg.CdrcProfiles = map[string][]*CdrcCfg{ "test": []*CdrcCfg{ &CdrcCfg{ - Enabled: true, - CdrsConns: []*RemoteHost{ - &RemoteHost{Address: utils.MetaInternal}, - }, + Enabled: true, + ID: "test", + CdrsConns: []string{utils.MetaInternal}, }, }, } - expected = " not enabled but referenced from " + expected = " not enabled but requested by cdrcProfile" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -143,10 +123,9 @@ func TestConfigSanityCDRC(t *testing.T) { cfg.CdrcProfiles = map[string][]*CdrcCfg{ "test": []*CdrcCfg{ &CdrcCfg{ - Enabled: true, - CdrsConns: []*RemoteHost{ - &RemoteHost{Address: utils.MetaInternal}, - }, + Enabled: true, + ID: "test", + CdrsConns: []string{utils.MetaInternal}, ContentFields: []*FCTemplate{}, }, }, @@ -229,89 +208,57 @@ func TestConfigSanitySessionS(t *testing.T) { } cfg.sessionSCfg.TerminateAttempts = 1 - cfg.sessionSCfg.ChargerSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " ChargerS not enabled" + cfg.sessionSCfg.ChargerSConns = []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.chargerSCfg.Enabled = true - cfg.sessionSCfg.RALsConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " RALs not enabled but requested by SMGeneric component." + cfg.sessionSCfg.RALsConns = []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.Enabled = true - cfg.sessionSCfg.ResSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " ResourceS not enabled but requested by SMGeneric component." + cfg.sessionSCfg.ResSConns = []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.resourceSCfg.Enabled = true - cfg.sessionSCfg.ThreshSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " ThresholdS not enabled but requested by SMGeneric component." + cfg.sessionSCfg.ThreshSConns = []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.thresholdSCfg.Enabled = true - cfg.sessionSCfg.StatSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " Stats not enabled but requested by SMGeneric component." + cfg.sessionSCfg.StatSConns = []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.statsCfg.Enabled = true - cfg.sessionSCfg.SupplSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " SupplierS not enabled but requested by SMGeneric component." + cfg.sessionSCfg.SupplSConns = []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.supplierSCfg.Enabled = true - cfg.sessionSCfg.AttrSConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " AttributeS not enabled but requested by SMGeneric component." + cfg.sessionSCfg.AttrSConns = []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.attributeSCfg.Enabled = true - cfg.sessionSCfg.CDRsConns = []*RemoteHost{ - &RemoteHost{ - Address: utils.MetaInternal, - }, - } - expected = " CDRS not enabled but referenced by SMGeneric component." + cfg.sessionSCfg.CDRsConns = []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) } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 3eebbcdb0..1d6e9c253 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -132,11 +132,11 @@ type CdrsJsonCfg struct { Extra_fields *[]string Store_cdrs *bool Session_cost_retries *int - Chargers_conns *[]*RemoteHostJson - Rals_conns *[]*RemoteHostJson - Attributes_conns *[]*RemoteHostJson - Thresholds_conns *[]*RemoteHostJson - Stats_conns *[]*RemoteHostJson + Chargers_conns *[]string + Rals_conns *[]string + Attributes_conns *[]string + Thresholds_conns *[]string + Stats_conns *[]string Online_cdr_exports *[]string } @@ -160,7 +160,7 @@ type CdrcJsonCfg struct { Id *string Enabled *bool Dry_run *bool - Cdrs_conns *[]*RemoteHostJson + Cdrs_conns *[]string Cdr_format *string Field_separator *string Timezone *string @@ -212,15 +212,15 @@ type EventReaderJsonCfg struct { type SessionSJsonCfg struct { Enabled *bool Listen_bijson *string - Chargers_conns *[]*RemoteHostJson - Rals_conns *[]*RemoteHostJson - Resources_conns *[]*RemoteHostJson - Thresholds_conns *[]*RemoteHostJson - Stats_conns *[]*RemoteHostJson - Suppliers_conns *[]*RemoteHostJson - Cdrs_conns *[]*RemoteHostJson + Chargers_conns *[]string + Rals_conns *[]string + Resources_conns *[]string + Thresholds_conns *[]string + Stats_conns *[]string + Suppliers_conns *[]string + Cdrs_conns *[]string Replication_conns *[]*RemoteHostJson - Attributes_conns *[]*RemoteHostJson + Attributes_conns *[]string Debit_interval *string Store_session_costs *bool Min_call_duration *string diff --git a/config/smconfig.go b/config/smconfig.go index 05cf5eb7c..a8c424ede 100644 --- a/config/smconfig.go +++ b/config/smconfig.go @@ -65,14 +65,14 @@ func (self *FsConnCfg) loadFromJsonCfg(jsnCfg *FsConnJsonCfg) error { type SessionSCfg struct { Enabled bool ListenBijson string - ChargerSConns []*RemoteHost - RALsConns []*RemoteHost - ResSConns []*RemoteHost - ThreshSConns []*RemoteHost - StatSConns []*RemoteHost - SupplSConns []*RemoteHost - AttrSConns []*RemoteHost - CDRsConns []*RemoteHost + ChargerSConns []string + RALsConns []string + ResSConns []string + ThreshSConns []string + StatSConns []string + SupplSConns []string + AttrSConns []string + CDRsConns []string ReplicationConns []*RemoteHost DebitInterval time.Duration StoreSCosts bool @@ -99,59 +99,91 @@ func (scfg *SessionSCfg) loadFromJsonCfg(jsnCfg *SessionSJsonCfg) (err error) { scfg.ListenBijson = *jsnCfg.Listen_bijson } if jsnCfg.Chargers_conns != nil { - scfg.ChargerSConns = make([]*RemoteHost, len(*jsnCfg.Chargers_conns)) - for idx, jsnHaCfg := range *jsnCfg.Chargers_conns { - scfg.ChargerSConns[idx] = NewDfltRemoteHost() - scfg.ChargerSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.ChargerSConns = make([]string, len(*jsnCfg.Chargers_conns)) + for idx, connID := range *jsnCfg.Chargers_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.ChargerSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers) + } else { + scfg.ChargerSConns[idx] = connID + } } } if jsnCfg.Rals_conns != nil { - scfg.RALsConns = make([]*RemoteHost, len(*jsnCfg.Rals_conns)) - for idx, jsnHaCfg := range *jsnCfg.Rals_conns { - scfg.RALsConns[idx] = NewDfltRemoteHost() - scfg.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.RALsConns = make([]string, len(*jsnCfg.Rals_conns)) + for idx, connID := range *jsnCfg.Rals_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.RALsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) + } else { + scfg.RALsConns[idx] = connID + } } } if jsnCfg.Resources_conns != nil { - scfg.ResSConns = make([]*RemoteHost, len(*jsnCfg.Resources_conns)) - for idx, jsnHaCfg := range *jsnCfg.Resources_conns { - scfg.ResSConns[idx] = NewDfltRemoteHost() - scfg.ResSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.ResSConns = make([]string, len(*jsnCfg.Resources_conns)) + for idx, connID := range *jsnCfg.Resources_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.ResSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) + } else { + scfg.ResSConns[idx] = connID + } } } if jsnCfg.Thresholds_conns != nil { - scfg.ThreshSConns = make([]*RemoteHost, len(*jsnCfg.Thresholds_conns)) - for idx, jsnHaCfg := range *jsnCfg.Thresholds_conns { - scfg.ThreshSConns[idx] = NewDfltRemoteHost() - scfg.ThreshSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.ThreshSConns = make([]string, len(*jsnCfg.Thresholds_conns)) + for idx, connID := range *jsnCfg.Thresholds_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.ThreshSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) + } else { + scfg.ThreshSConns[idx] = connID + } } } if jsnCfg.Stats_conns != nil { - scfg.StatSConns = make([]*RemoteHost, len(*jsnCfg.Stats_conns)) - for idx, jsnHaCfg := range *jsnCfg.Stats_conns { - scfg.StatSConns[idx] = NewDfltRemoteHost() - scfg.StatSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.StatSConns = make([]string, len(*jsnCfg.Stats_conns)) + for idx, connID := range *jsnCfg.Stats_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.StatSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) + } else { + scfg.StatSConns[idx] = connID + } } } if jsnCfg.Suppliers_conns != nil { - scfg.SupplSConns = make([]*RemoteHost, len(*jsnCfg.Suppliers_conns)) - for idx, jsnHaCfg := range *jsnCfg.Suppliers_conns { - scfg.SupplSConns[idx] = NewDfltRemoteHost() - scfg.SupplSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.SupplSConns = make([]string, len(*jsnCfg.Suppliers_conns)) + for idx, connID := range *jsnCfg.Suppliers_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.SupplSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSuppliers) + } else { + scfg.SupplSConns[idx] = connID + } } } if jsnCfg.Attributes_conns != nil { - scfg.AttrSConns = make([]*RemoteHost, len(*jsnCfg.Attributes_conns)) - for idx, jsnHaCfg := range *jsnCfg.Attributes_conns { - scfg.AttrSConns[idx] = NewDfltRemoteHost() - scfg.AttrSConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.AttrSConns = make([]string, len(*jsnCfg.Attributes_conns)) + for idx, connID := range *jsnCfg.Attributes_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.AttrSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) + } else { + scfg.AttrSConns[idx] = connID + } } } if jsnCfg.Cdrs_conns != nil { - scfg.CDRsConns = make([]*RemoteHost, len(*jsnCfg.Cdrs_conns)) - for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - scfg.CDRsConns[idx] = NewDfltRemoteHost() - scfg.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) + scfg.CDRsConns = make([]string, len(*jsnCfg.Cdrs_conns)) + for idx, connID := range *jsnCfg.Cdrs_conns { + // if we have the connection internal we change the name so we can have internal rpc for each subsystem + if connID == utils.MetaInternal { + scfg.CDRsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs) + } else { + scfg.CDRsConns[idx] = connID + } } } if jsnCfg.Replication_conns != nil { diff --git a/config/smconfig_test.go b/config/smconfig_test.go index 689887151..b815ebbef 100644 --- a/config/smconfig_test.go +++ b/config/smconfig_test.go @@ -77,12 +77,8 @@ func TestSessionSCfgloadFromJsonCfg(t *testing.T) { "enabled": false, // starts session manager service: "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests "chargers_conns": [], // address where to reach the charger service, empty to disable charger functionality: <""|*internal|x.y.z.y:1234> - "rals_conns": [ - {"address": "*internal"} // address where to reach the RALs <""|*internal|127.0.0.1:2013> - ], - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR Server, empty to disable CDR capturing <*internal|x.y.z.y:1234> - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], "resources_conns": [], // address where to reach the ResourceS <""|*internal|127.0.0.1:2013> "thresholds_conns": [], // address where to reach the ThresholdS <""|*internal|127.0.0.1:2013> "stats_conns": [], // address where to reach the StatS <""|*internal|127.0.0.1:2013> @@ -103,14 +99,14 @@ func TestSessionSCfgloadFromJsonCfg(t *testing.T) { }` expected = SessionSCfg{ ListenBijson: "127.0.0.1:2014", - ChargerSConns: []*RemoteHost{}, - RALsConns: []*RemoteHost{{Address: "*internal"}}, - ResSConns: []*RemoteHost{}, - ThreshSConns: []*RemoteHost{}, - StatSConns: []*RemoteHost{}, - SupplSConns: []*RemoteHost{}, - AttrSConns: []*RemoteHost{}, - CDRsConns: []*RemoteHost{{Address: "*internal"}}, + ChargerSConns: []string{}, + RALsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)}, + ResSConns: []string{}, + ThreshSConns: []string{}, + StatSConns: []string{}, + SupplSConns: []string{}, + AttrSConns: []string{}, + CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, ReplicationConns: []*RemoteHost{}, MaxCallDuration: time.Duration(3 * time.Hour), SessionIndexes: map[string]bool{}, diff --git a/data/conf/samples/acc_balance_keep/cgrates.json b/data/conf/samples/acc_balance_keep/cgrates.json index 40d696a44..8a9ce82a9 100644 --- a/data/conf/samples/acc_balance_keep/cgrates.json +++ b/data/conf/samples/acc_balance_keep/cgrates.json @@ -44,9 +44,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "chargers_conns":["*localhost"], }, diff --git a/data/conf/samples/acc_balance_keep_gob/cgrates.json b/data/conf/samples/acc_balance_keep_gob/cgrates.json index 486a1a25e..d3b0c4683 100644 --- a/data/conf/samples/acc_balance_keep_gob/cgrates.json +++ b/data/conf/samples/acc_balance_keep_gob/cgrates.json @@ -51,9 +51,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "chargers_conns":["conn1"], }, diff --git a/data/conf/samples/actions/cgradmin.json b/data/conf/samples/actions/cgradmin.json index 50ea3e2e5..6aaa5dc00 100644 --- a/data/conf/samples/actions/cgradmin.json +++ b/data/conf/samples/actions/cgradmin.json @@ -31,9 +31,7 @@ "cdrs": { "enabled": true, // start the CDR Server service: - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "chargers_conns":["*localhost"], }, "chargers": { diff --git a/data/conf/samples/actions_gob/cgradmin.json b/data/conf/samples/actions_gob/cgradmin.json index e7e77e842..9226ad587 100644 --- a/data/conf/samples/actions_gob/cgradmin.json +++ b/data/conf/samples/actions_gob/cgradmin.json @@ -14,6 +14,13 @@ "http": ":2080", // HTTP listening address }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + "stor_db": { // database used to store offline tariff plans and CDRs "db_password": "CGRateS.org", // password to use when connecting to stordb @@ -31,9 +38,7 @@ "cdrs": { "enabled": true, // start the CDR Server service: - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "chargers_conns":["*conn1"], }, "chargers": { diff --git a/data/conf/samples/apier/apier.json b/data/conf/samples/apier/apier.json index 6d6c1f56b..7601cb3e0 100644 --- a/data/conf/samples/apier/apier.json +++ b/data/conf/samples/apier/apier.json @@ -35,12 +35,8 @@ "cdrs": { "enabled": true, // start the CDR Server service: - "chargers_conns":[ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} // address where to reach the Rater <""|*internal|127.0.0.1:2013> - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, diff --git a/data/conf/samples/cdrcflatstore/cgrates.json b/data/conf/samples/cdrcflatstore/cgrates.json index cb69380e8..f6d14a123 100644 --- a/data/conf/samples/cdrcflatstore/cgrates.json +++ b/data/conf/samples/cdrcflatstore/cgrates.json @@ -37,9 +37,7 @@ { "id": "FLATSTORE", "enabled": true, // enable CDR client functionality - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], "cdr_format": "*opensips_flatstore", // CDR file format "field_separator": "|", // separator used in case of csv files "run_delay": 0, // sleep interval in seconds between consecutive runs, 0 to use automation via inotify diff --git a/data/conf/samples/cdrcfwv/cgrates.json b/data/conf/samples/cdrcfwv/cgrates.json index 158d368a2..bf2b550c5 100644 --- a/data/conf/samples/cdrcfwv/cgrates.json +++ b/data/conf/samples/cdrcfwv/cgrates.json @@ -37,9 +37,7 @@ "id": "FWV1", "enabled": true, // enable CDR client functionality "dry_run": false, - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], "cdr_format": "*file_fwv", // CDR file format "cdr_in_path": "/tmp/cgr_fwv/cdrc/in", // absolute path towards the directory where the CDRs are stored "cdr_out_path": "/tmp/cgr_fwv/cdrc/out", // absolute path towards the directory where processed CDRs will be moved diff --git a/data/conf/samples/cdrcfwvwithfilter/cgrates.json b/data/conf/samples/cdrcfwvwithfilter/cgrates.json index 42c849adc..04d0c70c7 100755 --- a/data/conf/samples/cdrcfwvwithfilter/cgrates.json +++ b/data/conf/samples/cdrcfwvwithfilter/cgrates.json @@ -38,9 +38,7 @@ "id": "FWVWithFilter", "enabled": true, // enable CDR client functionality "dry_run": false, - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], "cdr_format": "*file_fwv", // CDR file format "cdr_in_path": "/tmp/cgr_fwv/cdrc/in", // absolute path towards the directory where the CDRs are stored "cdr_out_path": "/tmp/cgr_fwv/cdrc/out", // absolute path towards the directory where processed CDRs will be moved @@ -80,9 +78,7 @@ "id": "FWVWithFilterID", "enabled": true, // enable CDR client functionality "dry_run": false, - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> - ], + "cdrs_conns": ["*internal"], "cdr_format": "fwv", // CDR file format "cdr_in_path": "/tmp/cgr_fwv/cdrc/in", // absolute path towards the directory where the CDRs are stored "cdr_out_path": "/tmp/cgr_fwv/cdrc/out", // absolute path towards the directory where processed CDRs will be moved diff --git a/data/conf/samples/cdrcxmlwithfilter/cgrates.json b/data/conf/samples/cdrcxmlwithfilter/cgrates.json index 34156bfd5..9838db3cf 100755 --- a/data/conf/samples/cdrcxmlwithfilter/cgrates.json +++ b/data/conf/samples/cdrcxmlwithfilter/cgrates.json @@ -29,7 +29,7 @@ "cdr_in_path": "/tmp/cdrcxmlwithfilters/xmlit1/in", "cdr_out_path": "/tmp/cdrcxmlwithfilters/xmlit1/out", "cdr_root_path": "broadWorksCDR.cdrData", - "cdr_source_id": "xmlit1", + "cdr_source_id": "xmlit1", "filters": ["*string:~*req.broadWorksCDR.cdrData.basicModule.userNumber:1002","*string:~*req.broadWorksCDR.cdrData.headerModule.type:Normal"], "content_fields":[ // import content_fields template, id will match internally CDR field, in case of .csv value will be represented by index of the field value {"tag": "TOR", "field_id": "ToR", "type": "*composed", "value": "*voice", "mandatory": true}, diff --git a/data/conf/samples/cdrewithfilter/cgrates.json b/data/conf/samples/cdrewithfilter/cgrates.json index 1cdfec4b7..effebf23e 100755 --- a/data/conf/samples/cdrewithfilter/cgrates.json +++ b/data/conf/samples/cdrewithfilter/cgrates.json @@ -39,12 +39,8 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, @@ -107,24 +103,12 @@ "sessions": { "enabled": true, - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/cdrsonexpmaster/cdrsreplicationmaster.json b/data/conf/samples/cdrsonexpmaster/cdrsreplicationmaster.json index 90ab96003..9ad9fc885 100644 --- a/data/conf/samples/cdrsonexpmaster/cdrsreplicationmaster.json +++ b/data/conf/samples/cdrsonexpmaster/cdrsreplicationmaster.json @@ -22,12 +22,8 @@ "cdrs": { "enabled": true, // start the CDR Server service: "store_cdrs": false, // store cdrs in storDb - "chargers_conns":[ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], "online_cdr_exports": ["http_localhost", "amqp_localhost", "http_test_file", "amqp_test_file","aws_test_file","sqs_test_file","kafka_localhost","s3_test_file"], }, diff --git a/data/conf/samples/cdrsonexpslave/cdrsreplicationslave.json b/data/conf/samples/cdrsonexpslave/cdrsreplicationslave.json index d43016883..daccd6ae0 100644 --- a/data/conf/samples/cdrsonexpslave/cdrsreplicationslave.json +++ b/data/conf/samples/cdrsonexpslave/cdrsreplicationslave.json @@ -20,12 +20,8 @@ "cdrs": { "enabled": true, // start the CDR Server service: - "chargers_conns":[ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, "chargers": { diff --git a/data/conf/samples/cdrsv1internal/cgrates.json b/data/conf/samples/cdrsv1internal/cgrates.json index 8e83cb8c7..7c91ef772 100644 --- a/data/conf/samples/cdrsv1internal/cgrates.json +++ b/data/conf/samples/cdrsv1internal/cgrates.json @@ -26,9 +26,7 @@ "cdrs": { "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "rals_conns": ["*localhost"], }, diff --git a/data/conf/samples/cdrsv2internal/cgrates.json b/data/conf/samples/cdrsv2internal/cgrates.json index cc4a2f3ea..189e4fbda 100644 --- a/data/conf/samples/cdrsv2internal/cgrates.json +++ b/data/conf/samples/cdrsv2internal/cgrates.json @@ -24,21 +24,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"}, - ], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["*localhost"], + "rals_conns": ["*localhost"], + "stats_conns": ["*localhost"], + "thresholds_conns": ["*localhost"], }, "attributes": { diff --git a/data/conf/samples/cdrsv2mongo/cgrates.json b/data/conf/samples/cdrsv2mongo/cgrates.json index 4920c08d2..b0e5447e7 100644 --- a/data/conf/samples/cdrsv2mongo/cgrates.json +++ b/data/conf/samples/cdrsv2mongo/cgrates.json @@ -25,21 +25,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"}, - ], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["*localhost"], + "rals_conns": ["*localhost"], + "stats_conns": ["*localhost"], + "thresholds_conns": ["*localhost"], }, "attributes": { diff --git a/data/conf/samples/cdrsv2mongo_gob/cgrates.json b/data/conf/samples/cdrsv2mongo_gob/cgrates.json index 5be297564..d6d3b3de8 100644 --- a/data/conf/samples/cdrsv2mongo_gob/cgrates.json +++ b/data/conf/samples/cdrsv2mongo_gob/cgrates.json @@ -34,21 +34,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"}, - ], - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["conn1"], + "rals_conns": ["conn1"], + "stats_conns": ["conn1"], + "thresholds_conns": ["conn1"], }, "attributes": { diff --git a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json index a4183c336..a7f59d7ef 100644 --- a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json +++ b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json @@ -25,21 +25,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"}, - ], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["*localhost"], + "rals_conns": ["*localhost"], + "stats_conns": ["*localhost"], + "thresholds_conns": ["*localhost"], }, "attributes": { diff --git a/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json b/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json index b5d88038c..fb572c6d7 100644 --- a/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json +++ b/data/conf/samples/cdrsv2mysql_gob/cdrsv2mysql.json @@ -33,21 +33,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"}, - ], - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["conn1"], + "rals_conns": ["conn1"], + "stats_conns": ["conn1"], + "thresholds_conns": ["conn1"], }, "attributes": { diff --git a/data/conf/samples/cdrsv2psql/cdrsv2psql.json b/data/conf/samples/cdrsv2psql/cdrsv2psql.json index 9fb8258c7..e876514df 100644 --- a/data/conf/samples/cdrsv2psql/cdrsv2psql.json +++ b/data/conf/samples/cdrsv2psql/cdrsv2psql.json @@ -25,21 +25,11 @@ "cdrs": { "enabled": true, - "attributes_conns":[ - {"address": "*internal"} - ], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "attributes_conns":["*internal"], + "chargers_conns":["*localhost"], + "rals_conns": ["*localhost"], + "stats_conns": ["*localhost"], + "thresholds_conns": ["*localhost"], }, "attributes": { diff --git a/data/conf/samples/diamagent/cgrates.json b/data/conf/samples/diamagent/cgrates.json index 1de7a2048..e221c9b0b 100644 --- a/data/conf/samples/diamagent/cgrates.json +++ b/data/conf/samples/diamagent/cgrates.json @@ -55,18 +55,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "chargers_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], + "attributes_conns": ["*localhost"], + "chargers_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], }, "diameter_agent": { diff --git a/data/conf/samples/diamagentmaxconn/cgrates.json b/data/conf/samples/diamagentmaxconn/cgrates.json index 52aac2bfa..23bd7fd06 100755 --- a/data/conf/samples/diamagentmaxconn/cgrates.json +++ b/data/conf/samples/diamagentmaxconn/cgrates.json @@ -54,18 +54,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "chargers_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], + "attributes_conns": ["*localhost"], + "chargers_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], }, "diameter_agent": { diff --git a/data/conf/samples/diamsctpagent/cgrates.json b/data/conf/samples/diamsctpagent/cgrates.json index 4c94e19c9..555e0a450 100755 --- a/data/conf/samples/diamsctpagent/cgrates.json +++ b/data/conf/samples/diamsctpagent/cgrates.json @@ -55,18 +55,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "chargers_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012","transport":"*json"} - ], + "attributes_conns": ["*localhost"], + "chargers_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], }, "diameter_agent": { diff --git a/data/conf/samples/dispatchers/all/cgrates.json b/data/conf/samples/dispatchers/all/cgrates.json index 65248a955..b27a8e241 100644 --- a/data/conf/samples/dispatchers/all/cgrates.json +++ b/data/conf/samples/dispatchers/all/cgrates.json @@ -69,35 +69,19 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, "listen_bijson": ":6014", - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "chargers_conns": ["*internal"], + "cdrs_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/dispatchers/all2/cgrates.json b/data/conf/samples/dispatchers/all2/cgrates.json index 3366ce629..967b613aa 100644 --- a/data/conf/samples/dispatchers/all2/cgrates.json +++ b/data/conf/samples/dispatchers/all2/cgrates.json @@ -69,35 +69,19 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, "listen_bijson": ":7014", - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/dispatchers/diamagent/cgrates.json b/data/conf/samples/dispatchers/diamagent/cgrates.json index 785b8ed42..09b41833f 100644 --- a/data/conf/samples/dispatchers/diamagent/cgrates.json +++ b/data/conf/samples/dispatchers/diamagent/cgrates.json @@ -44,9 +44,7 @@ "dispatchers":{ "enabled": true, - "attributes_conns": [ - {"address": "*internal"}, - ], + "attributes_conns": ["*internal"], }, "diameter_agent": { diff --git a/data/conf/samples/dispatchers/dispatchers/cgrates.json b/data/conf/samples/dispatchers/dispatchers/cgrates.json index a3aac3b90..86368cbd4 100755 --- a/data/conf/samples/dispatchers/dispatchers/cgrates.json +++ b/data/conf/samples/dispatchers/dispatchers/cgrates.json @@ -40,20 +40,16 @@ "enabled": true, }, +"chargers": { + "enabled": true, +}, + + "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "*internal"}, - ], - "resources_conns": [ - {"address": "*internal"}, - ], - "rals_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "chargers_conns": ["*internal"], "listen_bijson": ":3014", }, diff --git a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json index f51389261..c7431e477 100644 --- a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json +++ b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json @@ -48,23 +48,21 @@ "enabled": true, }, + +"chargers": { + "enabled": true, +}, + + "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "*internal"}, - ], - "resources_conns": [ - {"address": "*internal"}, - ], - "rals_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "chargers_conns": ["*internal"], "listen_bijson": ":3014", }, + "dispatchers":{ "enabled": true, "attributes_conns": [ @@ -72,6 +70,7 @@ ], }, + "apier": { "scheduler_conns": ["*internal"], }, diff --git a/data/conf/samples/dnsagent/cgrates.json b/data/conf/samples/dnsagent/cgrates.json index 3dbebdfeb..e7253bfd5 100644 --- a/data/conf/samples/dnsagent/cgrates.json +++ b/data/conf/samples/dnsagent/cgrates.json @@ -25,21 +25,11 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], + "attributes_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], + "suppliers_conns": ["*localhost"], }, diff --git a/data/conf/samples/dnsagent_reload/cgrates.json b/data/conf/samples/dnsagent_reload/cgrates.json index d5e570fe7..d4304f766 100644 --- a/data/conf/samples/dnsagent_reload/cgrates.json +++ b/data/conf/samples/dnsagent_reload/cgrates.json @@ -25,21 +25,11 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], + "attributes_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], + "suppliers_conns": ["*localhost"], }, @@ -50,9 +40,7 @@ "cdrs": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], }, diff --git a/data/conf/samples/ers/cgrates.json b/data/conf/samples/ers/cgrates.json index b6f15854c..e4907f1da 100644 --- a/data/conf/samples/ers/cgrates.json +++ b/data/conf/samples/ers/cgrates.json @@ -50,33 +50,19 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "session_cost_retries": 0, // number of queries to session_costs before recalculating CDR + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "session_cost_retries": 0, }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_example/cgrates.json b/data/conf/samples/ers_example/cgrates.json index f1592df8e..f76b49090 100644 --- a/data/conf/samples/ers_example/cgrates.json +++ b/data/conf/samples/ers_example/cgrates.json @@ -49,32 +49,18 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_reload/disabled/cgrates.json b/data/conf/samples/ers_reload/disabled/cgrates.json index 1579f44f1..7b71ca8c8 100644 --- a/data/conf/samples/ers_reload/disabled/cgrates.json +++ b/data/conf/samples/ers_reload/disabled/cgrates.json @@ -49,32 +49,18 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_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 a47b5f1e5..e29ed097f 100644 --- a/data/conf/samples/ers_reload/first_reload/cgrates.json +++ b/data/conf/samples/ers_reload/first_reload/cgrates.json @@ -49,32 +49,18 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_reload/internal/cgrates.json b/data/conf/samples/ers_reload/internal/cgrates.json index 010a5641d..f27a37e9d 100644 --- a/data/conf/samples/ers_reload/internal/cgrates.json +++ b/data/conf/samples/ers_reload/internal/cgrates.json @@ -49,32 +49,18 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/ers_reload/second_reload/cgrates.json b/data/conf/samples/ers_reload/second_reload/cgrates.json index d57c25a01..bfaf4cffc 100644 --- a/data/conf/samples/ers_reload/second_reload/cgrates.json +++ b/data/conf/samples/ers_reload/second_reload/cgrates.json @@ -49,32 +49,18 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], }, "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/hapool/cgrrater1/cgr.json b/data/conf/samples/hapool/cgrrater1/cgr.json deleted file mode 100644 index eeaef7bdd..000000000 --- a/data/conf/samples/hapool/cgrrater1/cgr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ -"listen": { - "rpc_json": ":2014", - "rpc_gob": ":2015", - "http": ":2081", -}, - -"rals": { - "enabled": true, -}, - -"scheduler": { - "enabled": true, -}, - -"users": { - "enabled": true, - "indexes": ["SubscriberId"], -}, - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - -} diff --git a/data/conf/samples/hapool/cgrrater2/cgr.json b/data/conf/samples/hapool/cgrrater2/cgr.json deleted file mode 100644 index 7e01b98f1..000000000 --- a/data/conf/samples/hapool/cgrrater2/cgr.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - -"listen": { - "rpc_json": ":2016", - "rpc_gob": ":2017", - "http": ":2082", -}, - -"rals": { - "enabled": true, -}, - -"scheduler": { - "enabled": true, -}, - -"users": { - "enabled": true, - "indexes": ["SubscriberId"], -}, - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - -} diff --git a/data/conf/samples/hapool/cgrsmg1/cgr.json b/data/conf/samples/hapool/cgrsmg1/cgr.json deleted file mode 100644 index 5d159ecdb..000000000 --- a/data/conf/samples/hapool/cgrsmg1/cgr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ -"listen": { - "rpc_json": "127.0.0.1:2018", // RPC JSON listening address - "rpc_gob": "127.0.0.1:2019", // RPC GOB listening address - "http": "127.0.0.1:2083", // HTTP listening address -}, - -"cdrs": { - "enabled": true, // start the CDR Server service: - "rals_conns": [ - {"address": "127.0.0.1:2014"}, - {"address": "127.0.0.1:2016"} - ], -}, - -"sessions": { - "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2014"}, - {"address": "127.0.0.1:2016"} - ], - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR Server, empty to disable CDR capturing - ], -}, -} diff --git a/data/conf/samples/hapool/cgrsmg2/cgr.json b/data/conf/samples/hapool/cgrsmg2/cgr.json deleted file mode 100644 index 32f1aa01e..000000000 --- a/data/conf/samples/hapool/cgrsmg2/cgr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ -"listen": { - "rpc_json": "127.0.0.1:2020", // RPC JSON listening address - "rpc_gob": "127.0.0.1:2021", // RPC GOB listening address - "http": "127.0.0.1:2084", // HTTP listening address -}, - -"cdrs": { - "enabled": true, // start the CDR Server service: - "rals_conns": [ - {"address": "127.0.0.1:2014"}, - {"address": "127.0.0.1:2016"} - ], -}, - -"sessions": { - "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2014"}, - {"address": "127.0.0.1:2016"} - ], - "cdrs_conns": [ - {"address": "*internal"} // address where to reach CDR Server, empty to disable CDR capturing - ], -}, - -} diff --git a/data/conf/samples/hapool/dagent/cgr.json b/data/conf/samples/hapool/dagent/cgr.json deleted file mode 100644 index 0c136b1df..000000000 --- a/data/conf/samples/hapool/dagent/cgr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ -"diameter_agent": { - "enabled": true, - "listen": "127.0.0.1:3868", - "sessions_conns": [ - {"address": "127.0.0.1:2018"}, - {"address": "127.0.0.1:2020"} - ], -}, -} diff --git a/data/conf/samples/httpagent/cgrates.json b/data/conf/samples/httpagent/cgrates.json index 0f386bc40..522d0dc18 100644 --- a/data/conf/samples/httpagent/cgrates.json +++ b/data/conf/samples/httpagent/cgrates.json @@ -33,12 +33,8 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], }, @@ -54,18 +50,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagent_gob/cgrates.json b/data/conf/samples/httpagent_gob/cgrates.json index 364e8030f..fb3ffe1a3 100644 --- a/data/conf/samples/httpagent_gob/cgrates.json +++ b/data/conf/samples/httpagent_gob/cgrates.json @@ -40,12 +40,8 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], }, @@ -61,18 +57,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["conn1"], + "cdrs_conns": ["conn1"], + "rals_conns": ["conn1"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagenttls/cgrates.json b/data/conf/samples/httpagenttls/cgrates.json index 87e3fd238..c20c2d241 100755 --- a/data/conf/samples/httpagenttls/cgrates.json +++ b/data/conf/samples/httpagenttls/cgrates.json @@ -44,12 +44,8 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], }, @@ -64,21 +60,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/httpagenttls_gob/cgrates.json b/data/conf/samples/httpagenttls_gob/cgrates.json index c8e06f1cd..d3430b6f8 100755 --- a/data/conf/samples/httpagenttls_gob/cgrates.json +++ b/data/conf/samples/httpagenttls_gob/cgrates.json @@ -53,12 +53,8 @@ "cdrs": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], }, @@ -73,21 +69,10 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["conn1"], + "cdrs_conns": ["conn1"], + "rals_conns": ["conn1"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/loaders/tutmongo/cgrates.json b/data/conf/samples/loaders/tutmongo/cgrates.json index c151f6d22..c7e7bdf0c 100644 --- a/data/conf/samples/loaders/tutmongo/cgrates.json +++ b/data/conf/samples/loaders/tutmongo/cgrates.json @@ -142,15 +142,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/loaders/tutmysql/cgrates.json b/data/conf/samples/loaders/tutmysql/cgrates.json index 5d41973b7..d39983aa1 100644 --- a/data/conf/samples/loaders/tutmysql/cgrates.json +++ b/data/conf/samples/loaders/tutmysql/cgrates.json @@ -40,9 +40,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], + "chargers_conns":["*internal"], }, @@ -144,24 +142,12 @@ "sessions": { "enabled": true, - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"}, - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/mongoatlas/cgrates.json b/data/conf/samples/mongoatlas/cgrates.json index cb3c58289..8a9186111 100755 --- a/data/conf/samples/mongoatlas/cgrates.json +++ b/data/conf/samples/mongoatlas/cgrates.json @@ -131,15 +131,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/mongoreplica/cgrates.json b/data/conf/samples/mongoreplica/cgrates.json index 2f7299ffe..eaa984300 100755 --- a/data/conf/samples/mongoreplica/cgrates.json +++ b/data/conf/samples/mongoreplica/cgrates.json @@ -102,15 +102,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/radagent/cgrates.json b/data/conf/samples/radagent/cgrates.json index 18d875173..badea8c42 100644 --- a/data/conf/samples/radagent/cgrates.json +++ b/data/conf/samples/radagent/cgrates.json @@ -37,9 +37,7 @@ "cdrs": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], }, "resources": { @@ -60,21 +58,11 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "resources_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], + "rals_conns": ["*localhost"], + "resources_conns": ["*localhost"], + "chargers_conns": ["*internal"], "debit_interval": "10s", }, diff --git a/data/conf/samples/radagent_gob/cgrates.json b/data/conf/samples/radagent_gob/cgrates.json index c4e087f32..aab0f7287 100644 --- a/data/conf/samples/radagent_gob/cgrates.json +++ b/data/conf/samples/radagent_gob/cgrates.json @@ -13,6 +13,14 @@ "http": ":2080", // HTTP listening address }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:2013", "transport":"*gob"}], + }, +}, + + "data_db": { // database used to store runtime data (eg: accounts, cdr stats) "db_type": "mongo", // stor database type to use: "db_port": 27017, // the port to reach the stordb @@ -37,9 +45,7 @@ "cdrs": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], }, "resources": { @@ -60,21 +66,11 @@ "sessions": { "enabled": true, - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "resources_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "attributes_conns": ["conn1"], + "cdrs_conns": ["conn1"], + "rals_conns": ["conn1"], + "resources_conns": ["conn1"], + "chargers_conns": ["*internal"], "debit_interval": "10s", }, diff --git a/data/conf/samples/rpccaching/cgrates.json b/data/conf/samples/rpccaching/cgrates.json index 367a5178a..22fb2aacc 100644 --- a/data/conf/samples/rpccaching/cgrates.json +++ b/data/conf/samples/rpccaching/cgrates.json @@ -57,18 +57,10 @@ "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/sessions/cgrates.json b/data/conf/samples/sessions/cgrates.json index 88d3f4fdd..df6d8f605 100644 --- a/data/conf/samples/sessions/cgrates.json +++ b/data/conf/samples/sessions/cgrates.json @@ -33,12 +33,8 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], + "rals_conns": ["*internal"], }, @@ -79,30 +75,14 @@ "sessions": { "enabled": true, "session_ttl": "50ms", - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "thresholds_conns": [ - {"address": "*internal"} - ], - "stats_conns": [ - {"address": "*internal"} - ], - "suppliers_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "resources_conns": ["*internal"], + "thresholds_conns": ["*internal"], + "stats_conns": ["*internal"], + "suppliers_conns": ["*internal"], + "attributes_conns": ["*internal"], }, diff --git a/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json b/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json index c6358b276..4fbcfc823 100644 --- a/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json +++ b/data/conf/samples/sessions_replication/smgreplcmaster/cgrates.json @@ -44,15 +44,9 @@ "replication_conns": [ {"address": "127.0.0.1:22012", "transport": "*json"}, ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json b/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json index b1cb50764..0fd6acf3e 100644 --- a/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json +++ b/data/conf/samples/sessions_replication/smgreplcslave/cgrates.json @@ -12,7 +12,16 @@ "http": "127.0.0.1:22080", // HTTP listening address }, -"stor_db": { // database used to store offline tariff plans and CDRs + +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:22012", "transport":"*json"}], + }, +}, + + + "stor_db": { // database used to store offline tariff plans and CDRs "db_password": "CGRateS.org", // password to use when connecting to stordb }, @@ -45,15 +54,9 @@ "replication_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], - "rals_conns": [ - {"address": "127.0.0.1:22012", "transport": "*json"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["conn1"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/smg/cgrates.json b/data/conf/samples/smg/cgrates.json index 0673bd872..5a51619e5 100644 --- a/data/conf/samples/smg/cgrates.json +++ b/data/conf/samples/smg/cgrates.json @@ -56,15 +56,9 @@ "sessions": { "enabled": true, "session_ttl": "50ms", - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} // address where to reach CDR Server, empty to disable CDR capturing <*internal|x.y.z.y:1234> - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*localhost"], + "cdrs_conns": ["*localhost"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/smg_automatic_debits/cgrates.json b/data/conf/samples/smg_automatic_debits/cgrates.json index ae71059a9..4d3cb210a 100644 --- a/data/conf/samples/smg_automatic_debits/cgrates.json +++ b/data/conf/samples/smg_automatic_debits/cgrates.json @@ -35,15 +35,9 @@ "sessions": { "enabled": true, "debit_interval": "1ms", // interval to perform debits on. - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/smg_gob/cgrates.json b/data/conf/samples/smg_gob/cgrates.json index bbe7db286..0162b9956 100644 --- a/data/conf/samples/smg_gob/cgrates.json +++ b/data/conf/samples/smg_gob/cgrates.json @@ -56,15 +56,9 @@ "sessions": { "enabled": true, "session_ttl": "50ms", - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "cdrs_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} // address where to reach CDR Server, empty to disable CDR capturing <*internal|x.y.z.y:1234> - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["conn1"], + "cdrs_conns": ["conn1"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/smgeneric/cgrates.json b/data/conf/samples/smgeneric/cgrates.json index f984850b9..c446553b5 100644 --- a/data/conf/samples/smgeneric/cgrates.json +++ b/data/conf/samples/smgeneric/cgrates.json @@ -55,15 +55,9 @@ "sessions": { "enabled": true, // starts SessionManager service: - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/smgreplcmaster/cgrates.json b/data/conf/samples/smgreplcmaster/cgrates.json index eb4e43254..0fa5133f3 100644 --- a/data/conf/samples/smgreplcmaster/cgrates.json +++ b/data/conf/samples/smgreplcmaster/cgrates.json @@ -43,15 +43,9 @@ "replication_conns": [ {"address": "127.0.0.1:22012", "transport": "*json"}, ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/smgreplcmaster_gob/cgrates.json b/data/conf/samples/smgreplcmaster_gob/cgrates.json index 43367a794..b81a327d5 100644 --- a/data/conf/samples/smgreplcmaster_gob/cgrates.json +++ b/data/conf/samples/smgreplcmaster_gob/cgrates.json @@ -43,15 +43,9 @@ "replication_conns": [ {"address": "127.0.0.1:22013", "transport": "*gob"}, ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/smgreplcslave/cgrates.json b/data/conf/samples/smgreplcslave/cgrates.json index 7e70e937a..c6bdaba98 100644 --- a/data/conf/samples/smgreplcslave/cgrates.json +++ b/data/conf/samples/smgreplcslave/cgrates.json @@ -12,6 +12,14 @@ "http": "127.0.0.1:22080", // HTTP listening address }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:22012", "transport":"*json"}], + }, +}, + + "stor_db": { // database used to store offline tariff plans and CDRs "db_password": "CGRateS.org", // password to use when connecting to stordb }, @@ -44,15 +52,9 @@ "replication_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], - "rals_conns": [ - {"address": "127.0.0.1:22012", "transport": "*json"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["conn1"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/smgreplcslave_gob/cgrates.json b/data/conf/samples/smgreplcslave_gob/cgrates.json index 61d922aa2..ddd3d61f1 100644 --- a/data/conf/samples/smgreplcslave_gob/cgrates.json +++ b/data/conf/samples/smgreplcslave_gob/cgrates.json @@ -32,6 +32,13 @@ "enabled": true, }, +"rpc_conns": { + "conn1": { + "strategy": "*first", + "conns": [{"address": "127.0.0.1:22013", "transport":"*gob"}], + }, +}, + "chargers": { "enabled": true, @@ -44,15 +51,9 @@ "replication_conns": [ {"address": "127.0.0.1:2013", "transport": "*gob"}, ], - "rals_conns": [ - {"address": "127.0.0.1:22013", "transport": "*gob"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["conn1"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, "apier": { diff --git a/data/conf/samples/tls/cgrates.json b/data/conf/samples/tls/cgrates.json index 54298bf30..7fe705562 100755 --- a/data/conf/samples/tls/cgrates.json +++ b/data/conf/samples/tls/cgrates.json @@ -73,15 +73,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "resources_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], + "rals_conns": ["*localhost"], + "resources_conns": ["*localhost"], + "attributes_conns": ["*localhost"], }, "attributes": { @@ -90,9 +84,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], }, "chargers": { diff --git a/data/conf/samples/tls_gob/cgrates.json b/data/conf/samples/tls_gob/cgrates.json index f4476e86f..b8d56b80d 100755 --- a/data/conf/samples/tls_gob/cgrates.json +++ b/data/conf/samples/tls_gob/cgrates.json @@ -81,15 +81,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "resources_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport": "*gob"} - ], + "rals_conns": ["conn1"], + "resources_conns": ["conn1"], + "attributes_conns": ["conn1"], }, "attributes": { @@ -98,9 +92,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"} - ], + "chargers_conns":["*internal"], }, "chargers": { diff --git a/data/conf/samples/tutinternal/cgrates.json b/data/conf/samples/tutinternal/cgrates.json index ae6e4cc2b..e4bcaa4d1 100644 --- a/data/conf/samples/tutinternal/cgrates.json +++ b/data/conf/samples/tutinternal/cgrates.json @@ -41,9 +41,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], + "chargers_conns":["*internal"], }, @@ -87,24 +85,12 @@ "sessions": { "enabled": true, - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"}, - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json index 50ec5c0c6..8b5731b75 100644 --- a/data/conf/samples/tutmongo/cgrates.json +++ b/data/conf/samples/tutmongo/cgrates.json @@ -107,15 +107,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo2/cgrates.json b/data/conf/samples/tutmongo2/cgrates.json index 8d291cadc..9be1f9725 100644 --- a/data/conf/samples/tutmongo2/cgrates.json +++ b/data/conf/samples/tutmongo2/cgrates.json @@ -45,9 +45,7 @@ "cdrs": { "enabled": true, "extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "chargers_conns":["*localhost"], "store_cdrs": true, "online_cdr_exports": [] }, @@ -99,24 +97,12 @@ "sessions": { "enabled": true, - "resources_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "resources_conns": ["*localhost"], + "suppliers_conns": ["*localhost"], + "attributes_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo2_gob/cgrates.json b/data/conf/samples/tutmongo2_gob/cgrates.json index 64de18c04..70dac5ef0 100644 --- a/data/conf/samples/tutmongo2_gob/cgrates.json +++ b/data/conf/samples/tutmongo2_gob/cgrates.json @@ -52,9 +52,7 @@ "cdrs": { "enabled": true, "extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"], - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "chargers_conns":["conn1"], "store_cdrs": true, "online_cdr_exports": [] }, @@ -106,24 +104,12 @@ "sessions": { "enabled": true, - "resources_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "resources_conns": ["conn1"], + "suppliers_conns": ["conn1"], + "attributes_conns": ["conn1"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongo_gob/cgrates.json b/data/conf/samples/tutmongo_gob/cgrates.json index 3b90367e9..a60cd11c7 100644 --- a/data/conf/samples/tutmongo_gob/cgrates.json +++ b/data/conf/samples/tutmongo_gob/cgrates.json @@ -114,15 +114,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmongonew/cgrates.json b/data/conf/samples/tutmongonew/cgrates.json index ab1bfc9ec..5e18278a6 100644 --- a/data/conf/samples/tutmongonew/cgrates.json +++ b/data/conf/samples/tutmongonew/cgrates.json @@ -42,9 +42,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "chargers_conns":["*localhost"], }, @@ -107,15 +105,9 @@ "sessions": { "enabled": true, - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json index 46a0dabd2..a80f346c9 100644 --- a/data/conf/samples/tutmysql/cgrates.json +++ b/data/conf/samples/tutmysql/cgrates.json @@ -41,9 +41,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], + "chargers_conns":["*internal"], }, @@ -107,24 +105,12 @@ "sessions": { "enabled": true, - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"}, - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"}, - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql2/cgrates.json b/data/conf/samples/tutmysql2/cgrates.json index 0af14e145..e80c4a49e 100644 --- a/data/conf/samples/tutmysql2/cgrates.json +++ b/data/conf/samples/tutmysql2/cgrates.json @@ -37,9 +37,7 @@ "cdrs": { "enabled": true, "extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"], - "chargers_conns":[ - {"address": "127.0.0.1:2012", "transport":"*json"}, - ], + "chargers_conns":["*localhost"], "store_cdrs": true, "online_cdr_exports": [] }, @@ -64,24 +62,12 @@ "sessions": { "enabled": true, - "resources_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2012", "transport":"*json"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "resources_conns": ["*localhost"], + "suppliers_conns": ["*localhost"], + "attributes_conns": ["*localhost"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql2_gob/cgrates.json b/data/conf/samples/tutmysql2_gob/cgrates.json index 4ee9352b4..26ef654f4 100644 --- a/data/conf/samples/tutmysql2_gob/cgrates.json +++ b/data/conf/samples/tutmysql2_gob/cgrates.json @@ -45,9 +45,7 @@ "cdrs": { "enabled": true, "extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"], - "chargers_conns":[ - {"address": "127.0.0.1:2013", "transport":"*gob"}, - ], + "chargers_conns":["conn1"], "store_cdrs": true, "online_cdr_exports": [] }, @@ -72,24 +70,12 @@ "sessions": { "enabled": true, - "resources_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "suppliers_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "attributes_conns": [ - {"address": "127.0.0.1:2013", "transport":"*gob"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "resources_conns": ["conn1"], + "suppliers_conns": ["conn1"], + "attributes_conns": ["conn1"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutmysql_internal/cgrates.json b/data/conf/samples/tutmysql_internal/cgrates.json index e8370a71d..ec2fb655a 100644 --- a/data/conf/samples/tutmysql_internal/cgrates.json +++ b/data/conf/samples/tutmysql_internal/cgrates.json @@ -39,9 +39,7 @@ "cdrs": { "enabled": true, - "chargers_conns":[ - {"address": "*internal"}, - ], + "chargers_conns":["*internal"], }, @@ -218,31 +216,19 @@ "suppliers": { "enabled": true, - "prefix_indexed_fields":["Destination",], + "prefix_indexed_fields":["Destination"], "stats_conns": ["*internal"], }, "sessions": { "enabled": true, - "suppliers_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], + "suppliers_conns": ["*internal"], + "resources_conns": ["*internal"], + "attributes_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], + "chargers_conns": ["*internal"], }, diff --git a/data/conf/samples/tutpostgres/cgrates.json b/data/conf/samples/tutpostgres/cgrates.json index ae955851c..d4a551145 100644 --- a/data/conf/samples/tutpostgres/cgrates.json +++ b/data/conf/samples/tutpostgres/cgrates.json @@ -87,15 +87,9 @@ "sessions": { "enabled": true, - "chargers_conns": [ - {"address": "*internal"} - ], - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], + "chargers_conns": ["*internal"], + "rals_conns": ["*internal"], + "cdrs_conns": ["*internal"], }, diff --git a/engine/cdrs.go b/engine/cdrs.go index 23f0021d5..220a9c2c4 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -68,35 +68,19 @@ func fsCdrHandler(w http.ResponseWriter, r *http.Request) { } // NewCDRServer is a constructor for CDRServer -func NewCDRServer(cgrCfg *config.CGRConfig, cdrDb CdrStorage, dm *DataManager, rater, - attrS, thdS, statS, chargerS rpcclient.ClientConnector, filterS *FilterS) *CDRServer { - if rater != nil && reflect.ValueOf(rater).IsNil() { - rater = nil - } - if attrS != nil && reflect.ValueOf(attrS).IsNil() { - attrS = nil - } - if thdS != nil && reflect.ValueOf(thdS).IsNil() { - thdS = nil - } - if statS != nil && reflect.ValueOf(statS).IsNil() { - statS = nil - } - if chargerS != nil && reflect.ValueOf(chargerS).IsNil() { - chargerS = nil - } +func NewCDRServer(cgrCfg *config.CGRConfig, cdrDb CdrStorage, dm *DataManager, filterS *FilterS, + connMgr *ConnManager) *CDRServer { + return &CDRServer{ - cgrCfg: cgrCfg, - cdrDb: cdrDb, - dm: dm, - rals: rater, - attrS: attrS, - statS: statS, - thdS: thdS, - chargerS: chargerS, - guard: guardian.Guardian, + cgrCfg: cgrCfg, + cdrDb: cdrDb, + dm: dm, + guard: guardian.Guardian, httpPoster: NewHTTPPoster(cgrCfg.GeneralCfg().HttpSkipTlsVerify, - cgrCfg.GeneralCfg().ReplyTimeout), filterS: filterS} + cgrCfg.GeneralCfg().ReplyTimeout), + filterS: filterS, + connMgr: connMgr, + } } // CDRServer stores and rates CDRs @@ -104,14 +88,10 @@ type CDRServer struct { cgrCfg *config.CGRConfig cdrDb CdrStorage dm *DataManager - rals rpcclient.ClientConnector - attrS rpcclient.ClientConnector - thdS rpcclient.ClientConnector - statS rpcclient.ClientConnector - chargerS rpcclient.ClientConnector guard *guardian.GuardianLocker httpPoster *HTTPPoster // used for replication filterS *FilterS + connMgr *ConnManager } // RegisterHandlersToServer is called by cgr-engine to register HTTP URL handlers @@ -231,11 +211,13 @@ func (cdrS *CDRServer) getCostFromRater(cdr *CDRWithArgDispatcher) (*CallCost, e PerformRounding: true, } if reqTypes.Has(cdr.RequestType) { // Prepaid - Cost can be recalculated in case of missing records from SM - err = cdrS.rals.Call(utils.ResponderDebit, + err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().RaterConns, + utils.ResponderDebit, &CallDescriptorWithArgDispatcher{CallDescriptor: cd, ArgDispatcher: cdr.ArgDispatcher}, cc) } else { - err = cdrS.rals.Call(utils.ResponderGetCost, + err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().RaterConns, + utils.ResponderGetCost, &CallDescriptorWithArgDispatcher{CallDescriptor: cd, ArgDispatcher: cdr.ArgDispatcher}, cc) } @@ -290,7 +272,7 @@ func (cdrS *CDRServer) rateCDRWithErr(cdr *CDRWithArgDispatcher) (ratedCDRs []*C // refundEventCost will refund the EventCost using RefundIncrements func (cdrS *CDRServer) refundEventCost(ec *EventCost, reqType, tor string) (err error) { - if cdrS.rals == nil { + if len(cdrS.cgrCfg.CdrsCfg().RaterConns) == 0 { return utils.NewErrNotConnected(utils.RALService) } if ec == nil || !utils.AccountableRequestTypes.Has(reqType) { @@ -301,7 +283,8 @@ func (cdrS *CDRServer) refundEventCost(ec *EventCost, reqType, tor string) (err return } var acnt Account - if err = cdrS.rals.Call(utils.ResponderRefundIncrements, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().RaterConns, + utils.ResponderRefundIncrements, &CallDescriptorWithArgDispatcher{CallDescriptor: cd}, &acnt); err != nil { return } @@ -313,7 +296,8 @@ func (cdrS *CDRServer) refundEventCost(ec *EventCost, reqType, tor string) (err func (cdrS *CDRServer) chrgProcessEvent(cgrEv *utils.CGREventWithArgDispatcher, attrS, store, allowUpdate, export, thdS, statS bool) (err error) { var chrgrs []*ChrgSProcessEventReply - if err = cdrS.chargerS.Call(utils.ChargerSv1ProcessEvent, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().ChargerSConns, + utils.ChargerSv1ProcessEvent, cgrEv, &chrgrs); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> error: %s processing CGR event %+v with %s.", @@ -356,7 +340,8 @@ func (cdrS *CDRServer) chrgProcessEvent(cgrEv *utils.CGREventWithArgDispatcher, // chrgrSProcessEvent forks CGREventWithArgDispatcher into multiples based on matching ChargerS profiles func (cdrS *CDRServer) chrgrSProcessEvent(cgrEv *utils.CGREventWithArgDispatcher) (cgrEvs []*utils.CGREventWithArgDispatcher, err error) { var chrgrs []*ChrgSProcessEventReply - if err = cdrS.chargerS.Call(utils.ChargerSv1ProcessEvent, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().ChargerSConns, + utils.ChargerSv1ProcessEvent, cgrEv, &chrgrs); err != nil { return } @@ -382,7 +367,8 @@ func (cdrS *CDRServer) attrSProcessEvent(cgrEv *utils.CGREventWithArgDispatcher) if cgrEv.ArgDispatcher != nil { attrArgs.ArgDispatcher = cgrEv.ArgDispatcher } - if err = cdrS.attrS.Call(utils.AttributeSv1ProcessEvent, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().AttributeSConns, + utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err == nil && len(rplyEv.AlteredFields) != 0 { cgrEv.CGREvent = rplyEv.CGREvent if tntIface, has := cgrEv.CGREvent.Event[utils.MetaTenant]; has { @@ -405,7 +391,8 @@ func (cdrS *CDRServer) thdSProcessEvent(cgrEv *utils.CGREventWithArgDispatcher) if cgrEv.ArgDispatcher != nil { thArgs.ArgDispatcher = cgrEv.ArgDispatcher } - if err = cdrS.thdS.Call(utils.ThresholdSv1ProcessEvent, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().ThresholdSConns, + utils.ThresholdSv1ProcessEvent, thArgs, &tIDs); err != nil && err.Error() == utils.ErrNotFound.Error() { err = nil // NotFound is not considered error @@ -420,7 +407,8 @@ func (cdrS *CDRServer) statSProcessEvent(cgrEv *utils.CGREventWithArgDispatcher) if cgrEv.ArgDispatcher != nil { statArgs.ArgDispatcher = cgrEv.ArgDispatcher } - if err = cdrS.statS.Call(utils.StatSv1ProcessEvent, + if err = cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().StatSConns, + utils.StatSv1ProcessEvent, statArgs, &reply); err != nil && err.Error() == utils.ErrNotFound.Error() { err = nil // NotFound is not considered error @@ -437,7 +425,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.cgrCfg.ApierCfg().AttributeSConns, cdrS.filterS); err != nil { // DON"T FORHERT TO TAKE ATTRIBUTESC FROM CDRS + cdrS.cgrCfg.CdrsCfg().AttributeSConns, cdrS.filterS); err != nil { utils.Logger.Err(fmt.Sprintf(" Building CDRExporter for online exports got error: <%s>", err.Error())) continue } @@ -683,7 +671,7 @@ func (cdrS *CDRServer) V1ProcessCDR(cdr *CDRWithArgDispatcher, reply *string) (e ArgDispatcher: cdr.ArgDispatcher, } - if cdrS.attrS != nil { + if len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0 { if err = cdrS.attrSProcessEvent(cgrEv); err != nil { err = utils.NewErrServerError(err) return @@ -701,16 +689,18 @@ func (cdrS *CDRServer) V1ProcessCDR(cdr *CDRWithArgDispatcher, reply *string) (e if len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0 { cdrS.exportCDRs([]*CDR{cdr.CDR}) // Replicate raw CDR } - if cdrS.thdS != nil { + if len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0 { go cdrS.thdSProcessEvent(cgrEv) } - if cdrS.statS != nil { + if len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0 { go cdrS.statSProcessEvent(cgrEv) } - if cdrS.chargerS != nil && + if len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) != 0 && utils.SliceHasMember([]string{"", utils.MetaRaw}, cdr.RunID) { - go cdrS.chrgProcessEvent(cgrEv, cdrS.attrS != nil, cdrS.cgrCfg.CdrsCfg().StoreCdrs, false, - len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0, cdrS.thdS != nil, cdrS.statS != nil) + go cdrS.chrgProcessEvent(cgrEv, len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0, + cdrS.cgrCfg.CdrsCfg().StoreCdrs, false, + len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0, len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0, + len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0) } *reply = utils.OK @@ -754,7 +744,7 @@ func (cdrS *CDRServer) V1ProcessEvent(arg *ArgV1ProcessEvent, reply *string) (er if flgs, err = utils.FlagsWithParamsFromSlice(arg.Flags); err != nil { return } - attrS := cdrS.attrS != nil + attrS := len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0 if flgs.HasKey(utils.MetaAttributes) { attrS = flgs.GetBool(utils.MetaAttributes) } @@ -766,15 +756,15 @@ func (cdrS *CDRServer) V1ProcessEvent(arg *ArgV1ProcessEvent, reply *string) (er if flgs.HasKey(utils.MetaExport) { export = flgs.GetBool(utils.MetaExport) } - thdS := cdrS.thdS != nil + thdS := len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0 if flgs.HasKey(utils.MetaThresholds) { thdS = flgs.GetBool(utils.MetaThresholds) } - stS := cdrS.statS != nil + stS := len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0 if flgs.HasKey(utils.MetaStats) { stS = flgs.GetBool(utils.MetaStats) } - chrgS := cdrS.chargerS != nil // activate charging for the Event + chrgS := len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) != 0 // activate charging for the Event if flgs.HasKey(utils.MetaChargers) { chrgS = flgs.GetBool(utils.MetaChargers) } @@ -873,7 +863,8 @@ func (cdrS *CDRServer) V2StoreSessionCost(args *ArgsV2CDRSStoreSMCost, reply *st cd.RunID = args.Cost.RunID cd.Increments = roundIncrements var response float64 - if err := cdrS.rals.Call(utils.ResponderRefundRounding, + if err := cdrS.connMgr.Call(cdrS.cgrCfg.CdrsCfg().RaterConns, + utils.ResponderRefundRounding, &CallDescriptorWithArgDispatcher{CallDescriptor: cd}, &response); err != nil { utils.Logger.Warning( @@ -930,16 +921,16 @@ func (cdrS *CDRServer) V1RateCDRs(arg *ArgRateCDRs, reply *string) (err error) { if flgs.HasKey(utils.MetaExport) { export = flgs.GetBool(utils.MetaExport) } - thdS := cdrS.thdS != nil + thdS := len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0 if flgs.HasKey(utils.MetaThresholds) { thdS = flgs.GetBool(utils.MetaThresholds) } - statS := cdrS.statS != nil + statS := len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0 if flgs.HasKey(utils.MetaStatS) { statS = flgs.GetBool(utils.MetaStatS) } if flgs.GetBool(utils.MetaChargers) { - if cdrS.chargerS == nil { + if len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) == 0 { return utils.NewErrNotConnected(utils.ChargerS) } for _, cdr := range cdrs { @@ -1003,36 +994,6 @@ func (cdrS *CDRServer) V1CountCDRs(args *utils.RPCCDRsFilterWithArgDispatcher, c return nil } -// SetAttributeSConnection sets the new connection to the attribute service -// only used on reload -func (cdrS *CDRServer) SetAttributeSConnection(attrS rpcclient.ClientConnector) { - cdrS.attrS = attrS -} - -// SetThresholSConnection sets the new connection to the threshold service -// only used on reload -func (cdrS *CDRServer) SetThresholSConnection(thdS rpcclient.ClientConnector) { - cdrS.thdS = thdS -} - -// SetStatSConnection sets the new connection to the stat service -// only used on reload -func (cdrS *CDRServer) SetStatSConnection(stS rpcclient.ClientConnector) { - cdrS.statS = stS -} - -// SetChargerSConnection sets the new connection to the charger service -// only used on reload -func (cdrS *CDRServer) SetChargerSConnection(chS rpcclient.ClientConnector) { - cdrS.chargerS = chS -} - -// SetRALsConnection sets the new connection to the RAL service -// only used on reload -func (cdrS *CDRServer) SetRALsConnection(rls rpcclient.ClientConnector) { - cdrS.rals = rls -} - // SetStorDB sets the new StorDB // only used on reload func (cdrS *CDRServer) SetStorDB(cdrDb CdrStorage) { diff --git a/services/cdrs.go b/services/cdrs.go index e29a83dbe..f7ba73bc9 100644 --- a/services/cdrs.go +++ b/services/cdrs.go @@ -34,43 +34,33 @@ import ( // NewCDRServer returns the CDR Server func NewCDRServer(cfg *config.CGRConfig, dm *DataDBService, storDB *StorDBService, filterSChan chan *engine.FilterS, - server *utils.Server, internalCDRServerChan, chrsChan, respChan, attrsChan, thsChan, stsChan, - dispatcherChan chan rpcclient.ClientConnector) servmanager.Service { + server *utils.Server, internalCDRServerChan chan rpcclient.ClientConnector, + connMgr *engine.ConnManager) servmanager.Service { return &CDRServer{ - connChan: internalCDRServerChan, - cfg: cfg, - dm: dm, - storDB: storDB, - filterSChan: filterSChan, - server: server, - chrsChan: chrsChan, - respChan: respChan, - attrsChan: attrsChan, - thsChan: thsChan, - stsChan: stsChan, - dispatcherChan: dispatcherChan, + connChan: internalCDRServerChan, + cfg: cfg, + dm: dm, + storDB: storDB, + filterSChan: filterSChan, + server: server, + connMgr: connMgr, } } // CDRServer implements Service interface type CDRServer struct { sync.RWMutex - cfg *config.CGRConfig - dm *DataDBService - storDB *StorDBService - filterSChan chan *engine.FilterS - server *utils.Server - chrsChan chan rpcclient.ClientConnector - respChan chan rpcclient.ClientConnector - attrsChan chan rpcclient.ClientConnector - thsChan chan rpcclient.ClientConnector - stsChan chan rpcclient.ClientConnector - dispatcherChan chan rpcclient.ClientConnector + cfg *config.CGRConfig + dm *DataDBService + storDB *StorDBService + filterSChan chan *engine.FilterS + server *utils.Server cdrS *engine.CDRServer rpcv1 *v1.CDRsV1 rpcv2 *v2.CDRsV2 connChan chan rpcclient.ClientConnector + connMgr *engine.ConnManager } // Start should handle the sercive start @@ -84,42 +74,10 @@ func (cdrS *CDRServer) Start() (err error) { filterS := <-cdrS.filterSChan cdrS.filterSChan <- filterS - var ralConn, attrSConn, thresholdSConn, statsConn, chargerSConn rpcclient.ClientConnector - - chargerSConn, err = NewConnection(cdrS.cfg, cdrS.chrsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().ChargerSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.ChargerS, err.Error())) - return - } - ralConn, err = NewConnection(cdrS.cfg, cdrS.respChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().RaterConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.RALService, err.Error())) - return - } - attrSConn, err = NewConnection(cdrS.cfg, cdrS.attrsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().AttributeSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.AttributeS, err.Error())) - return - } - thresholdSConn, err = NewConnection(cdrS.cfg, cdrS.thsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().ThresholdSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.ThresholdS, err.Error())) - return - } - statsConn, err = NewConnection(cdrS.cfg, cdrS.stsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().StatSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.StatS, err.Error())) - return - } cdrS.Lock() defer cdrS.Unlock() cdrS.cdrS = engine.NewCDRServer(cdrS.cfg, cdrS.storDB.GetDM(), cdrS.dm.GetDM(), - ralConn, attrSConn, thresholdSConn, statsConn, chargerSConn, filterS) + filterS, cdrS.connMgr) utils.Logger.Info("Registering CDRS HTTP Handlers.") cdrS.cdrS.RegisterHandlersToServer(cdrS.server) utils.Logger.Info("Registering CDRS RPC service.") @@ -140,47 +98,11 @@ func (cdrS *CDRServer) GetIntenternalChan() (conn chan rpcclient.ClientConnector // Reload handles the change of config func (cdrS *CDRServer) Reload() (err error) { - var ralConn, attrSConn, thresholdSConn, statsConn, chargerSConn rpcclient.ClientConnector - chargerSConn, err = NewConnection(cdrS.cfg, cdrS.chrsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().ChargerSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.ChargerS, err.Error())) - return - } - ralConn, err = NewConnection(cdrS.cfg, cdrS.respChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().RaterConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.RALService, err.Error())) - return - } - attrSConn, err = NewConnection(cdrS.cfg, cdrS.attrsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().AttributeSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.AttributeS, err.Error())) - return - } - thresholdSConn, err = NewConnection(cdrS.cfg, cdrS.thsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().ThresholdSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.ThresholdS, err.Error())) - return - } - statsConn, err = NewConnection(cdrS.cfg, cdrS.stsChan, cdrS.dispatcherChan, cdrS.cfg.CdrsCfg().StatSConns) - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", - utils.StatS, err.Error())) - return - } cdrS.Lock() if cdrS.storDB.WasReconnected() { // rewrite the connection if was changed cdrS.cdrS.SetStorDB(cdrS.storDB.GetDM()) } - cdrS.cdrS.SetRALsConnection(ralConn) - cdrS.cdrS.SetAttributeSConnection(attrSConn) - cdrS.cdrS.SetThresholSConnection(thresholdSConn) - cdrS.cdrS.SetStatSConnection(statsConn) - cdrS.cdrS.SetChargerSConnection(chargerSConn) cdrS.Unlock() return } diff --git a/services/cdrs_it_test.go b/services/cdrs_it_test.go index 7f6643b64..ba09bc225 100644 --- a/services/cdrs_it_test.go +++ b/services/cdrs_it_test.go @@ -69,14 +69,13 @@ func TestCdrsReload(t *testing.T) { cfg.StorDbCfg().Type = utils.INTERNAL 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) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), schS, engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, make(chan rpcclient.ClientConnector, 1), - chrS.GetIntenternalChan(), ralS.GetResponder().GetIntenternalChan(), - nil, nil, nil, nil) + nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), cdrS, ralS, schS, chrS, NewLoaderService(cfg, db, filterSChan, server, cacheSChan, nil, engineShutdown), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/chargers_it_test.go b/services/chargers_it_test.go index 1ad519bd1..e62ef92eb 100644 --- a/services/chargers_it_test.go +++ b/services/chargers_it_test.go @@ -51,8 +51,8 @@ func TestChargerSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) - chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), attrS, chrS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/dnsagent_it_test.go b/services/dnsagent_it_test.go index aafc89b1e..81adac2e0 100644 --- a/services/dnsagent_it_test.go +++ b/services/dnsagent_it_test.go @@ -50,9 +50,8 @@ func TestDNSAgentReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - sS := NewSessionService(cfg, db, server, nil, - nil, nil, nil, nil, - nil, nil, nil, nil, make(chan rpcclient.ClientConnector, 1), engineShutdown) + sS := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), + engineShutdown, nil) srv := NewDNSAgent(cfg, filterSChan, sS.GetIntenternalChan(), nil, engineShutdown) srvMngr.AddServices(NewConnManagerService(cfg, nil), srv, sS, NewLoaderService(cfg, db, filterSChan, server, cacheSChan, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { diff --git a/services/ers_it_test.go b/services/ers_it_test.go index 575bd13f0..f40c9c99c 100644 --- a/services/ers_it_test.go +++ b/services/ers_it_test.go @@ -55,9 +55,7 @@ func TestEventReaderSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - sS := NewSessionService(cfg, db, server, nil, - nil, nil, nil, nil, - nil, nil, nil, nil, make(chan rpcclient.ClientConnector, 1), engineShutdown) + sS := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), engineShutdown, nil) attrS := NewEventReaderService(cfg, filterSChan, engineShutdown, nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), attrS, sS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { diff --git a/services/rals_it_test.go b/services/rals_it_test.go index 177f7855d..faa443cff 100644 --- a/services/rals_it_test.go +++ b/services/rals_it_test.go @@ -67,10 +67,10 @@ func TestRalsReload(t *testing.T) { db := NewDataDBService(cfg) cfg.StorDbCfg().Type = utils.INTERNAL stordb := NewStorDBService(cfg) - 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)) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 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 { diff --git a/services/resources_it_test.go b/services/resources_it_test.go index 9a74987f8..55304ce46 100644 --- a/services/resources_it_test.go +++ b/services/resources_it_test.go @@ -54,8 +54,8 @@ func TestResourceSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) - reS := NewResourceService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + reS := NewResourceService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), tS, reS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/schedulers_it_test.go b/services/schedulers_it_test.go index b0eaaa8fb..d02b5a9bc 100644 --- a/services/schedulers_it_test.go +++ b/services/schedulers_it_test.go @@ -46,7 +46,7 @@ func TestSchedulerSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), schS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { diff --git a/services/sessions.go b/services/sessions.go index 5a788b774..70bc09c78 100644 --- a/services/sessions.go +++ b/services/sessions.go @@ -22,6 +22,8 @@ import ( "fmt" "sync" + "github.com/cgrates/cgrates/engine" + v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/servmanager" @@ -32,43 +34,25 @@ import ( // NewSessionService returns the Session Service func NewSessionService(cfg *config.CGRConfig, dm *DataDBService, - server *utils.Server, chrsChan, respChan, resChan, thsChan, stsChan, - supChan, attrsChan, cdrsChan, dispatcherChan, internalChan chan rpcclient.ClientConnector, - exitChan chan bool) servmanager.Service { + server *utils.Server, internalChan chan rpcclient.ClientConnector, + exitChan chan bool, connMgr *engine.ConnManager) servmanager.Service { return &SessionService{ - connChan: internalChan, - cfg: cfg, - dm: dm, - server: server, - chrsChan: chrsChan, - respChan: respChan, - resChan: resChan, - thsChan: thsChan, - stsChan: stsChan, - supChan: supChan, - attrsChan: attrsChan, - cdrsChan: cdrsChan, - dispatcherChan: dispatcherChan, - exitChan: exitChan, + connChan: internalChan, + cfg: cfg, + dm: dm, + server: server, + exitChan: exitChan, + connMgr: connMgr, } } // SessionService implements Service interface type SessionService struct { sync.RWMutex - cfg *config.CGRConfig - dm *DataDBService - server *utils.Server - chrsChan chan rpcclient.ClientConnector - respChan chan rpcclient.ClientConnector - resChan chan rpcclient.ClientConnector - thsChan chan rpcclient.ClientConnector - stsChan chan rpcclient.ClientConnector - supChan chan rpcclient.ClientConnector - attrsChan chan rpcclient.ClientConnector - cdrsChan chan rpcclient.ClientConnector - dispatcherChan chan rpcclient.ClientConnector - exitChan chan bool + cfg *config.CGRConfig + dm *DataDBService + server *utils.Server + exitChan chan bool sm *sessions.SessionS rpc *v1.SMGenericV1 @@ -77,6 +61,7 @@ type SessionService struct { // in order to stop the bircp server if necesary bircpEnabled bool + connMgr *engine.ConnManager } // Start should handle the sercive start @@ -87,55 +72,6 @@ func (smg *SessionService) Start() (err error) { smg.Lock() defer smg.Unlock() - var ralsConns, resSConns, threshSConns, statSConns, suplSConns, attrConns, cdrsConn, chargerSConn rpcclient.ClientConnector - - if chargerSConn, err = NewConnection(smg.cfg, smg.chrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ChargerSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ChargerS, err.Error())) - return - } - - if ralsConns, err = NewConnection(smg.cfg, smg.respChan, smg.dispatcherChan, smg.cfg.SessionSCfg().RALsConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ResponderS, err.Error())) - return - } - - if resSConns, err = NewConnection(smg.cfg, smg.resChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ResSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ResourceS, err.Error())) - return - } - - if threshSConns, err = NewConnection(smg.cfg, smg.thsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ThreshSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ThresholdS, err.Error())) - return - } - - if statSConns, err = NewConnection(smg.cfg, smg.stsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().StatSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.StatS, err.Error())) - return - } - - if suplSConns, err = NewConnection(smg.cfg, smg.supChan, smg.dispatcherChan, smg.cfg.SessionSCfg().SupplSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.SupplierS, err.Error())) - return - } - - if attrConns, err = NewConnection(smg.cfg, smg.attrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().AttrSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.AttributeS, err.Error())) - return - } - - if cdrsConn, err = NewConnection(smg.cfg, smg.cdrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().CDRsConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.CDRServer, err.Error())) - return - } sReplConns, err := sessions.NewSReplConns(smg.cfg.SessionSCfg().ReplicationConns, smg.cfg.GeneralCfg().Reconnects, smg.cfg.GeneralCfg().ConnectTimeout, @@ -146,9 +82,8 @@ func (smg *SessionService) Start() (err error) { return } - smg.sm = sessions.NewSessionS(smg.cfg, ralsConns, resSConns, threshSConns, - statSConns, suplSConns, attrConns, cdrsConn, chargerSConn, - sReplConns, smg.dm.GetDM()) + smg.sm = sessions.NewSessionS(smg.cfg, + sReplConns, smg.dm.GetDM(), smg.connMgr) //start sync session in a separate gorutine go func(sm *sessions.SessionS) { if err = sm.ListenAndServe(smg.exitChan); err != nil { @@ -194,55 +129,6 @@ func (smg *SessionService) GetIntenternalChan() (conn chan rpcclient.ClientConne // Reload handles the change of config func (smg *SessionService) Reload() (err error) { - var ralsConns, resSConns, threshSConns, statSConns, suplSConns, attrConns, cdrsConn, chargerSConn rpcclient.ClientConnector - - if chargerSConn, err = NewConnection(smg.cfg, smg.chrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ChargerSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ChargerS, err.Error())) - return - } - - if ralsConns, err = NewConnection(smg.cfg, smg.respChan, smg.dispatcherChan, smg.cfg.SessionSCfg().RALsConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ResponderS, err.Error())) - return - } - - if resSConns, err = NewConnection(smg.cfg, smg.resChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ResSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ResourceS, err.Error())) - return - } - - if threshSConns, err = NewConnection(smg.cfg, smg.thsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().ThreshSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.ThresholdS, err.Error())) - return - } - - if statSConns, err = NewConnection(smg.cfg, smg.stsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().StatSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.StatS, err.Error())) - return - } - - if suplSConns, err = NewConnection(smg.cfg, smg.supChan, smg.dispatcherChan, smg.cfg.SessionSCfg().SupplSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.SupplierS, err.Error())) - return - } - - if attrConns, err = NewConnection(smg.cfg, smg.attrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().AttrSConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.AttributeS, err.Error())) - return - } - - if cdrsConn, err = NewConnection(smg.cfg, smg.cdrsChan, smg.dispatcherChan, smg.cfg.SessionSCfg().CDRsConns); err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", - utils.SessionS, utils.CDRServer, err.Error())) - return - } sReplConns, err := sessions.NewSReplConns(smg.cfg.SessionSCfg().ReplicationConns, smg.cfg.GeneralCfg().Reconnects, smg.cfg.GeneralCfg().ConnectTimeout, @@ -253,14 +139,6 @@ func (smg *SessionService) Reload() (err error) { return } smg.Lock() - smg.sm.SetAttributeSConnection(attrConns) - smg.sm.SetChargerSConnection(chargerSConn) - smg.sm.SetRALsConnection(ralsConns) - smg.sm.SetResourceSConnection(resSConns) - smg.sm.SetThresholSConnection(threshSConns) - smg.sm.SetStatSConnection(statSConns) - smg.sm.SetSupplierSConnection(suplSConns) - smg.sm.SetCDRSConnection(cdrsConn) smg.sm.SetReplicationConnections(sReplConns) smg.Unlock() return diff --git a/services/sessions_it_test.go b/services/sessions_it_test.go index 3d747a268..65a883786 100644 --- a/services/sessions_it_test.go +++ b/services/sessions_it_test.go @@ -70,18 +70,16 @@ func TestSessionSReload(t *testing.T) { db := NewDataDBService(cfg) cfg.StorDbCfg().Type = utils.INTERNAL stordb := NewStorDBService(cfg) - 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) + chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) ralS := NewRalService(cfg, db, stordb, chS, filterSChan, server, - make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), make(chan rpcclient.RpcClientConnection, 1), + make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), + make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), schS, engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, make(chan rpcclient.ClientConnector, 1), - chrS.GetIntenternalChan(), ralS.GetResponder().GetIntenternalChan(), - nil, nil, nil, nil) - srv := NewSessionService(cfg, db, server, chrS.GetIntenternalChan(), - ralS.GetResponder().GetIntenternalChan(), nil, nil, nil, - nil, nil, cdrS.GetIntenternalChan(), nil, make(chan rpcclient.ClientConnector, 1), engineShutdown) + nil) + srv := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), engineShutdown, nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), srv, chrS, schS, ralS, cdrS, NewLoaderService(cfg, db, filterSChan, server, cacheSChan, nil, engineShutdown), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/stats_it_test.go b/services/stats_it_test.go index 062eab460..e57dcacf6 100644 --- a/services/stats_it_test.go +++ b/services/stats_it_test.go @@ -54,8 +54,8 @@ func TestStatSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) - sS := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + sS := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), tS, sS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/suppliers_it_test.go b/services/suppliers_it_test.go index dc6f2fc3c..f511b3af5 100644 --- a/services/suppliers_it_test.go +++ b/services/suppliers_it_test.go @@ -52,8 +52,8 @@ func TestSupplierSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - sts := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) - supS := NewSupplierService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1), nil) + sts := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + supS := NewSupplierService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) srvMngr.AddServices(NewConnManagerService(cfg, nil), supS, sts, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/services/thresholds_it_test.go b/services/thresholds_it_test.go index e2f1d733c..62f4c695c 100644 --- a/services/thresholds_it_test.go +++ b/services/thresholds_it_test.go @@ -49,7 +49,7 @@ func TestThresholdSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.RpcClientConnection, 1)) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) srvMngr.AddServices(NewConnManagerService(cfg, nil), tS, NewLoaderService(cfg, db, filterSChan, server, nil, nil, engineShutdown), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) diff --git a/sessions/sessions.go b/sessions/sessions.go index feb199f83..33a70961e 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -64,45 +64,15 @@ type SReplConn struct { } // NewSessionS constructs a new SessionS instance -func NewSessionS(cgrCfg *config.CGRConfig, ralS, resS, thdS, - statS, splS, attrS, cdrS, chargerS rpcclient.ClientConnector, - sReplConns []*SReplConn, dm *engine.DataManager) *SessionS { +func NewSessionS(cgrCfg *config.CGRConfig, + sReplConns []*SReplConn, dm *engine.DataManager, + connMgr *engine.ConnManager) *SessionS { cgrCfg.SessionSCfg().SessionIndexes[utils.OriginID] = true // Make sure we have indexing for OriginID since it is a requirement on prefix searching - if chargerS != nil && reflect.ValueOf(chargerS).IsNil() { - chargerS = nil - } - if ralS != nil && reflect.ValueOf(ralS).IsNil() { - ralS = nil - } - if resS != nil && reflect.ValueOf(resS).IsNil() { - resS = nil - } - if thdS != nil && reflect.ValueOf(thdS).IsNil() { - thdS = nil - } - if statS != nil && reflect.ValueOf(statS).IsNil() { - statS = nil - } - if splS != nil && reflect.ValueOf(splS).IsNil() { - splS = nil - } - if attrS != nil && reflect.ValueOf(attrS).IsNil() { - attrS = nil - } - if cdrS != nil && reflect.ValueOf(cdrS).IsNil() { - cdrS = nil - } + return &SessionS{ cgrCfg: cgrCfg, dm: dm, - chargerS: chargerS, - ralS: ralS, - resS: resS, - thdS: thdS, - statS: statS, - splS: splS, - attrS: attrS, - cdrS: cdrS, + connMgr: connMgr, sReplConns: sReplConns, biJClnts: make(map[rpcclient.ClientConnector]string), biJIDs: make(map[string]*biJClient), @@ -123,17 +93,9 @@ type biJClient struct { // SessionS represents the session service type SessionS struct { - cgrCfg *config.CGRConfig // Separate from smCfg since there can be multiple - dm *engine.DataManager - - chargerS rpcclient.ClientConnector - ralS rpcclient.ClientConnector // RALs connections - resS rpcclient.ClientConnector // ResourceS connections - thdS rpcclient.ClientConnector // ThresholdS connections - statS rpcclient.ClientConnector // StatS connections - splS rpcclient.ClientConnector // SupplierS connections - attrS rpcclient.ClientConnector // AttributeS connections - cdrS rpcclient.ClientConnector // CDR server connections + cgrCfg *config.CGRConfig // Separate from smCfg since there can be multiple + dm *engine.DataManager + connMgr *engine.ConnManager biJMux sync.RWMutex // mux protecting BI-JSON connections biJClnts map[rpcclient.ClientConnector]string // index BiJSONConnection so we can sync them later @@ -381,7 +343,7 @@ func (sS *SessionS) forceSTerminate(s *Session, extraDebit time.Duration, lastUs utils.SessionS, s.cgrID(), err.Error())) } // post the CDRs - if sS.cdrS != nil { + if len(sS.cgrCfg.SessionSCfg().CDRsConns) != 0 { if cgrEvs, err := s.asCGREvents(); err != nil { utils.Logger.Warning( fmt.Sprintf( @@ -400,7 +362,8 @@ func (sS *SessionS) forceSTerminate(s *Session, extraDebit time.Duration, lastUs engine.MapEvent(cgrEv.Event).GetStringIgnoreErrors(utils.RequestType)) { argsProc.Flags = append(argsProc.Flags, utils.MetaRALs) } - if err = sS.cdrS.Call(utils.CDRsV1ProcessEvent, argsProc, &reply); err != nil { + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().CDRsConns, + utils.CDRsV1ProcessEvent, argsProc, &reply); err != nil { utils.Logger.Warning( fmt.Sprintf( "<%s> could not post CDR for event %s, err: %s", @@ -410,7 +373,7 @@ func (sS *SessionS) forceSTerminate(s *Session, extraDebit time.Duration, lastUs } } // release the resources for the session - if sS.resS != nil && s.ResourceID != "" { + if len(sS.cgrCfg.SessionSCfg().ResSConns) != 0 && s.ResourceID != "" { var reply string argsRU := utils.ArgRSv1ResourceUsage{ CGREvent: &utils.CGREvent{ @@ -422,7 +385,7 @@ func (sS *SessionS) forceSTerminate(s *Session, extraDebit time.Duration, lastUs Units: 1, ArgDispatcher: s.ArgDispatcher, } - if err := sS.resS.Call( + if err := sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1ReleaseResources, argsRU, &reply); err != nil { utils.Logger.Warning( @@ -472,7 +435,7 @@ func (sS *SessionS) debitSession(s *Session, sRunIdx int, dur time.Duration, cd := sr.CD.Clone() argDsp := s.ArgDispatcher cc := new(engine.CallCost) - if err := sS.ralS.Call( + if err := sS.connMgr.Call(sS.cgrCfg.SessionSCfg().RALsConns, utils.ResponderMaxDebit, &engine.CallDescriptorWithArgDispatcher{ CallDescriptor: cd, @@ -626,7 +589,7 @@ func (sS *SessionS) refundSession(s *Session, sRunIdx int, rUsage time.Duration) Increments: incrmts, } var acnt engine.Account - if err = sS.ralS.Call(utils.ResponderRefundIncrements, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().RALsConns, utils.ResponderRefundIncrements, &engine.CallDescriptorWithArgDispatcher{CallDescriptor: cd, ArgDispatcher: s.ArgDispatcher}, &acnt); err != nil { return @@ -665,7 +628,7 @@ func (sS *SessionS) storeSCost(s *Session, sRunIdx int) (err error) { }, } var reply string - if err := sS.cdrS.Call(utils.CDRsV2StoreSessionCost, + if err := sS.connMgr.Call(sS.cgrCfg.SessionSCfg().CDRsConns, utils.CDRsV2StoreSessionCost, argSmCost, &reply); err != nil { if err == utils.ErrExists { utils.Logger.Warning( @@ -1080,7 +1043,7 @@ func (sS *SessionS) filterSessionsCount(sf *utils.SessionFilter, psv bool) (coun // forSession can only be called once per Session // not thread-safe since it should be called in init where there is no concurrency func (sS *SessionS) forkSession(s *Session) (err error) { - if sS.chargerS == nil { + if len(sS.cgrCfg.SessionSCfg().ChargerSConns) == 0 { return errors.New("ChargerS is disabled") } if len(s.SRuns) != 0 { @@ -1095,7 +1058,7 @@ func (sS *SessionS) forkSession(s *Session) (err error) { ArgDispatcher: s.ArgDispatcher, } var chrgrs []*engine.ChrgSProcessEventReply - if err = sS.chargerS.Call(utils.ChargerSv1ProcessEvent, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ChargerSConns, utils.ChargerSv1ProcessEvent, cgrEv, &chrgrs); err != nil { if err.Error() == utils.ErrNotFound.Error() { return utils.ErrNoActiveSession @@ -1368,7 +1331,7 @@ func (sS *SessionS) authEvent(tnt string, evStart engine.MapEvent) (maxUsage tim if !authReqs.HasField( sr.Event.GetStringIgnoreErrors(utils.RequestType)) { rplyMaxUsage = eventUsage - } else if err = sS.ralS.Call(utils.ResponderGetMaxSessionTime, + } else if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().RALsConns, utils.ResponderGetMaxSessionTime, &engine.CallDescriptorWithArgDispatcher{CallDescriptor: sr.CD, ArgDispatcher: s.ArgDispatcher}, &rplyMaxUsage); err != nil { return @@ -1460,6 +1423,7 @@ func (sS *SessionS) updateSession(s *Session, updtEv engine.MapEvent) (maxUsage // terminateSession will end a session from outside // calls endSession thread safe func (sS *SessionS) terminateSession(s *Session, tUsage, lastUsage *time.Duration, aTime *time.Time) (err error) { + utils.Logger.Debug("Enter in termSessions") s.Lock() err = sS.endSession(s, tUsage, lastUsage, aTime) s.Unlock() @@ -1471,6 +1435,7 @@ func (sS *SessionS) terminateSession(s *Session, tUsage, lastUsage *time.Duratio func (sS *SessionS) endSession(s *Session, tUsage, lastUsage *time.Duration, aTime *time.Time) (err error) { //check if we have replicate connection and close the session there defer sS.replicateSessions(s.CGRID, true, sS.sReplConns) + utils.Logger.Debug("enter in endSessions") sS.unregisterSession(s.CGRID, false) s.stopSTerminator() s.stopDebitLoops() @@ -1493,7 +1458,7 @@ func (sS *SessionS) endSession(s *Session, tUsage, lastUsage *time.Duration, aTi sr.CD.TimeEnd = sr.CD.TimeStart.Add(notCharged) sr.CD.DurationIndex += notCharged cc := new(engine.CallCost) - if err = sS.ralS.Call(utils.ResponderDebit, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().RALsConns, utils.ResponderDebit, &engine.CallDescriptorWithArgDispatcher{CallDescriptor: sr.CD, ArgDispatcher: s.ArgDispatcher}, cc); err == nil { sr.EventCost.Merge( @@ -1902,7 +1867,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.ClientConnector, } } if args.AuthorizeResources { - if sS.resS == nil { + if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } originID, _ := args.CGREvent.FieldAsString(utils.OriginID) @@ -1916,7 +1881,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.ClientConnector, Units: 1, ArgDispatcher: args.ArgDispatcher, } - if err = sS.resS.Call(utils.ResourceSv1AuthorizeResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1AuthorizeResources, attrRU, &allocMsg); err != nil { return utils.NewErrResourceS(err) } @@ -2167,7 +2132,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.ClientConnector, } } if args.AllocateResources { - if sS.resS == nil { + if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } if originID == "" { @@ -2180,13 +2145,14 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.ClientConnector, ArgDispatcher: args.ArgDispatcher, } var allocMessage string - if err = sS.resS.Call(utils.ResourceSv1AllocateResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1AllocateResources, attrRU, &allocMessage); err != nil { return utils.NewErrResourceS(err) } rply.ResourceAllocation = &allocMessage } if args.InitSession { + utils.Logger.Debug(fmt.Sprintf("RLASCONN : %+v", sS.cgrCfg.SessionSCfg().RALsConns)) var err error ev := engine.MapEvent(args.CGREvent.Event) dbtItvl := sS.cgrCfg.SessionSCfg().DebitInterval @@ -2550,7 +2516,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.ClientConnector, } } if args.ReleaseResources { - if sS.resS == nil { + if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } if originID == "" { @@ -2563,7 +2529,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.ClientConnector, Units: 1, ArgDispatcher: args.ArgDispatcher, } - if err = sS.resS.Call(utils.ResourceSv1ReleaseResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1ReleaseResources, argsRU, &reply); err != nil { return utils.NewErrResourceS(err) } @@ -2642,7 +2608,7 @@ func (sS *SessionS) BiRPCv1ProcessCDR(clnt rpcclient.ClientConnector, // found in cache s = sIface.(*Session) } else { // no cached session, CDR will be handled by CDRs - return sS.cdrS.Call(utils.CDRsV1ProcessEvent, + return sS.connMgr.Call(sS.cgrCfg.SessionSCfg().CDRsConns, utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{ Flags: []string{utils.MetaRALs}, CGREvent: *cgrEvWithArgDisp.CGREvent, @@ -2674,7 +2640,7 @@ func (sS *SessionS) BiRPCv1ProcessCDR(clnt rpcclient.ClientConnector, if mp := engine.MapEvent(cgrEv.Event); unratedReqs.HasField(mp.GetStringIgnoreErrors(utils.RequestType)) { // order additional rating for unrated request types argsProc.Flags = append(argsProc.Flags, fmt.Sprintf("%s:true", utils.MetaRALs)) } - if err = sS.cdrS.Call(utils.CDRsV1ProcessEvent, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().CDRsConns, utils.CDRsV1ProcessEvent, argsProc, rply); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> error <%s> posting CDR with CGRID: <%s>", @@ -2874,7 +2840,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(clnt rpcclient.ClientConnector, } } if args.AllocateResources { - if sS.resS == nil { + if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } if originID == "" { @@ -2887,7 +2853,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(clnt rpcclient.ClientConnector, ArgDispatcher: args.ArgDispatcher, } var allocMessage string - if err = sS.resS.Call(utils.ResourceSv1AllocateResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1AllocateResources, attrRU, &allocMessage); err != nil { return utils.NewErrResourceS(err) } @@ -3059,7 +3025,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector, } // check for *resources if argsFlagsWithParams.HasKey(utils.MetaResources) { - if sS.resS == nil { + if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } if originID == "" { @@ -3080,21 +3046,21 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector, return err } if resourceFlagsWithParams.HasKey(utils.MetaAuthorize) { - if err = sS.resS.Call(utils.ResourceSv1AuthorizeResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1AuthorizeResources, attrRU, &resMessage); err != nil { return utils.NewErrResourceS(err) } rply.ResourceMessage = &resMessage } if resourceFlagsWithParams.HasKey(utils.MetaAllocate) { - if err = sS.resS.Call(utils.ResourceSv1AllocateResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1AllocateResources, attrRU, &resMessage); err != nil { return utils.NewErrResourceS(err) } rply.ResourceMessage = &resMessage } if resourceFlagsWithParams.HasKey(utils.MetaRelease) { - if err = sS.resS.Call(utils.ResourceSv1ReleaseResources, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ResSConns, utils.ResourceSv1ReleaseResources, attrRU, &resMessage); err != nil { return utils.NewErrResourceS(err) } @@ -3355,7 +3321,7 @@ func (sS *SessionS) BiRPCv1DeactivateSessions(clnt rpcclient.ClientConnector, // processThreshold will receive the event and send it to ThresholdS to be processed func (sS *SessionS) processThreshold(cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, thIDs []string) (tIDs []string, err error) { - if sS.thdS == nil { + if len(sS.cgrCfg.SessionSCfg().ThreshSConns) == 0 { return tIDs, utils.NewErrNotConnected(utils.ThresholdS) } thEv := &engine.ArgsProcessEvent{ @@ -3368,13 +3334,13 @@ func (sS *SessionS) processThreshold(cgrEv *utils.CGREvent, argDisp *utils.ArgDi } //initialize the returned variable tIDs = make([]string, 0) - err = sS.thdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs) + err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ThreshSConns, utils.ThresholdSv1ProcessEvent, thEv, &tIDs) return } // processStats will receive the event and send it to StatS to be processed func (sS *SessionS) processStats(cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, stsIDs []string) (sIDs []string, err error) { - if sS.statS == nil { + if len(sS.cgrCfg.SessionSCfg().StatSConns) == 0 { return sIDs, utils.NewErrNotConnected(utils.StatS) } @@ -3388,14 +3354,14 @@ func (sS *SessionS) processStats(cgrEv *utils.CGREvent, argDisp *utils.ArgDispat } //initialize the returned variable sIDs = make([]string, 0) - err = sS.statS.Call(utils.StatSv1ProcessEvent, statArgs, &sIDs) + err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().StatSConns, utils.StatSv1ProcessEvent, statArgs, &sIDs) return } // getSuppliers will receive the event and send it to SupplierS to find the suppliers func (sS *SessionS) getSuppliers(cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, pag utils.Paginator, ignoreErrors bool, maxCost string) (splsReply engine.SortedSuppliers, err error) { - if sS.splS == nil { + if len(sS.cgrCfg.SessionSCfg().SupplSConns) == 0 { return splsReply, utils.NewErrNotConnected(utils.SupplierS) } if acd, has := cgrEv.Event[utils.ACD]; has { @@ -3408,7 +3374,7 @@ func (sS *SessionS) getSuppliers(cgrEv *utils.CGREvent, argDisp *utils.ArgDispat IgnoreErrors: ignoreErrors, MaxCost: maxCost, } - if err = sS.splS.Call(utils.SupplierSv1GetSuppliers, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().SupplSConns, utils.SupplierSv1GetSuppliers, sArgs, &splsReply); err != nil { return splsReply, utils.NewErrSupplierS(err) } @@ -3418,7 +3384,7 @@ func (sS *SessionS) getSuppliers(cgrEv *utils.CGREvent, argDisp *utils.ArgDispat // processAttributes will receive the event and send it to AttributeS to be processed func (sS *SessionS) processAttributes(cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, attrIDs []string) (rplyEv engine.AttrSProcessEventReply, err error) { - if sS.attrS == nil { + if len(sS.cgrCfg.SessionSCfg().AttrSConns) == 0 { return rplyEv, utils.NewErrNotConnected(utils.AttributeS) } attrArgs := &engine.AttrArgsProcessEvent{ @@ -3429,7 +3395,7 @@ func (sS *SessionS) processAttributes(cgrEv *utils.CGREvent, argDisp *utils.ArgD if len(attrIDs) != 0 { attrArgs.AttributeIDs = attrIDs } - if err = sS.attrS.Call(utils.AttributeSv1ProcessEvent, + if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().AttrSConns, utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err != nil { return } @@ -3539,78 +3505,6 @@ func (sS *SessionS) BiRPCV1ProcessCDR(clnt rpcclient.ClientConnector, rply) } -// SetAttributeSConnection sets the new connection to the attribute service -// only used on reload -func (sS *SessionS) SetAttributeSConnection(attrS rpcclient.ClientConnector) { - if attrS != nil && reflect.ValueOf(attrS).IsNil() { - attrS = nil - } - sS.attrS = attrS -} - -// SetThresholSConnection sets the new connection to the threshold service -// only used on reload -func (sS *SessionS) SetThresholSConnection(thdS rpcclient.ClientConnector) { - if thdS != nil && reflect.ValueOf(thdS).IsNil() { - thdS = nil - } - sS.thdS = thdS -} - -// SetStatSConnection sets the new connection to the stat service -// only used on reload -func (sS *SessionS) SetStatSConnection(stS rpcclient.ClientConnector) { - if stS != nil && reflect.ValueOf(stS).IsNil() { - stS = nil - } - sS.statS = stS -} - -// SetChargerSConnection sets the new connection to the charger service -// only used on reload -func (sS *SessionS) SetChargerSConnection(chS rpcclient.ClientConnector) { - if chS != nil && reflect.ValueOf(chS).IsNil() { - chS = nil - } - sS.chargerS = chS -} - -// SetRALsConnection sets the new connection to the RAL service -// only used on reload -func (sS *SessionS) SetRALsConnection(rls rpcclient.ClientConnector) { - if rls != nil && reflect.ValueOf(rls).IsNil() { - rls = nil - } - sS.ralS = rls -} - -// SetResourceSConnection sets the new connection to the resource service -// only used on reload -func (sS *SessionS) SetResourceSConnection(rS rpcclient.ClientConnector) { - if rS != nil && reflect.ValueOf(rS).IsNil() { - rS = nil - } - sS.resS = rS -} - -// SetSupplierSConnection sets the new connection to the supplier service -// only used on reload -func (sS *SessionS) SetSupplierSConnection(splS rpcclient.ClientConnector) { - if splS != nil && reflect.ValueOf(splS).IsNil() { - splS = nil - } - sS.splS = splS -} - -// SetCDRSConnection sets the new connection to the CDR server -// only used on reload -func (sS *SessionS) SetCDRSConnection(cdrS rpcclient.ClientConnector) { - if cdrS != nil && reflect.ValueOf(cdrS).IsNil() { - cdrS = nil - } - sS.cdrS = cdrS -} - // SetReplicationConnections sets the new connections to the replictes sessions // only used on reload func (sS *SessionS) SetReplicationConnections(sReplConns []*SReplConn) { diff --git a/sessions/sessions_test.go b/sessions/sessions_test.go index 313a914c1..3cd098a12 100644 --- a/sessions/sessions_test.go +++ b/sessions/sessions_test.go @@ -60,7 +60,7 @@ func TestSessionSIndexAndUnindexSessions(t *testing.T) { "Extra3": true, "Extra4": true, } - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -382,7 +382,7 @@ func TestSessionSIndexAndUnindexSessions(t *testing.T) { func TestSessionSRegisterAndUnregisterASessions(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sSEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -603,7 +603,7 @@ func TestSessionSRegisterAndUnregisterASessions(t *testing.T) { func TestSessionSRegisterAndUnregisterPSessions(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sSEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -1378,7 +1378,7 @@ func TestV1ProcessEventReplyAsNavigableMap(t *testing.T) { func TestSessionStransitSState(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sSEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -1425,7 +1425,7 @@ func TestSessionStransitSState(t *testing.T) { func TestSessionSrelocateSessionS(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sSEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -1567,7 +1567,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) { func TestSessionSGetIndexedFilters(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() mpStr := engine.NewInternalDB(nil, nil) - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil)) + sS := NewSessionS(sSCfg, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil), nil) expIndx := map[string][]string{} expUindx := []*engine.FilterRule{ &engine.FilterRule{ @@ -1585,7 +1585,7 @@ func TestSessionSGetIndexedFilters(t *testing.T) { sSCfg.SessionSCfg().SessionIndexes = utils.StringMap{ "ToR": true, } - sS = NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil)) + sS = NewSessionS(sSCfg, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil), nil) expIndx = map[string][]string{(utils.DynamicDataPrefix + utils.ToR): []string{utils.VOICE}} expUindx = nil if rplyindx, rplyUnindx := sS.getIndexedFilters("", fltrs); !reflect.DeepEqual(expIndx, rplyindx) { @@ -1602,7 +1602,7 @@ func TestSessionSGetIndexedFilters(t *testing.T) { ExpiryTime: time.Now().Add(-time.Hour), }, }) - sS = NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil)) + sS = NewSessionS(sSCfg, nil, engine.NewDataManager(mpStr, config.CgrConfig().CacheCfg(), nil, nil), nil) expIndx = map[string][]string{} expUindx = nil fltrs = []string{"FLTR1", "FLTR2"} @@ -1619,7 +1619,7 @@ func TestSessionSgetSessionIDsMatchingIndexes(t *testing.T) { sSCfg.SessionSCfg().SessionIndexes = utils.StringMap{ "ToR": true, } - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -1672,7 +1672,7 @@ func TestSessionSgetSessionIDsMatchingIndexes(t *testing.T) { "ToR": true, "Extra3": true, } - sS = NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS = NewSessionS(sSCfg, nil, nil, nil) sS.indexSession(session, false) indx = map[string][]string{ "~ToR": []string{utils.VOICE, utils.DATA}, @@ -1706,7 +1706,7 @@ func TestSessionSgetSessionIDsMatchingIndexes(t *testing.T) { "ToR": true, "Extra2": true, } - sS = NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS = NewSessionS(sSCfg, nil, nil, nil) sS.indexSession(session, true) indx = map[string][]string{ "~ToR": []string{utils.VOICE, utils.DATA}, @@ -1732,22 +1732,9 @@ func (*testRPCClientConnection) Call(string, interface{}, interface{}) error { r func TestNewSessionS(t *testing.T) { cgrCGF, _ := config.NewDefaultCGRConfig() - var rpc rpcclient.ClientConnector - var ttest *testRPCClientConnection - - rpc = ttest eOut := &SessionS{ cgrCfg: cgrCGF, dm: nil, - chargerS: nil, - ralS: nil, - resS: nil, - thdS: nil, - statS: nil, - splS: nil, - attrS: nil, - cdrS: nil, - sReplConns: nil, biJClnts: make(map[rpcclient.ClientConnector]string), biJIDs: make(map[string]*biJClient), aSessions: make(map[string]*Session), @@ -1757,7 +1744,7 @@ func TestNewSessionS(t *testing.T) { pSessionsIdx: make(map[string]map[string]map[string]utils.StringMap), pSessionsRIdx: make(map[string][]*riFieldNameVal), } - sS := NewSessionS(cgrCGF, rpc, rpc, rpc, rpc, rpc, rpc, rpc, rpc, nil, nil) + sS := NewSessionS(cgrCGF, nil, nil, nil) if !reflect.DeepEqual(sS, eOut) { t.Errorf("Expected %s , received: %s", utils.ToJSON(sS), utils.ToJSON(eOut)) } @@ -1918,7 +1905,7 @@ func TestV1ProcessMessageArgsParseFlags(t *testing.T) { func TestSessionSgetSession(t *testing.T) { sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + sS := NewSessionS(sSCfg, nil, nil, nil) sSEv := engine.NewMapEvent(map[string]interface{}{ utils.EVENT_NAME: "TEST_EVENT", utils.ToR: "*voice", @@ -1960,105 +1947,3 @@ func TestSessionSgetSession(t *testing.T) { } } - -func TestSessionsSetConnections(t *testing.T) { - sSCfg, _ := config.NewDefaultCGRConfig() - sS := NewSessionS(sSCfg, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) - var ttest *testRPCClientConnection - //normal check AttributeS - sS.SetAttributeSConnection(new(testRPCClientConnection)) - if sS.attrS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.attrS) - } - //empty check AttributeS - sS.SetAttributeSConnection(ttest) - if sS.attrS != nil { - t.Errorf("Expecting nil, received: %+v", sS.attrS) - } - //normal check ThresholS - sS.SetThresholSConnection(new(testRPCClientConnection)) - if sS.thdS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.thdS) - } - //empty check ThresholS - sS.SetThresholSConnection(ttest) - if sS.thdS != nil { - t.Errorf("Expecting nil, received: %+v", sS.thdS) - } - //normal check StatS - sS.SetStatSConnection(new(testRPCClientConnection)) - if sS.statS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.statS) - } - //empty check StatS - sS.SetStatSConnection(ttest) - if sS.statS != nil { - t.Errorf("Expecting nil, received: %+v", sS.statS) - } - //normal check ChargerS - sS.SetChargerSConnection(new(testRPCClientConnection)) - if sS.chargerS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.chargerS) - } - //empty check ChargerS - sS.SetChargerSConnection(ttest) - if sS.chargerS != nil { - t.Errorf("Expecting nil, received: %+v", sS.chargerS) - } - //normal check RALs - sS.SetRALsConnection(new(testRPCClientConnection)) - if sS.ralS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.ralS) - } - //empty check RALs - sS.SetRALsConnection(ttest) - if sS.ralS != nil { - t.Errorf("Expecting nil, received: %+v", sS.ralS) - } - //normal check ResourceS - sS.SetResourceSConnection(new(testRPCClientConnection)) - if sS.resS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.resS) - } - //empty check ResourceS - sS.SetResourceSConnection(ttest) - if sS.resS != nil { - t.Errorf("Expecting nil, received: %+v", sS.resS) - } - //normal check SupplierS - sS.SetSupplierSConnection(new(testRPCClientConnection)) - if sS.splS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.splS) - } - //empty check SupplierS - sS.SetSupplierSConnection(ttest) - if sS.splS != nil { - t.Errorf("Expecting nil, received: %+v", sS.splS) - } - //normal check CDRS - sS.SetCDRSConnection(new(testRPCClientConnection)) - if sS.cdrS == nil { - t.Errorf("Expecting %+v, received: %+v", new(testRPCClientConnection), sS.cdrS) - } - //empty check CDRS - sS.SetCDRSConnection(ttest) - if sS.cdrS != nil { - t.Errorf("Expecting nil, received: %+v", sS.cdrS) - } - //normal check Replication - sReplConn := []*SReplConn{ - &SReplConn{ - Connection: new(testRPCClientConnection), - Synchronous: true, - }, - } - sS.SetReplicationConnections(sReplConn) - if sS.sReplConns == nil { - t.Errorf("Expecting %+v, received: %+v", sReplConn, sS.sReplConns) - } - //empty check Replication - sS.SetReplicationConnections(nil) - if sS.sReplConns != nil { - t.Errorf("Expecting nil, received: %+v", sS.sReplConns) - } -}