From 30430652678d00d5b507015bc76740e81607e9df Mon Sep 17 00:00:00 2001 From: DanB Date: Sat, 16 May 2015 17:33:00 +0200 Subject: [PATCH] Config sanity checks added --- cmd/cgr-engine/cgr-engine.go | 27 --------------- config/cfg_data.json | 16 ++++----- config/config.go | 67 +++++++++++++++++++++++++++++++----- utils/consts.go | 2 +- 4 files changed, 65 insertions(+), 47 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index dc693b73c..bf355f8f3 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -19,7 +19,6 @@ along with this program. If not, see package main import ( - "errors" "flag" "fmt" "log" @@ -380,25 +379,6 @@ func serveHttp(httpWaitChans []chan struct{}) { server.ServeHTTP(cfg.HTTPListen) } -func checkConfigSanity() error { - /* - Add here checks on session manager - if cfg.SMEnabled && cfg.RaterEnabled && cfg.RaterBalancer != "" { - engine.Logger.Crit("The session manager must not be enabled on a worker engine (change [engine]/balancer to disabled)!") - return errors.New("SessionManager on Worker") - } - */ - if cfg.BalancerEnabled && cfg.RaterEnabled && cfg.RaterBalancer != "" { - engine.Logger.Crit("The balancer is enabled so it cannot connect to another balancer (change rater/balancer to disabled)!") - return errors.New("Improperly configured balancer") - } - if cfg.HistoryServerEnabled && cfg.HistoryServer == utils.INTERNAL && !cfg.HistoryServerEnabled { - engine.Logger.Crit("The history agent is enabled and internal and history server is disabled!") - return errors.New("Improperly configured history service") - } - return nil -} - func writePid() { engine.Logger.Info(*pidFile) f, err := os.Create(*pidFile) @@ -446,13 +426,6 @@ func main() { if *cdrsEnabled { cfg.CDRSEnabled = *cdrsEnabled } - - // some consitency checks - errCfg := checkConfigSanity() - if errCfg != nil { - engine.Logger.Crit(errCfg.Error()) - return - } var ratingDb engine.RatingStorage var accountDb engine.AccountingStorage var logDb engine.LogStorage diff --git a/config/cfg_data.json b/config/cfg_data.json index 96a18a79d..e6b6f1f96 100644 --- a/config/cfg_data.json +++ b/config/cfg_data.json @@ -10,16 +10,12 @@ "default_reqtype": "*pseudoprepaid", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> }, -"mediator": { - "enabled": true, // starts Mediator service: . - "reconnects": 5, // number of reconnects to rater/cdrs before giving up. - "rater": "internal", // address where to reach the Rater: - "cdrstats": "", // address where to reach the cdrstats service. Empty to disable stats gathering out of mediated CDRs <""|internal|x.y.z.y:1234> - "store_disable": false, // when true, CDRs will not longer be saved in stordb, useful for cdrstats only scenario - "cdr_replication":[ // replicate the rated CDR to a number of servers - {"transport": "*http_post", "server": "1.2.3.4:2080/cdr_post"}, - {"transport": "*http_jsonrpc", "server": "2.3.4.5:2080/jsonrpc", "synchronous": true, "cdr_filter": "~account:s/(.+)/1001/"}, - ], +"cdrs": { + "enabled": true, // start the CDR Server service: +}, + +"rater": { + "enabled": true, // enable Rater service: }, "cdrc": { diff --git a/config/config.go b/config/config.go index ebc2eefd5..e8f0fc93c 100644 --- a/config/config.go +++ b/config/config.go @@ -226,9 +226,35 @@ type CGRConfig struct { } func (self *CGRConfig) checkConfigSanity() error { + // Rater checks + if self.RaterEnabled { + if self.RaterBalancer == utils.INTERNAL && !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.") + } + } + // CDRServer checks + if self.CDRSEnabled { + if self.CDRSRater == utils.INTERNAL && !self.RaterEnabled { + return errors.New("Rater not enabled but requested by CDRS component.") + } + if self.CDRSStats == utils.INTERNAL && !self.CDRStatsEnabled { + return errors.New("CDRStats not enabled but requested by CDRS component.") + } + } // CDRC sanity checks - for _, cdrcInst := range self.CdrcProfiles["/var/log/cgrates/cdrc/in"] { - if cdrcInst.Enabled == true { + for _, cdrcCfgs := range self.CdrcProfiles { + for _, 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.CdrFields) == 0 { return errors.New("CdrC enabled but no fields to be processed defined!") } @@ -243,14 +269,37 @@ func (self *CGRConfig) checkConfigSanity() error { } } } - if self.CDRSStats == utils.INTERNAL && !self.CDRStatsEnabled { - return errors.New("CDRStats not enabled but requested by CDRS component.") - } - /* - if self.SMCdrS == utils.INTERNAL && !self.CDRSEnabled { - return errors.New("CDRS not enabled but requested by SessionManager") + // SM-FreeSWITCH checks + if self.SmFsConfig.Enabled { + if self.SmFsConfig.Rater == utils.INTERNAL && !self.RaterEnabled { + return errors.New("Rater not enabled but requested by SM-FreeSWITCH component.") } - */ + if self.SmFsConfig.Cdrs == utils.INTERNAL && !self.CDRSEnabled { + return errors.New("CDRS not enabled but referenced by SM-FreeSWITCH component") + } + } + // SM-Kamailio checks + if self.SmKamConfig.Enabled { + if self.SmKamConfig.Rater == utils.INTERNAL && !self.RaterEnabled { + return errors.New("Rater not enabled but requested by SM-Kamailio component.") + } + if self.SmKamConfig.Cdrs == utils.INTERNAL && !self.CDRSEnabled { + return errors.New("CDRS not enabled but referenced by SM-Kamailio component") + } + } + // SM-OpenSIPS checks + if self.SmOsipsConfig.Enabled { + if self.SmOsipsConfig.Rater == utils.INTERNAL && !self.RaterEnabled { + return errors.New("Rater not enabled but requested by SM-OpenSIPS component.") + } + if self.SmOsipsConfig.Cdrs == utils.INTERNAL && !self.CDRSEnabled { + return errors.New("CDRS not enabled but referenced by SM-OpenSIPS component") + } + } + // HistoryAgent + if self.HistoryAgentEnabled && !self.HistoryServerEnabled { + return errors.New("HistoryServer not enabled but referenced by HistoryAgent component") + } return nil } diff --git a/utils/consts.go b/utils/consts.go index 11634978c..b2d44175e 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -182,7 +182,7 @@ const ( META_HTTP_JSONRPC = "*http_jsonrpc" NANO_MULTIPLIER = 1000000000 CGR_AUTHORIZE = "CGR_AUTHORIZE" - CONFIG_DIR = "/etc/cgrates" + CONFIG_DIR = "/etc/cgrates/" CGR_SUPPLIER = "cgr_supplier" DISCONNECT_CAUSE = "disconnect_cause" CGR_DISCONNECT_CAUSE = "cgr_disconnect_cause"