From dae9768caae570f1dd03a6b7efc088c3441bc0dc Mon Sep 17 00:00:00 2001 From: DanB Date: Fri, 4 Aug 2017 07:47:30 +0200 Subject: [PATCH] Config stats added to rals and rls --- cmd/cgr-engine/cgr-engine.go | 9 +++++---- config/config.go | 29 +++++++++++++++++++++-------- config/config_defaults.go | 7 ++++--- config/config_json_test.go | 5 +++-- config/config_test.go | 2 +- config/libconfig_json.go | 3 ++- config/reslimitercfg.go | 12 ++++++------ 7 files changed, 42 insertions(+), 25 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index e4b0d03d0..ed0e1f471 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -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(" 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 { diff --git a/config/config.go b/config/config.go index 5b4fe2482..7678bb991 100755 --- a/config/config.go +++ b/config/config.go @@ -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 { diff --git a/config/config_defaults.go b/config/config_defaults.go index 50d58ec17..33a733a3f 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -112,6 +112,7 @@ const CGRATES_CFG_JSON = ` "rals": { "enabled": false, // enable Rater service: "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: . - "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: . + "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: . + "enabled": false, // starts Stat service: . "store_interval": "0s", // dump cache regularly to dataDB, 0 - dump at start/shutdown: <""|*never|$dur> }, diff --git a/config/config_json_test.go b/config/config_json_test.go index 43d2a5e7c..9c3597968 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -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 { diff --git a/config/config_test.go b/config/config_test.go index 82c83e989..650f7ae7c 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -554,7 +554,7 @@ func TestCgrCfgJSONDefaultsUserS(t *testing.T) { func TestCgrCfgJSONDefaultsResLimCfg(t *testing.T) { eResLiCfg := &ResourceLimiterConfig{ Enabled: false, - CDRStatConns: []*HaPoolConfig{}, + StatSConns: []*HaPoolConfig{}, StoreInterval: 0, } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 466ba37ac..3a6f83d9d 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -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 } diff --git a/config/reslimitercfg.go b/config/reslimitercfg.go index 2a69575f4..fe77fedf2 100644 --- a/config/reslimitercfg.go +++ b/config/reslimitercfg.go @@ -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 {