diff --git a/agents/dmtagent.go b/agents/dmtagent.go index f8c6e4a67..5af5f2571 100644 --- a/agents/dmtagent.go +++ b/agents/dmtagent.go @@ -29,7 +29,7 @@ import ( "github.com/fiorix/go-diameter/diam/sm" ) -func NewDiameterAgent(cgrCfg *config.CGRConfig, smg *rpcclient.RpcClient) (*DiameterAgent, error) { +func NewDiameterAgent(cgrCfg *config.CGRConfig, smg rpcclient.RpcClientConnection) (*DiameterAgent, error) { da := &DiameterAgent{cgrCfg: cgrCfg, smg: smg} dictsDir := cgrCfg.DiameterAgentCfg().DictionariesDir if len(dictsDir) != 0 { @@ -42,7 +42,7 @@ func NewDiameterAgent(cgrCfg *config.CGRConfig, smg *rpcclient.RpcClient) (*Diam type DiameterAgent struct { cgrCfg *config.CGRConfig - smg *rpcclient.RpcClient // Connection towards CGR-SMG component + smg rpcclient.RpcClientConnection // Connection towards CGR-SMG component } // Creates the message handlers diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 5ac4753a4..04fe96494 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -143,7 +143,7 @@ func startSmGeneric(internalSMGChan chan rpcclient.RpcClientConnection, internal var client *rpcclient.RpcClient var err error // Connect to rater - for _, raterCfg := range cfg.SmGenericConfig.HaRater { + for _, raterCfg := range cfg.SmGenericConfig.RaterConns { if raterCfg.Server == utils.INTERNAL { resp := <-internalRaterChan raterConn.AddClient(resp) @@ -159,10 +159,10 @@ func startSmGeneric(internalSMGChan chan rpcclient.RpcClientConnection, internal } } // Connect to CDRS - if reflect.DeepEqual(cfg.SmGenericConfig.HaCdrs, cfg.SmGenericConfig.HaRater) { + if reflect.DeepEqual(cfg.SmGenericConfig.CdrsConns, cfg.SmGenericConfig.RaterConns) { cdrsConn = raterConn - } else if len(cfg.SmGenericConfig.HaCdrs) != 0 { - for _, cdrsCfg := range cfg.SmGenericConfig.HaCdrs { + } else if len(cfg.SmGenericConfig.CdrsConns) != 0 { + for _, cdrsCfg := range cfg.SmGenericConfig.CdrsConns { if cdrsCfg.Server == utils.INTERNAL { resp := <-internalRaterChan cdrsConn.AddClient(client) @@ -199,19 +199,24 @@ func startSmGeneric(internalSMGChan chan rpcclient.RpcClientConnection, internal func startDiameterAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitChan chan bool) { utils.Logger.Info("Starting CGRateS DiameterAgent service.") - var smgConn *rpcclient.RpcClient + smgConn := rpcclient.NewRpcClientPool(rpcclient.POOL_FIRST) + var client *rpcclient.RpcClient var err error - if cfg.DiameterAgentCfg().SMGeneric == utils.INTERNAL { - smgRpc := <-internalSMGChan - internalSMGChan <- smgRpc - smgConn, err = rpcclient.NewRpcClient("", "", 0, 0, rpcclient.INTERNAL_RPC, smgRpc) - } else { - smgConn, err = rpcclient.NewRpcClient("tcp", cfg.DiameterAgentCfg().SMGeneric, cfg.ConnectAttempts, cfg.Reconnects, utils.GOB, nil) - } - if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to SMG: %s", err.Error())) - exitChan <- true - return + for _, smgCfg := range cfg.DiameterAgentCfg().SMGenericConns { + if smgCfg.Server == utils.INTERNAL { + smgRpc := <-internalSMGChan + internalSMGChan <- smgRpc + client, _ = rpcclient.NewRpcClient("", "", 0, 0, rpcclient.INTERNAL_RPC, smgRpc) + smgConn.AddClient(client) + } else { + client, err = rpcclient.NewRpcClient("tcp", smgCfg.Server, cfg.ConnectAttempts, cfg.Reconnects, utils.GOB, nil) + if err != nil { + utils.Logger.Crit(fmt.Sprintf(" Could not connect to SMG: %s", err.Error())) + exitChan <- true + return + } + smgConn.AddClient(client) + } } da, err := agents.NewDiameterAgent(cfg, smgConn) if err != nil { @@ -232,7 +237,7 @@ func startSmFreeSWITCH(internalRaterChan chan *engine.Responder, cdrDb engine.Cd var client *rpcclient.RpcClient var err error // Connect to rater - for _, raterCfg := range cfg.SmFsConfig.HaRater { + for _, raterCfg := range cfg.SmFsConfig.RaterConns { if raterCfg.Server == utils.INTERNAL { resp := <-internalRaterChan raterConn.AddClient(resp) @@ -248,10 +253,10 @@ func startSmFreeSWITCH(internalRaterChan chan *engine.Responder, cdrDb engine.Cd } } // Connect to CDRS - if reflect.DeepEqual(cfg.SmFsConfig.HaCdrs, cfg.SmFsConfig.HaRater) { + if reflect.DeepEqual(cfg.SmFsConfig.CdrsConns, cfg.SmFsConfig.RaterConns) { cdrsConn = raterConn - } else if len(cfg.SmFsConfig.HaCdrs) != 0 { - for _, cdrsCfg := range cfg.SmFsConfig.HaCdrs { + } else if len(cfg.SmFsConfig.CdrsConns) != 0 { + for _, cdrsCfg := range cfg.SmFsConfig.CdrsConns { if cdrsCfg.Server == utils.INTERNAL { resp := <-internalRaterChan cdrsConn.AddClient(resp) @@ -282,7 +287,7 @@ func startSmKamailio(internalRaterChan chan *engine.Responder, cdrDb engine.CdrS var client *rpcclient.RpcClient var err error // Connect to rater - for _, raterCfg := range cfg.SmKamConfig.HaRater { + for _, raterCfg := range cfg.SmKamConfig.RaterConns { if raterCfg.Server == utils.INTERNAL { resp := <-internalRaterChan raterConn.AddClient(resp) @@ -298,10 +303,10 @@ func startSmKamailio(internalRaterChan chan *engine.Responder, cdrDb engine.CdrS } } // Connect to CDRS - if reflect.DeepEqual(cfg.SmKamConfig.HaCdrs, cfg.SmKamConfig.HaRater) { + if reflect.DeepEqual(cfg.SmKamConfig.CdrsConns, cfg.SmKamConfig.RaterConns) { cdrsConn = raterConn - } else if len(cfg.SmKamConfig.HaCdrs) != 0 { - for _, cdrsCfg := range cfg.SmKamConfig.HaCdrs { + } else if len(cfg.SmKamConfig.CdrsConns) != 0 { + for _, cdrsCfg := range cfg.SmKamConfig.CdrsConns { if cdrsCfg.Server == utils.INTERNAL { resp := <-internalRaterChan cdrsConn.AddClient(resp) @@ -332,7 +337,7 @@ func startSmOpenSIPS(internalRaterChan chan *engine.Responder, cdrDb engine.CdrS var client *rpcclient.RpcClient var err error // Connect to rater - for _, raterCfg := range cfg.SmOsipsConfig.HaRater { + for _, raterCfg := range cfg.SmOsipsConfig.RaterConns { if raterCfg.Server == utils.INTERNAL { resp := <-internalRaterChan raterConn.AddClient(resp) @@ -348,10 +353,10 @@ func startSmOpenSIPS(internalRaterChan chan *engine.Responder, cdrDb engine.CdrS } } // Connect to CDRS - if reflect.DeepEqual(cfg.SmOsipsConfig.HaCdrs, cfg.SmOsipsConfig.HaRater) { + if reflect.DeepEqual(cfg.SmOsipsConfig.CdrsConns, cfg.SmOsipsConfig.RaterConns) { cdrsConn = raterConn - } else if len(cfg.SmOsipsConfig.HaCdrs) != 0 { - for _, cdrsCfg := range cfg.SmOsipsConfig.HaCdrs { + } else if len(cfg.SmOsipsConfig.CdrsConns) != 0 { + for _, cdrsCfg := range cfg.SmOsipsConfig.CdrsConns { if cdrsCfg.Server == utils.INTERNAL { resp := <-internalRaterChan cdrsConn.AddClient(resp) diff --git a/config/config.go b/config/config.go index 0be3b935d..bafba8128 100644 --- a/config/config.go +++ b/config/config.go @@ -320,67 +320,67 @@ func (self *CGRConfig) checkConfigSanity() error { } // SM-Generic checks if self.SmGenericConfig.Enabled { - if len(self.SmGenericConfig.HaRater) == 0 { + if len(self.SmGenericConfig.RaterConns) == 0 { return errors.New("Rater definition is mandatory!") } - if len(self.SmGenericConfig.HaCdrs) == 0 { + if len(self.SmGenericConfig.CdrsConns) == 0 { return errors.New("Cdrs definition is mandatory!") } - if self.SmGenericConfig.HaRater[0].Server == utils.INTERNAL && !self.RaterEnabled { + if self.SmGenericConfig.RaterConns[0].Server == utils.INTERNAL && !self.RaterEnabled { return errors.New("Rater not enabled but requested by SM-Generic component.") } - if self.SmGenericConfig.HaCdrs[0].Server == utils.INTERNAL && !self.CDRSEnabled { + if self.SmGenericConfig.CdrsConns[0].Server == utils.INTERNAL && !self.CDRSEnabled { return errors.New("CDRS not enabled but referenced by SM-Generic component") } } // SM-FreeSWITCH checks if self.SmFsConfig.Enabled { - if len(self.SmFsConfig.HaRater) == 0 { + if len(self.SmFsConfig.RaterConns) == 0 { return errors.New("Rater definition is mandatory!") } - if len(self.SmFsConfig.HaCdrs) == 0 { + if len(self.SmFsConfig.CdrsConns) == 0 { return errors.New("Cdrs definition is mandatory!") } - if self.SmFsConfig.HaRater[0].Server == utils.INTERNAL && !self.RaterEnabled { + if self.SmFsConfig.RaterConns[0].Server == utils.INTERNAL && !self.RaterEnabled { return errors.New("Rater not enabled but requested by SM-FreeSWITCH component.") } - if self.SmFsConfig.HaCdrs[0].Server == utils.INTERNAL && !self.CDRSEnabled { + if self.SmFsConfig.CdrsConns[0].Server == utils.INTERNAL && !self.CDRSEnabled { return errors.New("CDRS not enabled but referenced by SM-FreeSWITCH component") } } // SM-Kamailio checks if self.SmKamConfig.Enabled { - if len(self.SmKamConfig.HaRater) == 0 { + if len(self.SmKamConfig.RaterConns) == 0 { return errors.New("Rater definition is mandatory!") } - if len(self.SmKamConfig.HaCdrs) == 0 { + if len(self.SmKamConfig.CdrsConns) == 0 { return errors.New("Cdrs definition is mandatory!") } - if self.SmKamConfig.HaRater[0].Server == utils.INTERNAL && !self.RaterEnabled { + if self.SmKamConfig.RaterConns[0].Server == utils.INTERNAL && !self.RaterEnabled { return errors.New("Rater not enabled but requested by SM-Kamailio component.") } - if self.SmKamConfig.HaCdrs[0].Server == utils.INTERNAL && !self.CDRSEnabled { + if self.SmKamConfig.CdrsConns[0].Server == utils.INTERNAL && !self.CDRSEnabled { return errors.New("CDRS not enabled but referenced by SM-Kamailio component") } } // SM-OpenSIPS checks if self.SmOsipsConfig.Enabled { - if len(self.SmOsipsConfig.HaRater) == 0 { + if len(self.SmOsipsConfig.RaterConns) == 0 { return errors.New("Rater definition is mandatory!") } - if len(self.SmOsipsConfig.HaCdrs) == 0 { + if len(self.SmOsipsConfig.CdrsConns) == 0 { return errors.New("Cdrs definition is mandatory!") } - if self.SmOsipsConfig.HaRater[0].Server == utils.INTERNAL && !self.RaterEnabled { + if self.SmOsipsConfig.RaterConns[0].Server == utils.INTERNAL && !self.RaterEnabled { return errors.New("Rater not enabled but requested by SM-OpenSIPS component.") } - if self.SmOsipsConfig.HaCdrs[0].Server == utils.INTERNAL && !self.CDRSEnabled { + if self.SmOsipsConfig.CdrsConns[0].Server == utils.INTERNAL && !self.CDRSEnabled { return errors.New("CDRS not enabled but referenced by SM-OpenSIPS component") } } // DAgent checks if self.diameterAgentCfg.Enabled { - if self.diameterAgentCfg.SMGeneric == utils.INTERNAL && !self.SmGenericConfig.Enabled { + if self.diameterAgentCfg.SMGenericConns[0].Server == utils.INTERNAL && !self.SmGenericConfig.Enabled { return errors.New("SMGeneric not enabled but referenced by DiameterAgent component") } } diff --git a/config/config_defaults.go b/config/config_defaults.go index d8c3e153c..2b9542248 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -201,10 +201,10 @@ const CGRATES_CFG_JSON = ` "sm_generic": { "enabled": false, // starts SessionManager service: "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests - "ha_rater": [ + "rater_conns": [ {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> ], - "ha_cdrs": [ + "cdrs_conns": [ {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing ], "debit_interval": "0s", // interval to perform debits on. @@ -215,10 +215,10 @@ const CGRATES_CFG_JSON = ` "sm_freeswitch": { "enabled": false, // starts SessionManager service: - "ha_rater": [ + "rater_conns": [ {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> ], - "ha_cdrs": [ + "cdrs_conns": [ {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing ], "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -240,10 +240,10 @@ const CGRATES_CFG_JSON = ` "sm_kamailio": { "enabled": false, // starts SessionManager service: - "ha_rater": [ + "rater_conns": [ {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> ], - "ha_cdrs": [ + "cdrs_conns": [ {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing ], "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -259,10 +259,10 @@ const CGRATES_CFG_JSON = ` "sm_opensips": { "enabled": false, // starts SessionManager service: "listen_udp": "127.0.0.1:2020", // address where to listen for datagram events coming from OpenSIPS - "ha_rater": [ + "rater_conns": [ {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> ], - "ha_cdrs": [ + "cdrs_conns": [ {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing ], "reconnects": 5, // number of reconnects if connection is lost @@ -279,7 +279,9 @@ const CGRATES_CFG_JSON = ` "enabled": false, // enables the diameter agent: "listen": "127.0.0.1:3868", // address where to listen for diameter requests "dictionaries_dir": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load - "sm_generic": "internal", // connection towards SMG component for session management + "sm_generic_conns": [ + {"server": "internal"} // connection towards SMG component for session management + ], "debit_interval": "5m", // interval for CCR updates "timezone": "", // timezone for timestamps where not specified, empty for general defaults <""|UTC|Local|$IANA_TZ_DB> "dialect": "huawei", // the diameter dialect used in the communication, supported: diff --git a/config/config_json_test.go b/config/config_json_test.go index 5784001c7..9bb995366 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -328,11 +328,11 @@ func TestSmGenericJsonCfg(t *testing.T) { eCfg := &SmGenericJsonCfg{ Enabled: utils.BoolPointer(false), Listen_bijson: utils.StringPointer("127.0.0.1:2014"), - Ha_rater: &[]*HaPoolJsonCfg{ + Rater_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, - Ha_cdrs: &[]*HaPoolJsonCfg{ + Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, @@ -350,11 +350,11 @@ func TestSmGenericJsonCfg(t *testing.T) { func TestSmFsJsonCfg(t *testing.T) { eCfg := &SmFsJsonCfg{ Enabled: utils.BoolPointer(false), - Ha_rater: &[]*HaPoolJsonCfg{ + Rater_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, - Ha_cdrs: &[]*HaPoolJsonCfg{ + Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, @@ -386,11 +386,11 @@ func TestSmFsJsonCfg(t *testing.T) { func TestSmKamJsonCfg(t *testing.T) { eCfg := &SmKamJsonCfg{ Enabled: utils.BoolPointer(false), - Ha_rater: &[]*HaPoolJsonCfg{ + Rater_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, - Ha_cdrs: &[]*HaPoolJsonCfg{ + Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, @@ -416,11 +416,11 @@ func TestSmOsipsJsonCfg(t *testing.T) { eCfg := &SmOsipsJsonCfg{ Enabled: utils.BoolPointer(false), Listen_udp: utils.StringPointer("127.0.0.1:2020"), - Ha_rater: &[]*HaPoolJsonCfg{ + Rater_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, - Ha_cdrs: &[]*HaPoolJsonCfg{ + Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Server: utils.StringPointer("internal"), }}, @@ -443,14 +443,17 @@ func TestDiameterAgentJsonCfg(t *testing.T) { Enabled: utils.BoolPointer(false), Listen: utils.StringPointer("127.0.0.1:3868"), Dictionaries_dir: utils.StringPointer("/usr/share/cgrates/diameter/dict/"), - Sm_generic: utils.StringPointer("internal"), - Debit_interval: utils.StringPointer("5m"), - Timezone: utils.StringPointer(""), - Dialect: utils.StringPointer("huawei"), - Origin_host: utils.StringPointer("CGR-DA"), - Origin_realm: utils.StringPointer("cgrates.org"), - Vendor_id: utils.IntPointer(0), - Product_name: utils.StringPointer("CGRateS"), + Sm_generic_conns: &[]*HaPoolJsonCfg{ + &HaPoolJsonCfg{ + Server: utils.StringPointer("internal"), + }}, + Debit_interval: utils.StringPointer("5m"), + Timezone: utils.StringPointer(""), + Dialect: utils.StringPointer("huawei"), + Origin_host: utils.StringPointer("CGR-DA"), + Origin_realm: utils.StringPointer("cgrates.org"), + Vendor_id: utils.IntPointer(0), + Product_name: utils.StringPointer("CGRateS"), Request_processors: &[]*DARequestProcessorJsnCfg{ &DARequestProcessorJsnCfg{ Id: utils.StringPointer("*default"), diff --git a/config/daconfig.go b/config/daconfig.go index c358dfa8a..5e6f0a379 100644 --- a/config/daconfig.go +++ b/config/daconfig.go @@ -28,7 +28,7 @@ type DiameterAgentCfg struct { Enabled bool // enables the diameter agent: Listen string // address where to listen for diameter requests DictionariesDir string - SMGeneric string // connection towards SMG component + SMGenericConns []*HaPoolConfig // connections towards SMG component DebitInterval time.Duration Timezone string // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> Dialect string // the diameter dialect used in the implementation @@ -52,8 +52,12 @@ func (self *DiameterAgentCfg) loadFromJsonCfg(jsnCfg *DiameterAgentJsonCfg) erro if jsnCfg.Dictionaries_dir != nil { self.DictionariesDir = *jsnCfg.Dictionaries_dir } - if jsnCfg.Sm_generic != nil { - self.SMGeneric = *jsnCfg.Sm_generic + if jsnCfg.Sm_generic_conns != nil { + self.SMGenericConns = make([]*HaPoolConfig, len(*jsnCfg.Sm_generic_conns)) + for idx, jsnHaCfg := range *jsnCfg.Sm_generic_conns { + self.SMGenericConns[idx] = NewDfltHaPoolConfig() + self.SMGenericConns[idx].loadFromJsonCfg(jsnHaCfg) + } } if jsnCfg.Debit_interval != nil { var err error diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 69fc4902c..fcaf6a2aa 100644 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -164,8 +164,8 @@ type CdrcJsonCfg struct { type SmGenericJsonCfg struct { Enabled *bool Listen_bijson *string - Ha_rater *[]*HaPoolJsonCfg - Ha_cdrs *[]*HaPoolJsonCfg + Rater_conns *[]*HaPoolJsonCfg + Cdrs_conns *[]*HaPoolJsonCfg Debit_interval *string Min_call_duration *string Max_call_duration *string @@ -174,8 +174,8 @@ type SmGenericJsonCfg struct { // SM-FreeSWITCH config section type SmFsJsonCfg struct { Enabled *bool - Ha_rater *[]*HaPoolJsonCfg - Ha_cdrs *[]*HaPoolJsonCfg + Rater_conns *[]*HaPoolJsonCfg + Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Extra_fields *[]string Debit_interval *string @@ -205,8 +205,8 @@ type FsConnJsonCfg struct { // SM-Kamailio config section type SmKamJsonCfg struct { Enabled *bool - Ha_rater *[]*HaPoolJsonCfg - Ha_cdrs *[]*HaPoolJsonCfg + Rater_conns *[]*HaPoolJsonCfg + Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Debit_interval *string Min_call_duration *string @@ -224,8 +224,8 @@ type KamConnJsonCfg struct { type SmOsipsJsonCfg struct { Enabled *bool Listen_udp *string - Ha_rater *[]*HaPoolJsonCfg - Ha_cdrs *[]*HaPoolJsonCfg + Rater_conns *[]*HaPoolJsonCfg + Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Debit_interval *string Min_call_duration *string @@ -242,10 +242,10 @@ type OsipsConnJsonCfg struct { // DiameterAgent configuration type DiameterAgentJsonCfg struct { - Enabled *bool // enables the diameter agent: - Listen *string // address where to listen for diameter requests - Dictionaries_dir *string // path towards additional dictionaries - Sm_generic *string // Connection towards generic SM + Enabled *bool // enables the diameter agent: + Listen *string // address where to listen for diameter requests + Dictionaries_dir *string // path towards additional dictionaries + Sm_generic_conns *[]*HaPoolJsonCfg // Connections towards generic SM Debit_interval *string Timezone *string // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> Dialect *string diff --git a/config/smconfig.go b/config/smconfig.go index 82c1d14b6..1feebd934 100644 --- a/config/smconfig.go +++ b/config/smconfig.go @@ -83,8 +83,8 @@ func (self *FsConnConfig) loadFromJsonCfg(jsnCfg *FsConnJsonCfg) error { type SmGenericConfig struct { Enabled bool ListenBijson string - HaRater []*HaPoolConfig - HaCdrs []*HaPoolConfig + RaterConns []*HaPoolConfig + CdrsConns []*HaPoolConfig DebitInterval time.Duration MinCallDuration time.Duration MaxCallDuration time.Duration @@ -101,18 +101,18 @@ func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { if jsnCfg.Listen_bijson != nil { self.ListenBijson = *jsnCfg.Listen_bijson } - if jsnCfg.Ha_rater != nil { - self.HaRater = make([]*HaPoolConfig, len(*jsnCfg.Ha_rater)) - for idx, jsnHaCfg := range *jsnCfg.Ha_rater { - self.HaRater[idx] = NewDfltHaPoolConfig() - self.HaRater[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Rater_conns != nil { + self.RaterConns = make([]*HaPoolConfig, len(*jsnCfg.Rater_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rater_conns { + self.RaterConns[idx] = NewDfltHaPoolConfig() + self.RaterConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Ha_cdrs != nil { - self.HaCdrs = make([]*HaPoolConfig, len(*jsnCfg.Ha_cdrs)) - for idx, jsnHaCfg := range *jsnCfg.Ha_cdrs { - self.HaCdrs[idx] = NewDfltHaPoolConfig() - self.HaCdrs[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Cdrs_conns != nil { + self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { + self.CdrsConns[idx] = NewDfltHaPoolConfig() + self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Debit_interval != nil { @@ -135,8 +135,8 @@ func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { type SmFsConfig struct { Enabled bool - HaRater []*HaPoolConfig - HaCdrs []*HaPoolConfig + RaterConns []*HaPoolConfig + CdrsConns []*HaPoolConfig CreateCdr bool ExtraFields []*utils.RSRField DebitInterval time.Duration @@ -159,18 +159,18 @@ func (self *SmFsConfig) loadFromJsonCfg(jsnCfg *SmFsJsonCfg) error { if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } - if jsnCfg.Ha_rater != nil { - self.HaRater = make([]*HaPoolConfig, len(*jsnCfg.Ha_rater)) - for idx, jsnHaCfg := range *jsnCfg.Ha_rater { - self.HaRater[idx] = NewDfltHaPoolConfig() - self.HaRater[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Rater_conns != nil { + self.RaterConns = make([]*HaPoolConfig, len(*jsnCfg.Rater_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rater_conns { + self.RaterConns[idx] = NewDfltHaPoolConfig() + self.RaterConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Ha_cdrs != nil { - self.HaCdrs = make([]*HaPoolConfig, len(*jsnCfg.Ha_cdrs)) - for idx, jsnHaCfg := range *jsnCfg.Ha_cdrs { - self.HaCdrs[idx] = NewDfltHaPoolConfig() - self.HaCdrs[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Cdrs_conns != nil { + self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { + self.CdrsConns[idx] = NewDfltHaPoolConfig() + self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { @@ -259,8 +259,8 @@ func (self *KamConnConfig) loadFromJsonCfg(jsnCfg *KamConnJsonCfg) error { // SM-Kamailio config section type SmKamConfig struct { Enabled bool - HaRater []*HaPoolConfig - HaCdrs []*HaPoolConfig + RaterConns []*HaPoolConfig + CdrsConns []*HaPoolConfig CreateCdr bool DebitInterval time.Duration MinCallDuration time.Duration @@ -276,18 +276,18 @@ func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } - if jsnCfg.Ha_rater != nil { - self.HaRater = make([]*HaPoolConfig, len(*jsnCfg.Ha_rater)) - for idx, jsnHaCfg := range *jsnCfg.Ha_rater { - self.HaRater[idx] = NewDfltHaPoolConfig() - self.HaRater[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Rater_conns != nil { + self.RaterConns = make([]*HaPoolConfig, len(*jsnCfg.Rater_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rater_conns { + self.RaterConns[idx] = NewDfltHaPoolConfig() + self.RaterConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Ha_cdrs != nil { - self.HaCdrs = make([]*HaPoolConfig, len(*jsnCfg.Ha_cdrs)) - for idx, jsnHaCfg := range *jsnCfg.Ha_cdrs { - self.HaCdrs[idx] = NewDfltHaPoolConfig() - self.HaCdrs[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Cdrs_conns != nil { + self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { + self.CdrsConns[idx] = NewDfltHaPoolConfig() + self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { @@ -338,8 +338,8 @@ func (self *OsipsConnConfig) loadFromJsonCfg(jsnCfg *OsipsConnJsonCfg) error { type SmOsipsConfig struct { Enabled bool ListenUdp string - HaRater []*HaPoolConfig - HaCdrs []*HaPoolConfig + RaterConns []*HaPoolConfig + CdrsConns []*HaPoolConfig CreateCdr bool DebitInterval time.Duration MinCallDuration time.Duration @@ -356,18 +356,18 @@ func (self *SmOsipsConfig) loadFromJsonCfg(jsnCfg *SmOsipsJsonCfg) error { if jsnCfg.Listen_udp != nil { self.ListenUdp = *jsnCfg.Listen_udp } - if jsnCfg.Ha_rater != nil { - self.HaRater = make([]*HaPoolConfig, len(*jsnCfg.Ha_rater)) - for idx, jsnHaCfg := range *jsnCfg.Ha_rater { - self.HaRater[idx] = NewDfltHaPoolConfig() - self.HaRater[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Rater_conns != nil { + self.RaterConns = make([]*HaPoolConfig, len(*jsnCfg.Rater_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rater_conns { + self.RaterConns[idx] = NewDfltHaPoolConfig() + self.RaterConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Ha_cdrs != nil { - self.HaCdrs = make([]*HaPoolConfig, len(*jsnCfg.Ha_cdrs)) - for idx, jsnHaCfg := range *jsnCfg.Ha_cdrs { - self.HaCdrs[idx] = NewDfltHaPoolConfig() - self.HaCdrs[idx].loadFromJsonCfg(jsnHaCfg) + if jsnCfg.Cdrs_conns != nil { + self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { + self.CdrsConns[idx] = NewDfltHaPoolConfig() + self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { diff --git a/data/conf/cgrates/cgrates.json b/data/conf/cgrates/cgrates.json index d31fa7e98..b1b8a4d0f 100644 --- a/data/conf/cgrates/cgrates.json +++ b/data/conf/cgrates/cgrates.json @@ -180,10 +180,10 @@ //"sm_generic": { // "enabled": false, // starts SessionManager service: // "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_conns": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "debit_interval": "0s", // interval to perform debits on. @@ -194,10 +194,10 @@ //"sm_freeswitch": { // "enabled": false, // starts SessionManager service: -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_conns": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -219,10 +219,10 @@ //"sm_kamailio": { // "enabled": false, // starts SessionManager service: -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_conns": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -238,10 +238,10 @@ //"sm_opensips": { // "enabled": false, // starts SessionManager service: // "listen_udp": "127.0.0.1:2020", // address where to listen for datagram events coming from OpenSIPS -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_conns": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "reconnects": 5, // number of reconnects if connection is lost @@ -258,7 +258,9 @@ // "enabled": false, // enables the diameter agent: // "listen": "127.0.0.1:3868", // address where to listen for diameter requests // "dictionaries_dir": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load -// "sm_generic": "internal", // connection towards SMG component for session management +// "sm_generic": [ +// {"server":"internal"} // connection towards SMG component for session management +// ] // "timezone": "", // timezone for timestamps where not specified, empty for general defaults <""|UTC|Local|$IANA_TZ_DB> // "origin_host": "CGR-DA", // diameter Origin-Host AVP used in replies // "origin_realm": "cgrates.org", // diameter Origin-Realm AVP used in replies diff --git a/data/conf/samples/dmtagent/cgrates.json b/data/conf/samples/dmtagent/cgrates.json index d955b34fc..005c8625c 100644 --- a/data/conf/samples/dmtagent/cgrates.json +++ b/data/conf/samples/dmtagent/cgrates.json @@ -47,12 +47,12 @@ "sm_generic": { "enabled": true, - "ha_rater": [ + "rater_conns": [ {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> ], - "ha_cdrs": [ + "rater_conns": [ {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing - ], + ], }, "diameter_agent": { diff --git a/data/conf/samples/smgeneric/cgrates.json b/data/conf/samples/smgeneric/cgrates.json index 385242808..9a370c4dd 100644 --- a/data/conf/samples/smgeneric/cgrates.json +++ b/data/conf/samples/smgeneric/cgrates.json @@ -179,10 +179,10 @@ "sm_generic": { "enabled": true, // starts SessionManager service: // "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_conns": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "debit_interval": "10s", // interval to perform debits on. @@ -193,10 +193,10 @@ //"sm_freeswitch": { // "enabled": false, // starts SessionManager service: -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -218,10 +218,10 @@ //"sm_kamailio": { // "enabled": false, // starts SessionManager service: -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "create_cdr": false, // create CDR out of events and sends them to CDRS component @@ -237,10 +237,10 @@ //"sm_opensips": { // "enabled": false, // starts SessionManager service: // "listen_udp": "127.0.0.1:2020", // address where to listen for datagram events coming from OpenSIPS -// "ha_rater": [ +// "rater_conns": [ // {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> // ], -// "ha_cdrs": [ +// "cdrs_": [ // {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing // ], // "reconnects": 5, // number of reconnects if connection is lost @@ -313,4 +313,4 @@ // "tax_exemption_code_list": "", // template extracting tax exemption code list out of StoredCdr; <$RSRFields> //}, -} \ No newline at end of file +}