mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-13 02:56:24 +05:00
ha for diameter agent
renamed ha_rater/ha_cdrs to rater_conns/cdrs_conns
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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("<DiameterAgent> 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("<DiameterAgent> 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)
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,10 +201,10 @@ const CGRATES_CFG_JSON = `
|
||||
"sm_generic": {
|
||||
"enabled": false, // starts SessionManager service: <true|false>
|
||||
"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 <internal|x.y.z.y:1234>
|
||||
],
|
||||
"debit_interval": "0s", // interval to perform debits on.
|
||||
@@ -215,10 +215,10 @@ const CGRATES_CFG_JSON = `
|
||||
|
||||
"sm_freeswitch": {
|
||||
"enabled": false, // starts SessionManager service: <true|false>
|
||||
"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 <internal|x.y.z.y:1234>
|
||||
],
|
||||
"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: <true|false>
|
||||
"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 <internal|x.y.z.y:1234>
|
||||
],
|
||||
"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: <true|false>
|
||||
"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 <internal|x.y.z.y:1234>
|
||||
],
|
||||
"reconnects": 5, // number of reconnects if connection is lost
|
||||
@@ -279,7 +279,9 @@ const CGRATES_CFG_JSON = `
|
||||
"enabled": false, // enables the diameter agent: <true|false>
|
||||
"listen": "127.0.0.1:3868", // address where to listen for diameter requests <x.y.z.y:1234>
|
||||
"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: <huawei>
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -28,7 +28,7 @@ type DiameterAgentCfg struct {
|
||||
Enabled bool // enables the diameter agent: <true|false>
|
||||
Listen string // address where to listen for diameter requests <x.y.z.y:1234>
|
||||
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 <huawei>
|
||||
@@ -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
|
||||
|
||||
@@ -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: <true|false>
|
||||
Listen *string // address where to listen for diameter requests <x.y.z.y:1234>
|
||||
Dictionaries_dir *string // path towards additional dictionaries
|
||||
Sm_generic *string // Connection towards generic SM
|
||||
Enabled *bool // enables the diameter agent: <true|false>
|
||||
Listen *string // address where to listen for diameter requests <x.y.z.y:1234>
|
||||
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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -180,10 +180,10 @@
|
||||
//"sm_generic": {
|
||||
// "enabled": false, // starts SessionManager service: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "debit_interval": "0s", // interval to perform debits on.
|
||||
@@ -194,10 +194,10 @@
|
||||
|
||||
//"sm_freeswitch": {
|
||||
// "enabled": false, // starts SessionManager service: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "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: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "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: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "reconnects": 5, // number of reconnects if connection is lost
|
||||
@@ -258,7 +258,9 @@
|
||||
// "enabled": false, // enables the diameter agent: <true|false>
|
||||
// "listen": "127.0.0.1:3868", // address where to listen for diameter requests <x.y.z.y:1234>
|
||||
// "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
|
||||
|
||||
@@ -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 <internal|x.y.z.y:1234>
|
||||
],
|
||||
],
|
||||
},
|
||||
|
||||
"diameter_agent": {
|
||||
|
||||
@@ -179,10 +179,10 @@
|
||||
"sm_generic": {
|
||||
"enabled": true, // starts SessionManager service: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "debit_interval": "10s", // interval to perform debits on.
|
||||
@@ -193,10 +193,10 @@
|
||||
|
||||
//"sm_freeswitch": {
|
||||
// "enabled": false, // starts SessionManager service: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "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: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "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: <true|false>
|
||||
// "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 <internal|x.y.z.y:1234>
|
||||
// ],
|
||||
// "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>
|
||||
//},
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user