Config stats added to rals and rls

This commit is contained in:
DanB
2017-08-04 07:47:30 +02:00
parent 99905494e1
commit dae9768caa
7 changed files with 42 additions and 25 deletions

View File

@@ -527,12 +527,12 @@ func startUsersServer(internalUserSChan chan rpcclient.RpcClientConnection, data
internalUserSChan <- userServer
}
func startResourceLimiterService(internalRLSChan, internalCdrStatSChan chan rpcclient.RpcClientConnection, cfg *config.CGRConfig,
func startResourceLimiterService(internalRLSChan, internalStatSConn chan rpcclient.RpcClientConnection, cfg *config.CGRConfig,
dataDB engine.DataDB, server *utils.Server, exitChan chan bool) {
var statsConn *rpcclient.RpcClientPool
if len(cfg.ResourceLimiterCfg().CDRStatConns) != 0 { // Stats connection init
if len(cfg.ResourceLimiterCfg().StatSConns) != 0 { // Stats connection init
statsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout,
cfg.ResourceLimiterCfg().CDRStatConns, internalCdrStatSChan, cfg.InternalTtl)
cfg.ResourceLimiterCfg().StatSConns, internalStatSConn, cfg.InternalTtl)
if err != nil {
utils.Logger.Crit(fmt.Sprintf("<RLs> Could not connect to StatS: %s", err.Error()))
exitChan <- true
@@ -848,7 +848,8 @@ func main() {
// Start RL service
if cfg.ResourceLimiterCfg().Enabled {
go startResourceLimiterService(internalRLSChan, internalCdrStatSChan, cfg, dataDB, server, exitChan)
go startResourceLimiterService(internalRLSChan,
internalStatSChan, cfg, dataDB, server, exitChan)
}
if cfg.StatSCfg().Enabled {

View File

@@ -227,6 +227,7 @@ type CGRConfig struct {
LogLevel int // system wide log level, nothing higher than this will be logged
RALsEnabled bool // start standalone server (no balancer)
RALsCDRStatSConns []*HaPoolConfig // address where to reach the cdrstats service. Empty to disable stats gathering <""|internal|x.y.z.y:1234>
RALsStatSConns []*HaPoolConfig
RALsHistorySConns []*HaPoolConfig
RALsPubSubSConns []*HaPoolConfig
RALsUserSConns []*HaPoolConfig
@@ -283,27 +284,32 @@ func (self *CGRConfig) checkConfigSanity() error {
if self.RALsEnabled {
for _, connCfg := range self.RALsCDRStatSConns {
if connCfg.Address == utils.MetaInternal && !self.CDRStatsEnabled {
return errors.New("CDRStats not enabled but requested by Rater component.")
return errors.New("CDRStats not enabled but requested by RALs component.")
}
}
for _, connCfg := range self.RALsStatSConns {
if connCfg.Address == utils.MetaInternal && !self.statsCfg.Enabled {
return errors.New("StatS not enabled but requested by RALs 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.")
return errors.New("History server not enabled but requested by RALs 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.")
return errors.New("PubSub server not enabled but requested by RALs 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.")
return errors.New("Alias server not enabled but requested by RALs 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.")
return errors.New("User service not enabled but requested by RALs component.")
}
}
}
@@ -497,9 +503,9 @@ func (self *CGRConfig) checkConfigSanity() error {
}
// ResourceLimiter checks
if self.resourceLimiterCfg != nil && self.resourceLimiterCfg.Enabled {
for _, connCfg := range self.resourceLimiterCfg.CDRStatConns {
if connCfg.Address == utils.MetaInternal && !self.CDRStatsEnabled {
return errors.New("CDRStats not enabled but requested by ResourceLimiter component.")
for _, connCfg := range self.resourceLimiterCfg.StatSConns {
if connCfg.Address == utils.MetaInternal && !self.statsCfg.Enabled {
return errors.New("StatS not enabled but requested by ResourceLimiter component.")
}
}
}
@@ -817,6 +823,13 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) error {
self.RALsCDRStatSConns[idx].loadFromJsonCfg(jsnHaCfg)
}
}
if jsnRALsCfg.Stats_conns != nil {
self.RALsStatSConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Stats_conns))
for idx, jsnHaCfg := range *jsnRALsCfg.Stats_conns {
self.RALsStatSConns[idx] = NewDfltHaPoolConfig()
self.RALsStatSConns[idx].loadFromJsonCfg(jsnHaCfg)
}
}
if jsnRALsCfg.Historys_conns != nil {
self.RALsHistorySConns = make([]*HaPoolConfig, len(*jsnRALsCfg.Historys_conns))
for idx, jsnHaCfg := range *jsnRALsCfg.Historys_conns {

View File

@@ -112,6 +112,7 @@ const CGRATES_CFG_JSON = `
"rals": {
"enabled": false, // enable Rater service: <true|false>
"cdrstats_conns": [], // address where to reach the cdrstats service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"stats_conns": [], // address where to reach the stat 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>
@@ -404,14 +405,14 @@ const CGRATES_CFG_JSON = `
"rls": {
"enabled": false, // starts ResourceLimiter service: <true|false>.
"cdrstats_conns": [], // address where to reach the cdrstats service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"enabled": false, // starts ResourceLimiter service: <true|false>.
"stats_conns": [], // address where to reach the stats service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"store_interval": "0s", // dump cache regularly to dataDB, 0 - dump at start/shutdown: <""|*never|$dur>
},
"stats": {
"enabled": false, // starts Stat service: <true|false>.
"enabled": false, // starts Stat service: <true|false>.
"store_interval": "0s", // dump cache regularly to dataDB, 0 - dump at start/shutdown: <""|*never|$dur>
},

View File

@@ -175,7 +175,8 @@ func TestDfStorDBJsonCfg(t *testing.T) {
func TestDfRalsJsonCfg(t *testing.T) {
eCfg := &RalsJsonCfg{Enabled: utils.BoolPointer(false), Cdrstats_conns: &[]*HaPoolJsonCfg{},
Historys_conns: &[]*HaPoolJsonCfg{}, Pubsubs_conns: &[]*HaPoolJsonCfg{}, Users_conns: &[]*HaPoolJsonCfg{}, Aliases_conns: &[]*HaPoolJsonCfg{},
Stats_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)
@@ -667,7 +668,7 @@ func TestDfUserServJsonCfg(t *testing.T) {
func TestDfResourceLimiterSJsonCfg(t *testing.T) {
eCfg := &ResourceLimiterServJsonCfg{
Enabled: utils.BoolPointer(false),
Cdrstats_conns: &[]*HaPoolJsonCfg{},
Stats_conns: &[]*HaPoolJsonCfg{},
Store_interval: utils.StringPointer("0s"),
}
if cfg, err := dfCgrJsonCfg.ResourceLimiterJsonCfg(); err != nil {

View File

@@ -554,7 +554,7 @@ func TestCgrCfgJSONDefaultsUserS(t *testing.T) {
func TestCgrCfgJSONDefaultsResLimCfg(t *testing.T) {
eResLiCfg := &ResourceLimiterConfig{
Enabled: false,
CDRStatConns: []*HaPoolConfig{},
StatSConns: []*HaPoolConfig{},
StoreInterval: 0,
}

View File

@@ -74,6 +74,7 @@ type DbJsonCfg struct {
type RalsJsonCfg struct {
Enabled *bool
Cdrstats_conns *[]*HaPoolJsonCfg
Stats_conns *[]*HaPoolJsonCfg
Historys_conns *[]*HaPoolJsonCfg
Pubsubs_conns *[]*HaPoolJsonCfg
Aliases_conns *[]*HaPoolJsonCfg
@@ -380,7 +381,7 @@ type UserServJsonCfg struct {
// ResourceLimiter service config section
type ResourceLimiterServJsonCfg struct {
Enabled *bool
Cdrstats_conns *[]*HaPoolJsonCfg
Stats_conns *[]*HaPoolJsonCfg
Store_interval *string
}

View File

@@ -25,7 +25,7 @@ import (
type ResourceLimiterConfig struct {
Enabled bool
CDRStatConns []*HaPoolConfig // Connections towards CDRStatS
StatSConns []*HaPoolConfig // Connections towards StatS
StoreInterval time.Duration // Dump regularly from cache into dataDB
}
@@ -36,11 +36,11 @@ func (rlcfg *ResourceLimiterConfig) loadFromJsonCfg(jsnCfg *ResourceLimiterServJ
if jsnCfg.Enabled != nil {
rlcfg.Enabled = *jsnCfg.Enabled
}
if jsnCfg.Cdrstats_conns != nil {
rlcfg.CDRStatConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrstats_conns))
for idx, jsnHaCfg := range *jsnCfg.Cdrstats_conns {
rlcfg.CDRStatConns[idx] = NewDfltHaPoolConfig()
rlcfg.CDRStatConns[idx].loadFromJsonCfg(jsnHaCfg)
if jsnCfg.Stats_conns != nil {
rlcfg.StatSConns = make([]*HaPoolConfig, len(*jsnCfg.Stats_conns))
for idx, jsnHaCfg := range *jsnCfg.Stats_conns {
rlcfg.StatSConns[idx] = NewDfltHaPoolConfig()
rlcfg.StatSConns[idx].loadFromJsonCfg(jsnHaCfg)
}
}
if jsnCfg.Store_interval != nil {