Config sanity checks added

This commit is contained in:
DanB
2015-05-16 17:33:00 +02:00
parent d2b4df69ca
commit 3043065267
4 changed files with 65 additions and 47 deletions

View File

@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
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

View File

@@ -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: <true|false>.
"reconnects": 5, // number of reconnects to rater/cdrs before giving up.
"rater": "internal", // address where to reach the Rater: <internal|x.y.z.y:1234>
"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: <true|false>
},
"rater": {
"enabled": true, // enable Rater service: <true|false>
},
"cdrc": {

View File

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

View File

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