From 8369c3829db860d5ec727181a276fe121b6331ed Mon Sep 17 00:00:00 2001 From: DanB Date: Sun, 7 Aug 2016 17:58:12 +0200 Subject: [PATCH] Adding RLsConns into SMFreeSWITCH --- cmd/cgr-engine/cgr-engine.go | 17 +++++++++++++---- config/config.go | 5 +++++ sessionmanager/fssessionmanager.go | 4 +++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index a9b654120..8392ccd08 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -202,9 +202,9 @@ func startDiameterAgent(internalSMGChan, internalPubSubSChan chan rpcclient.RpcC exitChan <- true } -func startSmFreeSWITCH(internalRaterChan, internalCDRSChan chan rpcclient.RpcClientConnection, cdrDb engine.CdrStorage, exitChan chan bool) { +func startSmFreeSWITCH(internalRaterChan, internalCDRSChan, rlsChan chan rpcclient.RpcClientConnection, cdrDb engine.CdrStorage, exitChan chan bool) { utils.Logger.Info("Starting CGRateS SMFreeSWITCH service.") - var ralsConn, cdrsConn *rpcclient.RpcClientPool + var ralsConn, cdrsConn, rlsConn *rpcclient.RpcClientPool if len(cfg.SmFsConfig.RALsConns) != 0 { ralsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, cfg.SmFsConfig.RALsConns, internalRaterChan, cfg.InternalTtl) @@ -223,7 +223,16 @@ func startSmFreeSWITCH(internalRaterChan, internalCDRSChan chan rpcclient.RpcCli return } } - sm := sessionmanager.NewFSSessionManager(cfg.SmFsConfig, ralsConn, cdrsConn, cfg.DefaultTimezone) + if len(cfg.SmFsConfig.RLsConns) != 0 { + cdrsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, + cfg.SmFsConfig.RLsConns, rlsChan, cfg.InternalTtl) + if err != nil { + utils.Logger.Crit(fmt.Sprintf(" Could not connect to RLs: %s", err.Error())) + exitChan <- true + return + } + } + sm := sessionmanager.NewFSSessionManager(cfg.SmFsConfig, ralsConn, cdrsConn, rlsConn, cfg.DefaultTimezone) smRpc.SMs = append(smRpc.SMs, sm) if err = sm.Connect(); err != nil { utils.Logger.Err(fmt.Sprintf(" error: %s!", err)) @@ -640,7 +649,7 @@ func main() { } // Start SM-FreeSWITCH if cfg.SmFsConfig.Enabled { - go startSmFreeSWITCH(internalRaterChan, internalCdrSChan, cdrDb, exitChan) + go startSmFreeSWITCH(internalRaterChan, internalCdrSChan, internalRLSChan, cdrDb, exitChan) // close all sessions on shutdown go shutdownSessionmanagerSingnalHandler(exitChan) } diff --git a/config/config.go b/config/config.go index 4d0a197ea..36d62db9c 100644 --- a/config/config.go +++ b/config/config.go @@ -388,6 +388,11 @@ func (self *CGRConfig) checkConfigSanity() error { return errors.New("CDRS not enabled but referenced by SMFreeSWITCH component") } } + for _, smFSRLsConn := range self.SmFsConfig.RLsConns { + if smFSRLsConn.Address == utils.MetaInternal && !self.resourceLimiterCfg.Enabled { + return errors.New("RLs not enabled but referenced by SMFreeSWITCH component") + } + } } // SM-Kamailio checks if self.SmKamConfig.Enabled { diff --git a/sessionmanager/fssessionmanager.go b/sessionmanager/fssessionmanager.go index e7dc3184e..13014e1a9 100644 --- a/sessionmanager/fssessionmanager.go +++ b/sessionmanager/fssessionmanager.go @@ -33,13 +33,14 @@ import ( "github.com/cgrates/rpcclient" ) -func NewFSSessionManager(smFsConfig *config.SmFsConfig, rater, cdrs rpcclient.RpcClientConnection, timezone string) *FSSessionManager { +func NewFSSessionManager(smFsConfig *config.SmFsConfig, rater, cdrs, rls rpcclient.RpcClientConnection, timezone string) *FSSessionManager { return &FSSessionManager{ cfg: smFsConfig, conns: make(map[string]*fsock.FSock), senderPools: make(map[string]*fsock.FSockPool), rater: rater, cdrsrv: cdrs, + rls: rls, sessions: NewSessions(), timezone: timezone, } @@ -53,6 +54,7 @@ type FSSessionManager struct { senderPools map[string]*fsock.FSockPool // Keep sender pools here rater rpcclient.RpcClientConnection cdrsrv rpcclient.RpcClientConnection + rls rpcclient.RpcClientConnection sessions *Sessions timezone string