ha for diameter agent

renamed ha_rater/ha_cdrs to rater_conns/cdrs_conns
This commit is contained in:
Radu Ioan Fericean
2015-12-04 17:04:42 +02:00
parent 81e3721a7b
commit 44d893c17b
11 changed files with 172 additions and 156 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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")
}
}

View File

@@ -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>

View File

@@ -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"),

View File

@@ -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

View File

@@ -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

View File

@@ -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 {

View File

@@ -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

View File

@@ -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": {

View File

@@ -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>
//},
}
}