diff --git a/config/cdrcconfig.go b/config/cdrcconfig.go index 00005be51..abac4b187 100644 --- a/config/cdrcconfig.go +++ b/config/cdrcconfig.go @@ -27,7 +27,7 @@ import ( type CdrcConfig struct { Enabled bool // Enable/Disable the profile DryRun bool // Do not post CDRs to the server - Cdrs string // The address where CDRs can be reached + CdrsConns []*HaPoolConfig // The address where CDRs can be reached CdrFormat string // The type of CDR file to process FieldSeparator rune // The separator to use when reading csvs DataUsageMultiplyFactor float64 // Conversion factor for data usage @@ -57,8 +57,12 @@ func (self *CdrcConfig) loadFromJsonCfg(jsnCfg *CdrcJsonCfg) error { if jsnCfg.Dry_run != nil { self.DryRun = *jsnCfg.Dry_run } - if jsnCfg.Cdrs != nil { - self.Cdrs = *jsnCfg.Cdrs + 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.Cdr_format != nil { self.CdrFormat = *jsnCfg.Cdr_format @@ -126,7 +130,11 @@ func (self *CdrcConfig) loadFromJsonCfg(jsnCfg *CdrcJsonCfg) error { func (self *CdrcConfig) Clone() *CdrcConfig { clnCdrc := new(CdrcConfig) clnCdrc.Enabled = self.Enabled - clnCdrc.Cdrs = self.Cdrs + clnCdrc.CdrsConns = make([]*HaPoolConfig, len(self.CdrsConns)) + for idx, cdrConn := range self.CdrsConns { + clonedVal := *cdrConn + clnCdrc.CdrsConns[idx] = &clonedVal + } clnCdrc.CdrFormat = self.CdrFormat clnCdrc.FieldSeparator = self.FieldSeparator clnCdrc.DataUsageMultiplyFactor = self.DataUsageMultiplyFactor diff --git a/config/cfg_data.json b/config/cfg_data.json index f5eb4a811..000854998 100644 --- a/config/cfg_data.json +++ b/config/cfg_data.json @@ -7,14 +7,14 @@ // This is what you get when you load CGRateS with an empty configuration file. "general": { - "default_reqtype": "*pseudoprepaid", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> + "default_request_type": "*pseudoprepaid", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> }, "cdrs": { "enabled": true, // start the CDR Server service: }, -"rater": { +"rals": { "enabled": true, // enable Rater service: }, @@ -42,9 +42,9 @@ "sm_freeswitch": { "enabled": true, // starts SessionManager service: - "connections":[ // instantiate connections to multiple FreeSWITCH servers - {"server": "1.2.3.4:8021", "password": "ClueCon", "reconnects": 5}, - {"server": "2.3.4.5:8021", "password": "ClueCon", "reconnects": 5}, + "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers + {"address": "1.2.3.4:8021", "password": "ClueCon", "reconnects": 5}, + {"address": "2.3.4.5:8021", "password": "ClueCon", "reconnects": 5}, ], }, diff --git a/config/cfg_data2.json b/config/cfg_data2.json index 67b846168..dc001f760 100644 --- a/config/cfg_data2.json +++ b/config/cfg_data2.json @@ -22,8 +22,8 @@ "sm_freeswitch": { "enabled": true, // starts SessionManager service: - "connections":[ // instantiate connections to multiple FreeSWITCH servers - {"server": "2.3.4.5:8021", "password": "ClueCon", "reconnects": 5}, + "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers + {"address": "2.3.4.5:8021", "password": "ClueCon", "reconnects": 5}, ], }, diff --git a/config/config.go b/config/config.go index 39963358a..b605cfe35 100644 --- a/config/config.go +++ b/config/config.go @@ -86,8 +86,8 @@ func NewDefaultCGRConfig() (*CGRConfig, error) { } cfg.dfltCdreProfile = cfg.CdreProfiles[utils.META_DEFAULT].Clone() // So default will stay unique, will have nil pointer in case of no defaults loaded which is an extra check cfg.dfltCdrcProfile = cfg.CdrcProfiles["/var/log/cgrates/cdrc/in"][utils.META_DEFAULT].Clone() - dfltFsConnConfig = cfg.SmFsConfig.Connections[0] // We leave it crashing here on purpose if no Connection defaults defined - dfltKamConnConfig = cfg.SmKamConfig.Connections[0] + dfltFsConnConfig = cfg.SmFsConfig.EventSocketConns[0] // We leave it crashing here on purpose if no Connection defaults defined + dfltKamConnConfig = cfg.SmKamConfig.EvapiConns[0] if err := cfg.checkConfigSanity(); err != nil { return nil, err } @@ -191,31 +191,30 @@ type CGRConfig struct { StorDBMaxOpenConns int // Maximum database connections opened StorDBMaxIdleConns int // Maximum idle connections to keep opened StorDBCDRSIndexes []string - DBDataEncoding string // The encoding used to store object data in strings: - RPCJSONListen string // RPC JSON listening address - RPCGOBListen string // RPC GOB listening address - HTTPListen string // HTTP listening address - DefaultReqType string // Use this request type if not defined on top - DefaultCategory string // set default type of record - DefaultTenant string // set default tenant - DefaultSubject string // set default rating subject, useful in case of fallback - DefaultTimezone string // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> - Reconnects int // number of recconect attempts in case of connection lost <-1 for infinite | nb> - ConnectAttempts int // number of initial connection attempts before giving up - ResponseCacheTTL time.Duration // the life span of a cached response - InternalTtl time.Duration // maximum duration to wait for internal connections before giving up - RoundingDecimals int // Number of decimals to round end prices at - HttpSkipTlsVerify bool // If enabled Http Client will accept any TLS certificate - TpExportPath string // Path towards export folder for offline Tariff Plans - HttpFailedDir string // Directory path where we store failed http requests - MaxCallDuration time.Duration // The maximum call duration (used by responder when querying DerivedCharging) // ToDo: export it in configuration file - RaterEnabled bool // start standalone server (no balancer) - RaterBalancer string // balancer address host:port - RaterCdrStats string // address where to reach the cdrstats service. Empty to disable stats gathering <""|internal|x.y.z.y:1234> - RaterHistoryServer string - RaterPubSubServer string - RaterUserServer string - RaterAliasesServer string + DBDataEncoding string // The encoding used to store object data in strings: + RPCJSONListen string // RPC JSON listening address + RPCGOBListen string // RPC GOB listening address + HTTPListen string // HTTP listening address + DefaultReqType string // Use this request type if not defined on top + DefaultCategory string // set default type of record + DefaultTenant string // set default tenant + DefaultTimezone string // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> + Reconnects int // number of recconect attempts in case of connection lost <-1 for infinite | nb> + ConnectAttempts int // number of initial connection attempts before giving up + ResponseCacheTTL time.Duration // the life span of a cached response + InternalTtl time.Duration // maximum duration to wait for internal connections before giving up + RoundingDecimals int // Number of decimals to round end prices at + HttpSkipTlsVerify bool // If enabled Http Client will accept any TLS certificate + TpExportPath string // Path towards export folder for offline Tariff Plans + HttpFailedDir string // Directory path where we store failed http requests + MaxCallDuration time.Duration // The maximum call duration (used by responder when querying DerivedCharging) // ToDo: export it in configuration file + RALsEnabled bool // start standalone server (no balancer) + RALsBalancer string // balancer address host:port + RALsCDRStatSConns []*HaPoolConfig // address where to reach the cdrstats service. Empty to disable stats gathering <""|internal|x.y.z.y:1234> + RALsHistorySConns []*HaPoolConfig + RALsPubSubSConns []*HaPoolConfig + RALsUserSConns []*HaPoolConfig + RALsAliasSConns []*HaPoolConfig RpSubjectPrefixMatching bool // enables prefix matching for the rating profile subject LcrSubjectPrefixMatching bool // enables prefix matching for the lcr subject BalancerEnabled bool @@ -234,9 +233,9 @@ type CGRConfig struct { CdreProfiles map[string]*CdreConfig CdrcProfiles map[string]map[string]*CdrcConfig // Number of CDRC instances running imports, format map[dirPath]map[instanceName]{Configs} SmGenericConfig *SmGenericConfig - SmFsConfig *SmFsConfig // SM-FreeSWITCH configuration + SmFsConfig *SmFsConfig // SMFreeSWITCH configuration SmKamConfig *SmKamConfig // SM-Kamailio Configuration - SmOsipsConfig *SmOsipsConfig // SM-OpenSIPS Configuration + SmOsipsConfig *SmOsipsConfig // SMOpenSIPS Configuration diameterAgentCfg *DiameterAgentCfg // DiameterAgent configuration HistoryServer string // Address where to reach the master history server: HistoryServerEnabled bool // Starts History as server: . @@ -260,64 +259,77 @@ type CGRConfig struct { func (self *CGRConfig) checkConfigSanity() error { // Rater checks - if self.RaterEnabled { - if self.RaterBalancer == utils.INTERNAL && !self.BalancerEnabled { + if self.RALsEnabled { + if self.RALsBalancer == utils.MetaInternal && !self.BalancerEnabled { return errors.New("Balancer not enabled but requested by Rater component.") } - if self.RaterCdrStats == utils.INTERNAL && !self.CDRStatsEnabled { - return errors.New("CDRStats not enabled but requested by Rater component.") + for _, connCfg := range self.RALsCDRStatSConns { + if connCfg.Address == utils.MetaInternal && !self.CDRStatsEnabled { + return errors.New("CDRStats not enabled but requested by Rater component.") + } } - if self.RaterHistoryServer == utils.INTERNAL && !self.HistoryServerEnabled { - return errors.New("History server not enabled but requested by Rater component.") + for _, connCfg := range self.RALsHistorySConns { + if connCfg.Address == utils.MetaInternal && !self.HistoryServerEnabled { + return errors.New("History server not enabled but requested by Rater component.") + } } - if self.RaterPubSubServer == utils.INTERNAL && !self.PubSubServerEnabled { - return errors.New("PubSub server not enabled but requested by Rater component.") + for _, connCfg := range self.RALsPubSubSConns { + if connCfg.Address == utils.MetaInternal && !self.PubSubServerEnabled { + return errors.New("PubSub server not enabled but requested by Rater component.") + } } - if self.RaterAliasesServer == utils.INTERNAL && !self.AliasesServerEnabled { - return errors.New("Aliases server not enabled but requested by Rater component.") + for _, connCfg := range self.RALsAliasSConns { + if connCfg.Address == utils.MetaInternal && !self.AliasesServerEnabled { + return errors.New("Alias server not enabled but requested by Rater component.") + } } - if self.RaterUserServer == utils.INTERNAL && !self.UserServerEnabled { - return errors.New("Users service not enabled but requested by Rater component.") + for _, connCfg := range self.RALsUserSConns { + if connCfg.Address == utils.MetaInternal && !self.UserServerEnabled { + return errors.New("User service not enabled but requested by Rater component.") + } } } // CDRServer checks if self.CDRSEnabled { for _, cdrsRaterConn := range self.CDRSRaterConns { - if cdrsRaterConn.Server == utils.INTERNAL && !self.RaterEnabled { - return errors.New("Rater not enabled but requested by CDRS component.") + if cdrsRaterConn.Address == utils.MetaInternal && !self.RALsEnabled { + return errors.New("RALs not enabled but requested by CDRS component.") } } for _, connCfg := range self.CDRSPubSubSConns { - if connCfg.Server == utils.INTERNAL && !self.PubSubServerEnabled { + if connCfg.Address == utils.MetaInternal && !self.PubSubServerEnabled { return errors.New("PubSubS not enabled but requested by CDRS component.") } } for _, connCfg := range self.CDRSUserSConns { - if connCfg.Server == utils.INTERNAL && !self.UserServerEnabled { + if connCfg.Address == utils.MetaInternal && !self.UserServerEnabled { return errors.New("UserS not enabled but requested by CDRS component.") } } for _, connCfg := range self.CDRSAliaseSConns { - if connCfg.Server == utils.INTERNAL && !self.AliasesServerEnabled { + if connCfg.Address == utils.MetaInternal && !self.AliasesServerEnabled { return errors.New("AliaseS not enabled but requested by CDRS component.") } } for _, connCfg := range self.CDRSStatSConns { - if connCfg.Server == utils.INTERNAL && !self.CDRStatsEnabled { + if connCfg.Address == utils.MetaInternal && !self.CDRStatsEnabled { return errors.New("CDRStatS not enabled but requested by CDRS component.") } } } // CDRC sanity checks for _, cdrcCfgs := range self.CdrcProfiles { - for _, cdrcInst := range cdrcCfgs { + for instID, cdrcInst := range cdrcCfgs { if !cdrcInst.Enabled { continue } - if len(cdrcInst.Cdrs) == 0 { - return errors.New("CdrC enabled but no CDRS defined!") - } else if cdrcInst.Cdrs == utils.INTERNAL && !self.CDRSEnabled { - return errors.New("CDRS not enabled but referenced from CDRC") + if len(cdrcInst.CdrsConns) == 0 { + return fmt.Errorf(" Instance: %s, CdrC enabled but no CDRS defined!", instID) + } + for _, conn := range cdrcInst.CdrsConns { + if conn.Address == utils.MetaInternal && !self.CDRSEnabled { + return errors.New("CDRS not enabled but referenced from CDRC") + } } if len(cdrcInst.ContentFields) == 0 { return errors.New("CdrC enabled but no fields to be processed defined!") @@ -333,86 +345,87 @@ func (self *CGRConfig) checkConfigSanity() error { } } } - // SM-Generic checks + // SMGeneric checks if self.SmGenericConfig.Enabled { - if len(self.SmGenericConfig.RaterConns) == 0 { - return errors.New("Rater definition is mandatory!") + if len(self.SmGenericConfig.RALsConns) == 0 { + return errors.New(" RALs definition is mandatory!") } - if len(self.SmGenericConfig.CdrsConns) == 0 { - return errors.New("Cdrs definition is mandatory!") - } - for _, smgRaterConn := range self.SmGenericConfig.RaterConns { - if smgRaterConn.Server == utils.INTERNAL && !self.RaterEnabled { - return errors.New("Rater not enabled but requested by SM-Generic component.") + for _, smgRALsConn := range self.SmGenericConfig.RALsConns { + if smgRALsConn.Address == utils.MetaInternal && !self.RALsEnabled { + return errors.New(" RALs not enabled but requested by SMGeneric component.") } } - for _, smgCDRSConn := range self.SmGenericConfig.CdrsConns { - if smgCDRSConn.Server == utils.INTERNAL && !self.CDRSEnabled { - return errors.New("CDRS not enabled but referenced by SM-Generic component") + if len(self.SmGenericConfig.CDRsConns) == 0 { + return errors.New(" CDRs definition is mandatory!") + } + for _, smgCDRSConn := range self.SmGenericConfig.CDRsConns { + if smgCDRSConn.Address == utils.MetaInternal && !self.CDRSEnabled { + return errors.New(" CDRS not enabled but referenced by SMGeneric component") } } } - // SM-FreeSWITCH checks + // SMFreeSWITCH checks if self.SmFsConfig.Enabled { - if len(self.SmFsConfig.RaterConns) == 0 { - return errors.New("Rater definition is mandatory!") + if len(self.SmFsConfig.RALsConns) == 0 { + return errors.New(" RALs definition is mandatory!") } - if len(self.SmFsConfig.CdrsConns) == 0 { - return errors.New("CDRS definition is mandatory!") - } - for _, smFSRaterConn := range self.SmFsConfig.RaterConns { - if smFSRaterConn.Server == utils.INTERNAL && !self.RaterEnabled { - return errors.New("Rater not enabled but requested by SM-FreeSWITCH component.") + for _, smFSRaterConn := range self.SmFsConfig.RALsConns { + if smFSRaterConn.Address == utils.MetaInternal && !self.RALsEnabled { + return errors.New(" RALs not enabled but requested by SMFreeSWITCH component.") } } - for _, smFSCDRSConn := range self.SmFsConfig.CdrsConns { - if smFSCDRSConn.Server == utils.INTERNAL && !self.CDRSEnabled { - return errors.New("CDRS not enabled but referenced by SM-FreeSWITCH component") + if len(self.SmFsConfig.CDRsConns) == 0 { + return errors.New(" CDRS definition is mandatory!") + } + for _, smFSCDRSConn := range self.SmFsConfig.CDRsConns { + if smFSCDRSConn.Address == utils.MetaInternal && !self.CDRSEnabled { + return errors.New("CDRS not enabled but referenced by SMFreeSWITCH component") } } } // SM-Kamailio checks if self.SmKamConfig.Enabled { - if len(self.SmKamConfig.RaterConns) == 0 { + if len(self.SmKamConfig.RALsConns) == 0 { return errors.New("Rater definition is mandatory!") } - if len(self.SmKamConfig.CdrsConns) == 0 { - return errors.New("Cdrs definition is mandatory!") - } - for _, smKamRaterConn := range self.SmKamConfig.RaterConns { - if smKamRaterConn.Server == utils.INTERNAL && !self.RaterEnabled { + for _, smKamRaterConn := range self.SmKamConfig.RALsConns { + if smKamRaterConn.Address == utils.MetaInternal && !self.RALsEnabled { return errors.New("Rater not enabled but requested by SM-Kamailio component.") } } - for _, smKamCDRSConn := range self.SmKamConfig.CdrsConns { - if smKamCDRSConn.Server == utils.INTERNAL && !self.CDRSEnabled { + if len(self.SmKamConfig.CDRsConns) == 0 { + return errors.New("Cdrs definition is mandatory!") + } + for _, smKamCDRSConn := range self.SmKamConfig.CDRsConns { + if smKamCDRSConn.Address == utils.MetaInternal && !self.CDRSEnabled { return errors.New("CDRS not enabled but referenced by SM-Kamailio component") } } } - // SM-OpenSIPS checks + // SMOpenSIPS checks if self.SmOsipsConfig.Enabled { - if len(self.SmOsipsConfig.RaterConns) == 0 { - return errors.New("Rater definition is mandatory!") + if len(self.SmOsipsConfig.RALsConns) == 0 { + return errors.New(" Rater definition is mandatory!") } - if len(self.SmOsipsConfig.CdrsConns) == 0 { - return errors.New("Cdrs definition is mandatory!") - } - for _, smOsipsRaterConn := range self.SmOsipsConfig.RaterConns { - if smOsipsRaterConn.Server == utils.INTERNAL && !self.RaterEnabled { - return errors.New("Rater not enabled but requested by SM-OpenSIPS component.") + for _, smOsipsRaterConn := range self.SmOsipsConfig.RALsConns { + if smOsipsRaterConn.Address == utils.MetaInternal && !self.RALsEnabled { + return errors.New(" RALs not enabled but requested by SMOpenSIPS component.") } } - for _, smOsipsCDRSConn := range self.SmOsipsConfig.CdrsConns { - if smOsipsCDRSConn.Server == utils.INTERNAL && !self.CDRSEnabled { - return errors.New("CDRS not enabled but referenced by SM-OpenSIPS component") + if len(self.SmOsipsConfig.CDRsConns) == 0 { + return errors.New(" CDRs definition is mandatory!") + } + + for _, smOsipsCDRSConn := range self.SmOsipsConfig.CDRsConns { + if smOsipsCDRSConn.Address == utils.MetaInternal && !self.CDRSEnabled { + return errors.New(" CDRS not enabled but referenced by SMOpenSIPS component") } } } // DAgent checks if self.diameterAgentCfg.Enabled { for _, daSMGConn := range self.diameterAgentCfg.SMGenericConns { - if daSMGConn.Server == utils.INTERNAL && !self.SmGenericConfig.Enabled { + if daSMGConn.Address == utils.MetaInternal && !self.SmGenericConfig.Enabled { return errors.New("SMGeneric not enabled but referenced by DiameterAgent component") } } @@ -454,7 +467,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { return err } - jsnRaterCfg, err := jsnCfg.RaterJsonCfg() + jsnRALsCfg, err := jsnCfg.RalsJsonCfg() if err != nil { return err } @@ -556,8 +569,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnTpDbCfg.Db_user != nil { self.TpDbUser = *jsnTpDbCfg.Db_user } - if jsnTpDbCfg.Db_passwd != nil { - self.TpDbPass = *jsnTpDbCfg.Db_passwd + if jsnTpDbCfg.Db_password != nil { + self.TpDbPass = *jsnTpDbCfg.Db_password } } @@ -577,8 +590,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnDataDbCfg.Db_user != nil { self.DataDbUser = *jsnDataDbCfg.Db_user } - if jsnDataDbCfg.Db_passwd != nil { - self.DataDbPass = *jsnDataDbCfg.Db_passwd + if jsnDataDbCfg.Db_password != nil { + self.DataDbPass = *jsnDataDbCfg.Db_password } if jsnDataDbCfg.Load_history_size != nil { self.LoadHistorySize = *jsnDataDbCfg.Load_history_size @@ -601,8 +614,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnStorDbCfg.Db_user != nil { self.StorDBUser = *jsnStorDbCfg.Db_user } - if jsnStorDbCfg.Db_passwd != nil { - self.StorDBPass = *jsnStorDbCfg.Db_passwd + if jsnStorDbCfg.Db_password != nil { + self.StorDBPass = *jsnStorDbCfg.Db_password } if jsnStorDbCfg.Max_open_conns != nil { self.StorDBMaxOpenConns = *jsnStorDbCfg.Max_open_conns @@ -619,8 +632,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnGeneralCfg.Dbdata_encoding != nil { self.DBDataEncoding = *jsnGeneralCfg.Dbdata_encoding } - if jsnGeneralCfg.Default_reqtype != nil { - self.DefaultReqType = *jsnGeneralCfg.Default_reqtype + if jsnGeneralCfg.Default_request_type != nil { + self.DefaultReqType = *jsnGeneralCfg.Default_request_type } if jsnGeneralCfg.Default_category != nil { self.DefaultCategory = *jsnGeneralCfg.Default_category @@ -628,9 +641,6 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnGeneralCfg.Default_tenant != nil { self.DefaultTenant = *jsnGeneralCfg.Default_tenant } - if jsnGeneralCfg.Default_subject != nil { - self.DefaultSubject = *jsnGeneralCfg.Default_subject - } if jsnGeneralCfg.Connect_attempts != nil { self.ConnectAttempts = *jsnGeneralCfg.Connect_attempts } @@ -676,33 +686,53 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { } } - if jsnRaterCfg != nil { - if jsnRaterCfg.Enabled != nil { - self.RaterEnabled = *jsnRaterCfg.Enabled + if jsnRALsCfg != nil { + if jsnRALsCfg.Enabled != nil { + self.RALsEnabled = *jsnRALsCfg.Enabled } - if jsnRaterCfg.Balancer != nil { - self.RaterBalancer = *jsnRaterCfg.Balancer + if jsnRALsCfg.Balancer != nil { + self.RALsBalancer = *jsnRALsCfg.Balancer } - if jsnRaterCfg.Cdrstats != nil { - self.RaterCdrStats = *jsnRaterCfg.Cdrstats + if jsnRALsCfg.Cdrstats_conns != nil { + self.RALsCDRStatSConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Cdrstats_conns)) + for idx, jsnHaCfg := range *jsnRALsCfg.Cdrstats_conns { + self.RALsCDRStatSConns[idx] = NewDfltHaPoolConfig() + self.RALsCDRStatSConns[idx].loadFromJsonCfg(jsnHaCfg) + } } - if jsnRaterCfg.Historys != nil { - self.RaterHistoryServer = *jsnRaterCfg.Historys + if jsnRALsCfg.Historys_conns != nil { + self.RALsHistorySConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Historys_conns)) + for idx, jsnHaCfg := range *jsnRALsCfg.Historys_conns { + self.RALsHistorySConns[idx] = NewDfltHaPoolConfig() + self.RALsHistorySConns[idx].loadFromJsonCfg(jsnHaCfg) + } } - if jsnRaterCfg.Pubsubs != nil { - self.RaterPubSubServer = *jsnRaterCfg.Pubsubs + if jsnRALsCfg.Pubsubs_conns != nil { + self.RALsPubSubSConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Pubsubs_conns)) + for idx, jsnHaCfg := range *jsnRALsCfg.Pubsubs_conns { + self.RALsPubSubSConns[idx] = NewDfltHaPoolConfig() + self.RALsPubSubSConns[idx].loadFromJsonCfg(jsnHaCfg) + } } - if jsnRaterCfg.Aliases != nil { - self.RaterAliasesServer = *jsnRaterCfg.Aliases + if jsnRALsCfg.Aliases_conns != nil { + self.RALsAliasSConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Aliases_conns)) + for idx, jsnHaCfg := range *jsnRALsCfg.Aliases_conns { + self.RALsAliasSConns[idx] = NewDfltHaPoolConfig() + self.RALsAliasSConns[idx].loadFromJsonCfg(jsnHaCfg) + } } - if jsnRaterCfg.Users != nil { - self.RaterUserServer = *jsnRaterCfg.Users + if jsnRALsCfg.Users_conns != nil { + self.RALsUserSConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Users_conns)) + for idx, jsnHaCfg := range *jsnRALsCfg.Users_conns { + self.RALsUserSConns[idx] = NewDfltHaPoolConfig() + self.RALsUserSConns[idx].loadFromJsonCfg(jsnHaCfg) + } } - if jsnRaterCfg.Rp_subject_prefix_matching != nil { - self.RpSubjectPrefixMatching = *jsnRaterCfg.Rp_subject_prefix_matching + if jsnRALsCfg.Rp_subject_prefix_matching != nil { + self.RpSubjectPrefixMatching = *jsnRALsCfg.Rp_subject_prefix_matching } - if jsnRaterCfg.Lcr_subject_prefix_matching != nil { - self.LcrSubjectPrefixMatching = *jsnRaterCfg.Lcr_subject_prefix_matching + if jsnRALsCfg.Lcr_subject_prefix_matching != nil { + self.LcrSubjectPrefixMatching = *jsnRALsCfg.Lcr_subject_prefix_matching } } @@ -726,9 +756,9 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnCdrsCfg.Store_cdrs != nil { self.CDRSStoreCdrs = *jsnCdrsCfg.Store_cdrs } - if jsnCdrsCfg.Rater_conns != nil { - self.CDRSRaterConns = make([]*HaPoolConfig, len(*jsnCdrsCfg.Rater_conns)) - for idx, jsnHaCfg := range *jsnCdrsCfg.Rater_conns { + if jsnCdrsCfg.Rals_conns != nil { + self.CDRSRaterConns = make([]*HaPoolConfig, len(*jsnCdrsCfg.Rals_conns)) + for idx, jsnHaCfg := range *jsnCdrsCfg.Rals_conns { self.CDRSRaterConns[idx] = NewDfltHaPoolConfig() self.CDRSRaterConns[idx].loadFromJsonCfg(jsnHaCfg) } @@ -768,8 +798,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if rplJsonCfg.Transport != nil { self.CDRSCdrReplication[idx].Transport = *rplJsonCfg.Transport } - if rplJsonCfg.Server != nil { - self.CDRSCdrReplication[idx].Server = *rplJsonCfg.Server + if rplJsonCfg.Address != nil { + self.CDRSCdrReplication[idx].Address = *rplJsonCfg.Address } if rplJsonCfg.Synchronous != nil { self.CDRSCdrReplication[idx].Synchronous = *rplJsonCfg.Synchronous @@ -907,8 +937,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error { if jsnMailerCfg.Auth_user != nil { self.MailerAuthUser = *jsnMailerCfg.Auth_user } - if jsnMailerCfg.Auth_passwd != nil { - self.MailerAuthPass = *jsnMailerCfg.Auth_passwd + if jsnMailerCfg.Auth_password != nil { + self.MailerAuthPass = *jsnMailerCfg.Auth_password } if jsnMailerCfg.From_address != nil { self.MailerFromAddr = *jsnMailerCfg.From_address diff --git a/config/config_defaults.go b/config/config_defaults.go index 8dd2b2596..f5ada7074 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -29,14 +29,13 @@ const CGRATES_CFG_JSON = ` "general": { "http_skip_tls_verify": false, // if enabled Http Client will accept any TLS certificate - "rounding_decimals": 5, // system level precision for floats + "rounding_decimals": 5, // system level precision for floats "dbdata_encoding": "msgpack", // encoding used to store object data in strings: "tpexport_dir": "/var/log/cgrates/tpe", // path towards export folder for offline Tariff Plans "http_failed_dir": "/var/log/cgrates/http_failed", // directory path where we store failed http requests - "default_reqtype": "*rated", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> - "default_category": "call", // default Type of Record to consider when missing from requests - "default_tenant": "cgrates.org", // default Tenant to consider when missing from requests - "default_subject": "cgrates", // default rating Subject to consider when missing from requests + "default_request_type": "*rated", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> + "default_category": "call", // default category to consider when missing from requests + "default_tenant": "cgrates.org", // default tenant to consider when missing from requests "default_timezone": "Local", // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> "connect_attempts": 3, // initial server connect attempts "reconnects": -1, // number of retries in case of connection lost @@ -58,7 +57,7 @@ const CGRATES_CFG_JSON = ` "db_port": 6379, // port to reach the tariffplan_db "db_name": "10", // tariffplan_db name to connect to "db_user": "", // sername to use when connecting to tariffplan_db - "db_passwd": "", // password to use when connecting to tariffplan_db + "db_password": "", // password to use when connecting to tariffplan_db }, @@ -68,7 +67,7 @@ const CGRATES_CFG_JSON = ` "db_port": 6379, // data_db port to reach the database "db_name": "11", // data_db database name to connect to "db_user": "", // username to use when connecting to data_db - "db_passwd": "", // password to use when connecting to data_db + "db_password": "", // password to use when connecting to data_db "load_history_size": 10, // Number of records in the load history }, @@ -79,7 +78,7 @@ const CGRATES_CFG_JSON = ` "db_port": 3306, // the port to reach the stordb "db_name": "cgrates", // stor database name "db_user": "cgrates", // username to use when connecting to stordb - "db_passwd": "CGRateS.org", // password to use when connecting to stordb + "db_password": "CGRateS.org", // password to use when connecting to stordb "max_open_conns": 100, // maximum database connections opened "max_idle_conns": 10, // maximum database connections idle "cdrs_indexes": [], // indexes on cdrs table to speed up queries, used only in case of mongo @@ -91,16 +90,16 @@ const CGRATES_CFG_JSON = ` }, -"rater": { +"rals": { "enabled": false, // enable Rater service: - "balancer": "", // register to balancer as worker: <""|internal|x.y.z.y:1234> - "cdrstats": "", // address where to reach the cdrstats service, empty to disable stats functionality: <""|internal|x.y.z.y:1234> - "historys": "", // address where to reach the history service, empty to disable history functionality: <""|internal|x.y.z.y:1234> - "pubsubs": "", // address where to reach the pubusb service, empty to disable pubsub functionality: <""|internal|x.y.z.y:1234> - "users": "", // address where to reach the user service, empty to disable user profile functionality: <""|internal|x.y.z.y:1234> - "aliases": "", // address where to reach the aliases service, empty to disable aliases functionality: <""|internal|x.y.z.y:1234> - "rp_subject_prefix_matching": false, // enables prefix matching for the rating profile subject - "lcr_subject_prefix_matching": false // enables prefix matching for the lcr subject + "balancer": "", // register to balancer as worker: <""|*internal|x.y.z.y:1234> + "cdrstats_conns": [], // address where to reach the cdrstats service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234> + "historys_conns": [], // address where to reach the history service, empty to disable history functionality: <""|*internal|x.y.z.y:1234> + "pubsubs_conns": [], // address where to reach the pubusb service, empty to disable pubsub functionality: <""|*internal|x.y.z.y:1234> + "users_conns": [], // address where to reach the user service, empty to disable user profile functionality: <""|*internal|x.y.z.y:1234> + "aliases_conns": [], // address where to reach the aliases service, empty to disable aliases functionality: <""|*internal|x.y.z.y:1234> + "rp_subject_prefix_matching": false, // enables prefix matching for the rating profile subject + "lcr_subject_prefix_matching": false // enables prefix matching for the lcr subject }, @@ -113,13 +112,13 @@ const CGRATES_CFG_JSON = ` "enabled": false, // start the CDR Server service: "extra_fields": [], // extra fields to store in CDRs for non-generic CDRs "store_cdrs": true, // store cdrs in storDb - "rater_conns": [ - {"server": "internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|internal|x.y.z.y:1234> + "rals_conns": [ + {"address": "*internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|*internal|x.y.z.y:1234> ], - "pubsubs_conns": [], // address where to reach the pubusb service, empty to disable pubsub functionality: <""|internal|x.y.z.y:1234> - "users_conns": [], // address where to reach the user service, empty to disable user profile functionality: <""|internal|x.y.z.y:1234> - "aliases_conns": [], // address where to reach the aliases service, empty to disable aliases functionality: <""|internal|x.y.z.y:1234> - "cdrstats_conns": [], // address where to reach the cdrstats service, empty to disable stats functionality<""|internal|x.y.z.y:1234> + "pubsubs_conns": [], // address where to reach the pubusb service, empty to disable pubsub functionality: <""|*internal|x.y.z.y:1234> + "users_conns": [], // address where to reach the user service, empty to disable user profile functionality: <""|*internal|x.y.z.y:1234> + "aliases_conns": [], // address where to reach the aliases service, empty to disable aliases functionality: <""|*internal|x.y.z.y:1234> + "cdrstats_conns": [], // address where to reach the cdrstats service, empty to disable stats functionality<""|*internal|x.y.z.y:1234> "cdr_replication":[] // replicate the raw CDR to a number of servers }, @@ -171,7 +170,9 @@ const CGRATES_CFG_JSON = ` "*default": { "enabled": false, // enable CDR client functionality "dry_run": false, // do not send the CDRs to CDRS, just parse them - "cdrs": "internal", // address where to reach CDR server. + "cdrs_conns": [ + {"address": "*internal"} // address where to reach CDR server. <*internal|x.y.z.y:1234> + ], "cdr_format": "csv", // CDR file format "field_separator": ",", // separator used in case of csv files "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> @@ -207,61 +208,61 @@ 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 - "rater_conns": [ - {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> - ], + "rals_conns": [ + {"address": "*internal"} // address where to reach the Rater <""|*internal|127.0.0.1:2013> + ], "cdrs_conns": [ - {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing - ], + {"address": "*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. "min_call_duration": "0s", // only authorize calls with allowed duration higher than this "max_call_duration": "3h", // maximum call duration a prepaid call can last - "session_ttl": "0s", // time after a session with no updates is terminated, not defined by default - //"session_ttl_last_used": "", // tweak LastUsed for sessions timing-out, not defined by default - //"session_ttl_usage": "", // tweak Usage for sessions timing-out, not defined by default + "session_ttl": "0s", // time after a session with no updates is terminated, not defined by default + //"session_ttl_last_used": "", // tweak LastUsed for sessions timing-out, not defined by default + //"session_ttl_usage": "", // tweak Usage for sessions timing-out, not defined by default }, "sm_freeswitch": { "enabled": false, // starts SessionManager service: - "rater_conns": [ - {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> + "rals_conns": [ + {"address": "*internal"} // address where to reach the Rater <""|*internal|127.0.0.1:2013> ], "cdrs_conns": [ - {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing + {"address": "*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 - "extra_fields": [], // extra fields to store in auth/CDRs when creating them - "debit_interval": "10s", // interval to perform debits on. - "min_call_duration": "0s", // only authorize calls with allowed duration higher than this - "max_call_duration": "3h", // maximum call duration a prepaid call can last - "min_dur_low_balance": "5s", // threshold which will trigger low balance warnings for prepaid calls (needs to be lower than debit_interval) - "low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls - "empty_balance_context": "", // if defined, prepaid calls will be transfered to this context on empty balance - "empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined) - "subscribe_park": true, // subscribe via fsock to receive park events - "channel_sync_interval": "5m", // sync channels with freeswitch regularly - "max_wait_connection": "2s", // maximum duration to wait for a connection to be retrieved from the pool - "connections":[ // instantiate connections to multiple FreeSWITCH servers - {"server": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5} + "create_cdr": false, // create CDR out of events and sends them to CDRS component + "extra_fields": [], // extra fields to store in auth/CDRs when creating them + "debit_interval": "10s", // interval to perform debits on. + "min_call_duration": "0s", // only authorize calls with allowed duration higher than this + "max_call_duration": "3h", // maximum call duration a prepaid call can last + "min_dur_low_balance": "5s", // threshold which will trigger low balance warnings for prepaid calls (needs to be lower than debit_interval) + "low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls + "empty_balance_context": "", // if defined, prepaid calls will be transfered to this context on empty balance + "empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined) + "subscribe_park": true, // subscribe via fsock to receive park events + "channel_sync_interval": "5m", // sync channels with freeswitch regularly + "max_wait_connection": "2s", // maximum duration to wait for a connection to be retrieved from the pool + "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers + {"address": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5} ], }, "sm_kamailio": { - "enabled": false, // starts SessionManager service: - "rater_conns": [ - {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> + "enabled": false, // starts SessionManager service: + "rals_conns": [ + {"address": "*internal"} // address where to reach the Rater <""|*internal|127.0.0.1:2013> ], "cdrs_conns": [ - {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing + {"address": "*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 - "debit_interval": "10s", // interval to perform debits on. - "min_call_duration": "0s", // only authorize calls with allowed duration higher than this - "max_call_duration": "3h", // maximum call duration a prepaid call can last - "connections":[ // instantiate connections to multiple Kamailio servers - {"evapi_addr": "127.0.0.1:8448", "reconnects": 5} + "create_cdr": false, // create CDR out of events and sends them to CDRS component + "debit_interval": "10s", // interval to perform debits on. + "min_call_duration": "0s", // only authorize calls with allowed duration higher than this + "max_call_duration": "3h", // maximum call duration a prepaid call can last + "evapi_conns":[ // instantiate connections to multiple Kamailio servers + {"address": "127.0.0.1:8448", "reconnects": 5} ], }, @@ -269,11 +270,11 @@ 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 - "rater_conns": [ - {"server": "internal"} // address where to reach the Rater <""|internal|127.0.0.1:2013> + "rals_conns": [ + {"address": "*internal"} // address where to reach the Rater <""|*internal|127.0.0.1:2013> ], "cdrs_conns": [ - {"server": "internal"} // address where to reach CDR Server, empty to disable CDR capturing + {"address": "*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 "create_cdr": false, // create CDR out of events and sends it to CDRS component @@ -290,9 +291,9 @@ const CGRATES_CFG_JSON = ` "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_conns": [ - {"server": "internal"} // connection towards SMG component for session management - ], - "pubsubs": [], // address where to reach the pubusb service, empty to disable pubsub functionality: <""|internal|x.y.z.y:1234> + {"address": "*internal"} // connection towards SMG component for session management + ], + "pubsubs_conns": [], // address where to reach the pubusb service, empty to disable pubsub functionality: <""|*internal|x.y.z.y:1234> "create_cdr": true, // create CDR out of CCR terminate and send it to SMG component "debit_interval": "5m", // interval for CCR updates "timezone": "", // timezone for timestamps where not specified, empty for general defaults <""|UTC|Local|$IANA_TZ_DB> @@ -359,7 +360,7 @@ const CGRATES_CFG_JSON = ` "mailer": { "server": "localhost", // the server to use when sending emails out "auth_user": "cgrates", // authenticate to email server using this user - "auth_passwd": "CGRateS.org", // authenticate to email server with this password + "auth_password": "CGRateS.org", // authenticate to email server with this password "from_address": "cgr-mailer@localhost.localdomain" // from address used when sending emails out }, diff --git a/config/config_json.go b/config/config_json.go index ff7dd366d..72b12a949 100644 --- a/config/config_json.go +++ b/config/config_json.go @@ -33,7 +33,7 @@ const ( DATADB_JSN = "data_db" STORDB_JSN = "stor_db" BALANCER_JSN = "balancer" - RATER_JSN = "rater" + RALS_JSN = "rals" SCHEDULER_JSN = "scheduler" CDRS_JSN = "cdrs" MEDIATOR_JSN = "mediator" @@ -128,12 +128,12 @@ func (self CgrJsonCfg) BalancerJsonCfg() (*BalancerJsonCfg, error) { return cfg, nil } -func (self CgrJsonCfg) RaterJsonCfg() (*RaterJsonCfg, error) { - rawCfg, hasKey := self[RATER_JSN] +func (self CgrJsonCfg) RalsJsonCfg() (*RalsJsonCfg, error) { + rawCfg, hasKey := self[RALS_JSN] if !hasKey { return nil, nil } - cfg := new(RaterJsonCfg) + cfg := new(RalsJsonCfg) if err := json.Unmarshal(*rawCfg, cfg); err != nil { return nil, err } diff --git a/config/config_json_test.go b/config/config_json_test.go index 532282535..c6de54cdd 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -44,10 +44,9 @@ func TestDfGeneralJsonCfg(t *testing.T) { Dbdata_encoding: utils.StringPointer("msgpack"), Tpexport_dir: utils.StringPointer("/var/log/cgrates/tpe"), Http_failed_dir: utils.StringPointer("/var/log/cgrates/http_failed"), - Default_reqtype: utils.StringPointer(utils.META_RATED), + Default_request_type: utils.StringPointer(utils.META_RATED), Default_category: utils.StringPointer("call"), Default_tenant: utils.StringPointer("cgrates.org"), - Default_subject: utils.StringPointer("cgrates"), Default_timezone: utils.StringPointer("Local"), Connect_attempts: utils.IntPointer(3), Reconnects: utils.IntPointer(-1), @@ -74,12 +73,12 @@ func TestDfListenJsonCfg(t *testing.T) { func TestDfDbJsonCfg(t *testing.T) { eCfg := &DbJsonCfg{ - Db_type: utils.StringPointer("redis"), - Db_host: utils.StringPointer("127.0.0.1"), - Db_port: utils.IntPointer(6379), - Db_name: utils.StringPointer("10"), - Db_user: utils.StringPointer(""), - Db_passwd: utils.StringPointer(""), + Db_type: utils.StringPointer("redis"), + Db_host: utils.StringPointer("127.0.0.1"), + Db_port: utils.IntPointer(6379), + Db_name: utils.StringPointer("10"), + Db_user: utils.StringPointer(""), + Db_password: utils.StringPointer(""), } if cfg, err := dfCgrJsonCfg.DbJsonCfg(TPDB_JSN); err != nil { t.Error(err) @@ -92,7 +91,7 @@ func TestDfDbJsonCfg(t *testing.T) { Db_port: utils.IntPointer(6379), Db_name: utils.StringPointer("11"), Db_user: utils.StringPointer(""), - Db_passwd: utils.StringPointer(""), + Db_password: utils.StringPointer(""), Load_history_size: utils.IntPointer(10), } if cfg, err := dfCgrJsonCfg.DbJsonCfg(DATADB_JSN); err != nil { @@ -106,7 +105,7 @@ func TestDfDbJsonCfg(t *testing.T) { Db_port: utils.IntPointer(3306), Db_name: utils.StringPointer("cgrates"), Db_user: utils.StringPointer("cgrates"), - Db_passwd: utils.StringPointer("CGRateS.org"), + Db_password: utils.StringPointer("CGRateS.org"), Max_open_conns: utils.IntPointer(100), Max_idle_conns: utils.IntPointer(10), Cdrs_indexes: utils.StringSlicePointer([]string{}), @@ -127,10 +126,11 @@ func TestDfBalancerJsonCfg(t *testing.T) { } } -func TestDfRaterJsonCfg(t *testing.T) { - eCfg := &RaterJsonCfg{Enabled: utils.BoolPointer(false), Balancer: utils.StringPointer(""), Cdrstats: utils.StringPointer(""), - Historys: utils.StringPointer(""), Pubsubs: utils.StringPointer(""), Users: utils.StringPointer(""), Aliases: utils.StringPointer(""), Rp_subject_prefix_matching: utils.BoolPointer(false), Lcr_subject_prefix_matching: utils.BoolPointer(false)} - if cfg, err := dfCgrJsonCfg.RaterJsonCfg(); err != nil { +func TestDfRalsJsonCfg(t *testing.T) { + eCfg := &RalsJsonCfg{Enabled: utils.BoolPointer(false), Balancer: utils.StringPointer(""), Cdrstats_conns: &[]*HaPoolJsonCfg{}, + Historys_conns: &[]*HaPoolJsonCfg{}, Pubsubs_conns: &[]*HaPoolJsonCfg{}, Users_conns: &[]*HaPoolJsonCfg{}, Aliases_conns: &[]*HaPoolJsonCfg{}, + Rp_subject_prefix_matching: utils.BoolPointer(false), Lcr_subject_prefix_matching: utils.BoolPointer(false)} + if cfg, err := dfCgrJsonCfg.RalsJsonCfg(); err != nil { t.Error(err) } else if !reflect.DeepEqual(eCfg, cfg) { t.Errorf("Received: %+v", cfg) @@ -151,9 +151,9 @@ func TestDfCdrsJsonCfg(t *testing.T) { Enabled: utils.BoolPointer(false), Extra_fields: utils.StringSlicePointer([]string{}), Store_cdrs: utils.BoolPointer(true), - Rater_conns: &[]*HaPoolJsonCfg{ + Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer("*internal"), }}, Pubsubs_conns: &[]*HaPoolJsonCfg{}, Users_conns: &[]*HaPoolJsonCfg{}, @@ -304,9 +304,11 @@ func TestDfCdrcJsonCfg(t *testing.T) { } eCfg := map[string]*CdrcJsonCfg{ "*default": &CdrcJsonCfg{ - Enabled: utils.BoolPointer(false), - Dry_run: utils.BoolPointer(false), - Cdrs: utils.StringPointer("internal"), + Enabled: utils.BoolPointer(false), + Dry_run: utils.BoolPointer(false), + Cdrs_conns: &[]*HaPoolJsonCfg{&HaPoolJsonCfg{ + Address: utils.StringPointer(utils.MetaInternal), + }}, Cdr_format: utils.StringPointer("csv"), Field_separator: utils.StringPointer(","), Timezone: utils.StringPointer(""), @@ -336,13 +338,13 @@ func TestSmGenericJsonCfg(t *testing.T) { eCfg := &SmGenericJsonCfg{ Enabled: utils.BoolPointer(false), Listen_bijson: utils.StringPointer("127.0.0.1:2014"), - Rater_conns: &[]*HaPoolJsonCfg{ + Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Debit_interval: utils.StringPointer("0s"), Min_call_duration: utils.StringPointer("0s"), @@ -359,13 +361,13 @@ func TestSmGenericJsonCfg(t *testing.T) { func TestSmFsJsonCfg(t *testing.T) { eCfg := &SmFsJsonCfg{ Enabled: utils.BoolPointer(false), - Rater_conns: &[]*HaPoolJsonCfg{ + Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Create_cdr: utils.BoolPointer(false), Extra_fields: utils.StringSlicePointer([]string{}), @@ -379,9 +381,9 @@ func TestSmFsJsonCfg(t *testing.T) { Subscribe_park: utils.BoolPointer(true), Channel_sync_interval: utils.StringPointer("5m"), Max_wait_connection: utils.StringPointer("2s"), - Connections: &[]*FsConnJsonCfg{ + Event_socket_conns: &[]*FsConnJsonCfg{ &FsConnJsonCfg{ - Server: utils.StringPointer("127.0.0.1:8021"), + Address: utils.StringPointer("127.0.0.1:8021"), Password: utils.StringPointer("ClueCon"), Reconnects: utils.IntPointer(5), }}, @@ -396,21 +398,21 @@ func TestSmFsJsonCfg(t *testing.T) { func TestSmKamJsonCfg(t *testing.T) { eCfg := &SmKamJsonCfg{ Enabled: utils.BoolPointer(false), - Rater_conns: &[]*HaPoolJsonCfg{ + Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Create_cdr: utils.BoolPointer(false), Debit_interval: utils.StringPointer("10s"), Min_call_duration: utils.StringPointer("0s"), Max_call_duration: utils.StringPointer("3h"), - Connections: &[]*KamConnJsonCfg{ + Evapi_conns: &[]*KamConnJsonCfg{ &KamConnJsonCfg{ - Evapi_addr: utils.StringPointer("127.0.0.1:8448"), + Address: utils.StringPointer("127.0.0.1:8448"), Reconnects: utils.IntPointer(5), }, }, @@ -426,13 +428,13 @@ func TestSmOsipsJsonCfg(t *testing.T) { eCfg := &SmOsipsJsonCfg{ Enabled: utils.BoolPointer(false), Listen_udp: utils.StringPointer("127.0.0.1:2020"), - Rater_conns: &[]*HaPoolJsonCfg{ + Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Cdrs_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Create_cdr: utils.BoolPointer(false), Debit_interval: utils.StringPointer("10s"), @@ -455,7 +457,7 @@ func TestDiameterAgentJsonCfg(t *testing.T) { Dictionaries_dir: utils.StringPointer("/usr/share/cgrates/diameter/dict/"), Sm_generic_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ - Server: utils.StringPointer("internal"), + Address: utils.StringPointer(utils.MetaInternal), }}, Pubsub_conns: nil, Create_cdr: utils.BoolPointer(true), @@ -567,10 +569,10 @@ func TestDfUserServJsonCfg(t *testing.T) { func TestDfMailerJsonCfg(t *testing.T) { eCfg := &MailerJsonCfg{ - Server: utils.StringPointer("localhost"), - Auth_user: utils.StringPointer("cgrates"), - Auth_passwd: utils.StringPointer("CGRateS.org"), - From_address: utils.StringPointer("cgr-mailer@localhost.localdomain"), + Server: utils.StringPointer("localhost"), + Auth_user: utils.StringPointer("cgrates"), + Auth_password: utils.StringPointer("CGRateS.org"), + From_address: utils.StringPointer("cgr-mailer@localhost.localdomain"), } if cfg, err := dfCgrJsonCfg.MailerJsonCfg(); err != nil { t.Error(err) @@ -620,11 +622,11 @@ func TestNewCgrJsonCfgFromFile(t *testing.T) { if err != nil { t.Error(err) } - eCfg := &GeneralJsonCfg{Default_reqtype: utils.StringPointer(utils.META_PSEUDOPREPAID)} + eCfg := &GeneralJsonCfg{Default_request_type: utils.StringPointer(utils.META_PSEUDOPREPAID)} if gCfg, err := cgrJsonCfg.GeneralJsonCfg(); err != nil { t.Error(err) } else if !reflect.DeepEqual(eCfg, gCfg) { - t.Error("Received: ", gCfg) + t.Errorf("Expecting: %+v, received: ", eCfg, gCfg) } cdrFields := []*CdrFieldJsonCfg{ &CdrFieldJsonCfg{Field_id: utils.StringPointer(utils.TOR), Value: utils.StringPointer("~7:s/^(voice|data|sms|mms|generic)$/*$1/")}, @@ -651,18 +653,19 @@ func TestNewCgrJsonCfgFromFile(t *testing.T) { if cfg, err := cgrJsonCfg.CdrcJsonCfg(); err != nil { t.Error(err) } else if !reflect.DeepEqual(eCfgCdrc, cfg) { - t.Error("Received: ", utils.ToIJSON(cfg["CDRC-CSV2"])) + key := "CDRC-CSV2" + t.Errorf("Expecting:\n %+v\n received:\n %+v\n", utils.ToIJSON(eCfgCdrc[key]), utils.ToIJSON(cfg[key])) } eCfgSmFs := &SmFsJsonCfg{ Enabled: utils.BoolPointer(true), - Connections: &[]*FsConnJsonCfg{ + Event_socket_conns: &[]*FsConnJsonCfg{ &FsConnJsonCfg{ - Server: utils.StringPointer("1.2.3.4:8021"), + Address: utils.StringPointer("1.2.3.4:8021"), Password: utils.StringPointer("ClueCon"), Reconnects: utils.IntPointer(5), }, &FsConnJsonCfg{ - Server: utils.StringPointer("2.3.4.5:8021"), + Address: utils.StringPointer("2.3.4.5:8021"), Password: utils.StringPointer("ClueCon"), Reconnects: utils.IntPointer(5), }, diff --git a/config/config_test.go b/config/config_test.go index d9f3ff7ee..204aaa8b9 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -39,18 +39,18 @@ func TestLoadCgrCfgWithDefaults(t *testing.T) { { "sm_freeswitch": { "enabled": true, // starts SessionManager service: - "connections":[ // instantiate connections to multiple FreeSWITCH servers - {"server": "1.2.3.4:8021", "password": "ClueCon", "reconnects": 3}, - {"server": "1.2.3.5:8021", "password": "ClueCon", "reconnects": 5} + "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers + {"address": "1.2.3.4:8021", "password": "ClueCon", "reconnects": 3}, + {"address": "1.2.3.5:8021", "password": "ClueCon", "reconnects": 5} ], }, }` eCgrCfg, _ := NewDefaultCGRConfig() eCgrCfg.SmFsConfig.Enabled = true - eCgrCfg.SmFsConfig.Connections = []*FsConnConfig{ - &FsConnConfig{Server: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 3}, - &FsConnConfig{Server: "1.2.3.5:8021", Password: "ClueCon", Reconnects: 5}, + eCgrCfg.SmFsConfig.EventSocketConns = []*FsConnConfig{ + &FsConnConfig{Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 3}, + &FsConnConfig{Address: "1.2.3.5:8021", Password: "ClueCon", Reconnects: 5}, } if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) diff --git a/config/configcdrc_test.go b/config/configcdrc_test.go index 621a07b70..497f4bfd4 100644 --- a/config/configcdrc_test.go +++ b/config/configcdrc_test.go @@ -37,7 +37,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { eCgrCfg.CdrcProfiles["/var/log/cgrates/cdrc/in"] = map[string]*CdrcConfig{ "*default": &CdrcConfig{ Enabled: false, - Cdrs: "internal", + CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: ',', DataUsageMultiplyFactor: 1024, @@ -82,7 +82,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { eCgrCfg.CdrcProfiles["/tmp/cgrates/cdrc1/in"] = map[string]*CdrcConfig{ "CDRC-CSV1": &CdrcConfig{ Enabled: true, - Cdrs: "internal", + CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: ',', DataUsageMultiplyFactor: 1024, @@ -125,7 +125,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { eCgrCfg.CdrcProfiles["/tmp/cgrates/cdrc2/in"] = map[string]*CdrcConfig{ "CDRC-CSV2": &CdrcConfig{ Enabled: true, - Cdrs: "internal", + CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: ',', DataUsageMultiplyFactor: 0.000976563, @@ -148,7 +148,7 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) { eCgrCfg.CdrcProfiles["/tmp/cgrates/cdrc3/in"] = map[string]*CdrcConfig{ "CDRC-CSV3": &CdrcConfig{ Enabled: true, - Cdrs: "internal", + CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: ',', DataUsageMultiplyFactor: 1024, diff --git a/config/libconfig.go b/config/libconfig.go index af5dfb6c4..1471fdaa0 100644 --- a/config/libconfig.go +++ b/config/libconfig.go @@ -26,12 +26,12 @@ import ( type CdrReplicationCfg struct { Transport string - Server string + Address string Synchronous bool Attempts int // Number of attempts if not success CdrFilter utils.RSRFields // Only replicate if the filters here are matching } func (rplCfg CdrReplicationCfg) FallbackFileName() string { - return fmt.Sprintf("cdr_%s_%s_%s.form", rplCfg.Transport, url.QueryEscape(rplCfg.Server), utils.GenUUID()) + return fmt.Sprintf("cdr_%s_%s_%s.form", rplCfg.Transport, url.QueryEscape(rplCfg.Address), utils.GenUUID()) } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index a688896d4..8f8ea6c17 100644 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -25,10 +25,9 @@ type GeneralJsonCfg struct { Dbdata_encoding *string Tpexport_dir *string Http_failed_dir *string - Default_reqtype *string + Default_request_type *string Default_category *string Default_tenant *string - Default_subject *string Default_timezone *string Connect_attempts *int Reconnects *int @@ -50,7 +49,7 @@ type DbJsonCfg struct { Db_port *int Db_name *string Db_user *string - Db_passwd *string + Db_password *string Max_open_conns *int // Used only in case of storDb Max_idle_conns *int Load_history_size *int // Used in case of dataDb to limit the length of the loads history @@ -63,14 +62,14 @@ type BalancerJsonCfg struct { } // Rater config section -type RaterJsonCfg struct { +type RalsJsonCfg struct { Enabled *bool Balancer *string - Cdrstats *string - Historys *string - Pubsubs *string - Aliases *string - Users *string + Cdrstats_conns *[]*HaPoolJsonCfg + Historys_conns *[]*HaPoolJsonCfg + Pubsubs_conns *[]*HaPoolJsonCfg + Aliases_conns *[]*HaPoolJsonCfg + Users_conns *[]*HaPoolJsonCfg Rp_subject_prefix_matching *bool Lcr_subject_prefix_matching *bool } @@ -85,7 +84,7 @@ type CdrsJsonCfg struct { Enabled *bool Extra_fields *[]string Store_cdrs *bool - Rater_conns *[]*HaPoolJsonCfg + Rals_conns *[]*HaPoolJsonCfg Pubsubs_conns *[]*HaPoolJsonCfg Users_conns *[]*HaPoolJsonCfg Aliases_conns *[]*HaPoolJsonCfg @@ -95,7 +94,7 @@ type CdrsJsonCfg struct { type CdrReplicationJsonCfg struct { Transport *string - Server *string + Address *string Synchronous *bool Attempts *int Cdr_filter *string @@ -146,7 +145,7 @@ type CdreJsonCfg struct { type CdrcJsonCfg struct { Enabled *bool Dry_run *bool - Cdrs *string + Cdrs_conns *[]*HaPoolJsonCfg Cdr_format *string Field_separator *string Timezone *string @@ -169,7 +168,7 @@ type CdrcJsonCfg struct { type SmGenericJsonCfg struct { Enabled *bool Listen_bijson *string - Rater_conns *[]*HaPoolJsonCfg + Rals_conns *[]*HaPoolJsonCfg Cdrs_conns *[]*HaPoolJsonCfg Debit_interval *string Min_call_duration *string @@ -182,7 +181,7 @@ type SmGenericJsonCfg struct { // SM-FreeSWITCH config section type SmFsJsonCfg struct { Enabled *bool - Rater_conns *[]*HaPoolJsonCfg + Rals_conns *[]*HaPoolJsonCfg Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Extra_fields *[]string @@ -196,17 +195,17 @@ type SmFsJsonCfg struct { Subscribe_park *bool Channel_sync_interval *string Max_wait_connection *string - Connections *[]*FsConnJsonCfg + Event_socket_conns *[]*FsConnJsonCfg } // Represents one connection instance towards a rater/cdrs server type HaPoolJsonCfg struct { - Server *string + Address *string } // Represents one connection instance towards FreeSWITCH type FsConnJsonCfg struct { - Server *string + Address *string Password *string Reconnects *int } @@ -214,18 +213,18 @@ type FsConnJsonCfg struct { // SM-Kamailio config section type SmKamJsonCfg struct { Enabled *bool - Rater_conns *[]*HaPoolJsonCfg + Rals_conns *[]*HaPoolJsonCfg Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Debit_interval *string Min_call_duration *string Max_call_duration *string - Connections *[]*KamConnJsonCfg + Evapi_conns *[]*KamConnJsonCfg } // Represents one connection instance towards Kamailio type KamConnJsonCfg struct { - Evapi_addr *string + Address *string Reconnects *int } @@ -233,7 +232,7 @@ type KamConnJsonCfg struct { type SmOsipsJsonCfg struct { Enabled *bool Listen_udp *string - Rater_conns *[]*HaPoolJsonCfg + Rals_conns *[]*HaPoolJsonCfg Cdrs_conns *[]*HaPoolJsonCfg Create_cdr *bool Debit_interval *string @@ -305,10 +304,10 @@ type UserServJsonCfg struct { // Mailer config section type MailerJsonCfg struct { - Server *string - Auth_user *string - Auth_passwd *string - From_address *string + Server *string + Auth_user *string + Auth_password *string + From_address *string } // SureTax config section diff --git a/config/smconfig.go b/config/smconfig.go index e03b79e28..a1113d7a2 100644 --- a/config/smconfig.go +++ b/config/smconfig.go @@ -35,15 +35,15 @@ func NewDfltHaPoolConfig() *HaPoolConfig { // One connection to Rater type HaPoolConfig struct { - Server string + Address string } func (self *HaPoolConfig) loadFromJsonCfg(jsnCfg *HaPoolJsonCfg) error { if jsnCfg == nil { return nil } - if jsnCfg.Server != nil { - self.Server = *jsnCfg.Server + if jsnCfg.Address != nil { + self.Address = *jsnCfg.Address } return nil } @@ -59,7 +59,7 @@ func NewDfltFsConnConfig() *FsConnConfig { // One connection to FreeSWITCH server type FsConnConfig struct { - Server string + Address string Password string Reconnects int } @@ -68,8 +68,8 @@ func (self *FsConnConfig) loadFromJsonCfg(jsnCfg *FsConnJsonCfg) error { if jsnCfg == nil { return nil } - if jsnCfg.Server != nil { - self.Server = *jsnCfg.Server + if jsnCfg.Address != nil { + self.Address = *jsnCfg.Address } if jsnCfg.Password != nil { self.Password = *jsnCfg.Password @@ -83,8 +83,8 @@ func (self *FsConnConfig) loadFromJsonCfg(jsnCfg *FsConnJsonCfg) error { type SmGenericConfig struct { Enabled bool ListenBijson string - RaterConns []*HaPoolConfig - CdrsConns []*HaPoolConfig + RALsConns []*HaPoolConfig + CDRsConns []*HaPoolConfig DebitInterval time.Duration MinCallDuration time.Duration MaxCallDuration time.Duration @@ -104,18 +104,18 @@ func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { if jsnCfg.Listen_bijson != nil { self.ListenBijson = *jsnCfg.Listen_bijson } - 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.Rals_conns != nil { + self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rals_conns { + self.RALsConns[idx] = NewDfltHaPoolConfig() + self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { - self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - self.CdrsConns[idx] = NewDfltHaPoolConfig() - self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) + self.CDRsConns[idx] = NewDfltHaPoolConfig() + self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Debit_interval != nil { @@ -157,8 +157,8 @@ func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { type SmFsConfig struct { Enabled bool - RaterConns []*HaPoolConfig - CdrsConns []*HaPoolConfig + RALsConns []*HaPoolConfig + CDRsConns []*HaPoolConfig CreateCdr bool ExtraFields []*utils.RSRField DebitInterval time.Duration @@ -171,7 +171,7 @@ type SmFsConfig struct { SubscribePark bool ChannelSyncInterval time.Duration MaxWaitConnection time.Duration - Connections []*FsConnConfig + EventSocketConns []*FsConnConfig } func (self *SmFsConfig) loadFromJsonCfg(jsnCfg *SmFsJsonCfg) error { @@ -182,18 +182,18 @@ func (self *SmFsConfig) loadFromJsonCfg(jsnCfg *SmFsJsonCfg) error { if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } - 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.Rals_conns != nil { + self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rals_conns { + self.RALsConns[idx] = NewDfltHaPoolConfig() + self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { - self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - self.CdrsConns[idx] = NewDfltHaPoolConfig() - self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) + self.CDRsConns[idx] = NewDfltHaPoolConfig() + self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { @@ -246,11 +246,11 @@ func (self *SmFsConfig) loadFromJsonCfg(jsnCfg *SmFsJsonCfg) error { return err } } - if jsnCfg.Connections != nil { - self.Connections = make([]*FsConnConfig, len(*jsnCfg.Connections)) - for idx, jsnConnCfg := range *jsnCfg.Connections { - self.Connections[idx] = NewDfltFsConnConfig() - self.Connections[idx].loadFromJsonCfg(jsnConnCfg) + if jsnCfg.Event_socket_conns != nil { + self.EventSocketConns = make([]*FsConnConfig, len(*jsnCfg.Event_socket_conns)) + for idx, jsnConnCfg := range *jsnCfg.Event_socket_conns { + self.EventSocketConns[idx] = NewDfltFsConnConfig() + self.EventSocketConns[idx].loadFromJsonCfg(jsnConnCfg) } } return nil @@ -267,7 +267,7 @@ func NewDfltKamConnConfig() *KamConnConfig { // Represents one connection instance towards Kamailio type KamConnConfig struct { - EvapiAddr string + Address string Reconnects int } @@ -275,8 +275,8 @@ func (self *KamConnConfig) loadFromJsonCfg(jsnCfg *KamConnJsonCfg) error { if jsnCfg == nil { return nil } - if jsnCfg.Evapi_addr != nil { - self.EvapiAddr = *jsnCfg.Evapi_addr + if jsnCfg.Address != nil { + self.Address = *jsnCfg.Address } if jsnCfg.Reconnects != nil { self.Reconnects = *jsnCfg.Reconnects @@ -287,13 +287,13 @@ func (self *KamConnConfig) loadFromJsonCfg(jsnCfg *KamConnJsonCfg) error { // SM-Kamailio config section type SmKamConfig struct { Enabled bool - RaterConns []*HaPoolConfig - CdrsConns []*HaPoolConfig + RALsConns []*HaPoolConfig + CDRsConns []*HaPoolConfig CreateCdr bool DebitInterval time.Duration MinCallDuration time.Duration MaxCallDuration time.Duration - Connections []*KamConnConfig + EvapiConns []*KamConnConfig } func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { @@ -304,18 +304,18 @@ func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } - 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.Rals_conns != nil { + self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rals_conns { + self.RALsConns[idx] = NewDfltHaPoolConfig() + self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { - self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - self.CdrsConns[idx] = NewDfltHaPoolConfig() - self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) + self.CDRsConns[idx] = NewDfltHaPoolConfig() + self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { @@ -336,11 +336,11 @@ func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { return err } } - if jsnCfg.Connections != nil { - self.Connections = make([]*KamConnConfig, len(*jsnCfg.Connections)) - for idx, jsnConnCfg := range *jsnCfg.Connections { - self.Connections[idx] = NewDfltKamConnConfig() - self.Connections[idx].loadFromJsonCfg(jsnConnCfg) + if jsnCfg.Evapi_conns != nil { + self.EvapiConns = make([]*KamConnConfig, len(*jsnCfg.Evapi_conns)) + for idx, jsnConnCfg := range *jsnCfg.Evapi_conns { + self.EvapiConns[idx] = NewDfltKamConnConfig() + self.EvapiConns[idx].loadFromJsonCfg(jsnConnCfg) } } return nil @@ -366,8 +366,8 @@ func (self *OsipsConnConfig) loadFromJsonCfg(jsnCfg *OsipsConnJsonCfg) error { type SmOsipsConfig struct { Enabled bool ListenUdp string - RaterConns []*HaPoolConfig - CdrsConns []*HaPoolConfig + RALsConns []*HaPoolConfig + CDRsConns []*HaPoolConfig CreateCdr bool DebitInterval time.Duration MinCallDuration time.Duration @@ -384,18 +384,18 @@ func (self *SmOsipsConfig) loadFromJsonCfg(jsnCfg *SmOsipsJsonCfg) error { if jsnCfg.Listen_udp != nil { self.ListenUdp = *jsnCfg.Listen_udp } - 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.Rals_conns != nil { + self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) + for idx, jsnHaCfg := range *jsnCfg.Rals_conns { + self.RALsConns[idx] = NewDfltHaPoolConfig() + self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { - self.CdrsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) + self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { - self.CdrsConns[idx] = NewDfltHaPoolConfig() - self.CdrsConns[idx].loadFromJsonCfg(jsnHaCfg) + self.CDRsConns[idx] = NewDfltHaPoolConfig() + self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { diff --git a/config/smconfig_test.go b/config/smconfig_test.go index 4276f9089..c279de16f 100644 --- a/config/smconfig_test.go +++ b/config/smconfig_test.go @@ -29,14 +29,14 @@ func TesSmFsConfigLoadFromJsonCfg(t *testing.T) { Enabled: utils.BoolPointer(true), Create_cdr: utils.BoolPointer(true), Subscribe_park: utils.BoolPointer(true), - Connections: &[]*FsConnJsonCfg{ + Event_socket_conns: &[]*FsConnJsonCfg{ &FsConnJsonCfg{ - Server: utils.StringPointer("1.2.3.4:8021"), + Address: utils.StringPointer("1.2.3.4:8021"), Password: utils.StringPointer("ClueCon"), Reconnects: utils.IntPointer(5), }, &FsConnJsonCfg{ - Server: utils.StringPointer("2.3.4.5:8021"), + Address: utils.StringPointer("2.3.4.5:8021"), Password: utils.StringPointer("ClueCon"), Reconnects: utils.IntPointer(5), }, @@ -45,9 +45,9 @@ func TesSmFsConfigLoadFromJsonCfg(t *testing.T) { eSmFsConfig := &SmFsConfig{Enabled: true, CreateCdr: true, SubscribePark: true, - Connections: []*FsConnConfig{ - &FsConnConfig{Server: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5}, - &FsConnConfig{Server: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5}, + EventSocketConns: []*FsConnConfig{ + &FsConnConfig{Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5}, + &FsConnConfig{Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5}, }, } smFsCfg := new(SmFsConfig) diff --git a/utils/consts.go b/utils/consts.go index 7c7552f87..4c81a53c8 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -144,6 +144,7 @@ const ( DRYRUN = "dry_run" META_COMBIMED = "*combimed" INTERNAL = "internal" + MetaInternal = "*internal" ZERO_RATING_SUBJECT_PREFIX = "*zero" OK = "OK" CDRE_FIXED_WIDTH = "fwv"