mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Refactored config parser to avoid overwriting defaults if options not in configuration file, added reconnects config parameter to session manager
This commit is contained in:
@@ -103,6 +103,7 @@ var (
|
||||
freeswitch_time_start = ""
|
||||
freeswitch_duration = ""
|
||||
freeswitch_uuid = ""
|
||||
freeswitch_reconnects = 5
|
||||
|
||||
cfgParseErr error
|
||||
|
||||
@@ -111,58 +112,7 @@ var (
|
||||
sm sessionmanager.SessionManager
|
||||
)
|
||||
|
||||
// this function will reset to zero values the variables that are not present
|
||||
func readConfig(c *conf.ConfigFile) {
|
||||
data_db_type, _ = c.GetString("global", "datadb_type")
|
||||
data_db_host, _ = c.GetString("global", "datadb_host")
|
||||
data_db_port, _ = c.GetString("global", "datadb_port")
|
||||
data_db_name, _ = c.GetString("global", "datadb_name")
|
||||
data_db_user, _ = c.GetString("global", "datadb_user")
|
||||
data_db_pass, _ = c.GetString("global", "datadb_passwd")
|
||||
log_db_type, _ = c.GetString("global", "logdb_type")
|
||||
log_db_host, _ = c.GetString("global", "logdb_host")
|
||||
log_db_port, _ = c.GetString("global", "logdb_port")
|
||||
log_db_name, _ = c.GetString("global", "logdb_name")
|
||||
log_db_user, _ = c.GetString("global", "logdb_user")
|
||||
log_db_pass, _ = c.GetString("global", "logdb_passwd")
|
||||
|
||||
rater_enabled, _ = c.GetBool("rater", "enabled")
|
||||
rater_balancer, _ = c.GetString("rater", "balancer")
|
||||
rater_listen, _ = c.GetString("rater", "listen")
|
||||
rater_rpc_encoding, _ = c.GetString("rater", "rpc_encoding")
|
||||
|
||||
balancer_enabled, _ = c.GetBool("balancer", "enabled")
|
||||
balancer_listen, _ = c.GetString("balancer", "listen")
|
||||
balancer_rpc_encoding, _ = c.GetString("balancer", "rpc_encoding")
|
||||
|
||||
scheduler_enabled, _ = c.GetBool("scheduler", "enabled")
|
||||
|
||||
sm_enabled, _ = c.GetBool("session_manager", "enabled")
|
||||
sm_switch_type, _ = c.GetString("session_manager", "switch_type")
|
||||
sm_rater, _ = c.GetString("session_manager", "rater")
|
||||
sm_debit_period, _ = c.GetInt("session_manager", "debit_period")
|
||||
sm_rpc_encoding, _ = c.GetString("session_manager", "rpc_encoding")
|
||||
|
||||
mediator_enabled, _ = c.GetBool("mediator", "enabled")
|
||||
mediator_cdr_path, _ = c.GetString("mediator", "cdr_path")
|
||||
mediator_cdr_out_path, _ = c.GetString("mediator", "cdr_out_path")
|
||||
mediator_rater, _ = c.GetString("mediator", "rater")
|
||||
mediator_rpc_encoding, _ = c.GetString("mediator", "rpc_encoding")
|
||||
mediator_skipdb, _ = c.GetBool("mediator", "skipdb")
|
||||
mediator_pseudo_prepaid, _ = c.GetBool("mediator", "pseudo_prepaid")
|
||||
|
||||
freeswitch_server, _ = c.GetString("freeswitch", "server")
|
||||
freeswitch_pass, _ = c.GetString("freeswitch", "pass")
|
||||
freeswitch_tor, _ = c.GetString("freeswitch", "tor_index")
|
||||
freeswitch_tenant, _ = c.GetString("freeswitch", "tenant_index")
|
||||
freeswitch_direction, _ = c.GetString("freeswitch", "direction_index")
|
||||
freeswitch_subject, _ = c.GetString("freeswitch", "subject_index")
|
||||
freeswitch_account, _ = c.GetString("freeswitch", "account_index")
|
||||
freeswitch_destination, _ = c.GetString("freeswitch", "destination_index")
|
||||
freeswitch_time_start, _ = c.GetString("freeswitch", "time_start_index")
|
||||
freeswitch_duration, _ = c.GetString("freeswitch", "duration_index")
|
||||
freeswitch_uuid, _ = c.GetString("freeswitch", "uuid_index")
|
||||
}
|
||||
|
||||
func listenToRPCRequests(rpcResponder interface{}, rpcAddress string, rpc_encoding string) {
|
||||
l, err := net.Listen("tcp", rpcAddress)
|
||||
@@ -258,12 +208,12 @@ func startSessionManager(responder *rater.Responder, loggerDb rater.DataStorage)
|
||||
case FS:
|
||||
dp, _ := time.ParseDuration(fmt.Sprintf("%vs", sm_debit_period))
|
||||
sm = sessionmanager.NewFSSessionManager(loggerDb, connector, dp)
|
||||
errConn := sm.Connect(freeswitch_server, freeswitch_pass)
|
||||
errConn := sm.Connect(freeswitch_server, freeswitch_pass, freeswitch_reconnects)
|
||||
if errConn != nil {
|
||||
rater.Logger.Err(fmt.Sprintf("<SessionManager> error: %s!", errConn))
|
||||
}
|
||||
default:
|
||||
rater.Logger.Err(fmt.Sprintf("<SessionManager> Unknown session manger type: %s!", sm_switch_type))
|
||||
rater.Logger.Err(fmt.Sprintf("<SessionManager> Unsupported session manger type: %s!", sm_switch_type))
|
||||
exitChan <- true
|
||||
}
|
||||
exitChan <-true
|
||||
|
||||
160
cmd/cgr-rater/config.go
Normal file
160
cmd/cgr-rater/config.go
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
Rating system designed to be used in VoIP Carriers World
|
||||
Copyright (C) 2013 ITsysCOM
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"code.google.com/p/goconf/conf"
|
||||
)
|
||||
|
||||
// this function will overwrite default values with the ones present in the config file
|
||||
func readConfig(c *conf.ConfigFile) {
|
||||
var hasOpt bool
|
||||
if hasOpt = c.HasOption("global", "datadb_type"); hasOpt {
|
||||
data_db_type, _ = c.GetString("global", "datadb_type")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "datadb_host"); hasOpt {
|
||||
data_db_host, _ = c.GetString("global", "datadb_host")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "datadb_port"); hasOpt {
|
||||
data_db_port, _ = c.GetString("global", "datadb_port")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "datadb_name"); hasOpt {
|
||||
data_db_name, _ = c.GetString("global", "datadb_name")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "datadb_user"); hasOpt {
|
||||
data_db_user, _ = c.GetString("global", "datadb_user")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "datadb_passwd"); hasOpt {
|
||||
data_db_pass, _ = c.GetString("global", "datadb_passwd")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_type"); hasOpt {
|
||||
log_db_type, _ = c.GetString("global", "logdb_type")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_host"); hasOpt {
|
||||
log_db_host, _ = c.GetString("global", "logdb_host")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_port"); hasOpt {
|
||||
log_db_port, _ = c.GetString("global", "logdb_port")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_name"); hasOpt {
|
||||
log_db_name, _ = c.GetString("global", "logdb_name")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_user"); hasOpt {
|
||||
log_db_user, _ = c.GetString("global", "logdb_user")
|
||||
}
|
||||
if hasOpt = c.HasOption("global", "logdb_passwd"); hasOpt {
|
||||
log_db_pass, _ = c.GetString("global", "logdb_passwd")
|
||||
}
|
||||
if hasOpt = c.HasOption("rater", "enabled"); hasOpt {
|
||||
rater_enabled, _ = c.GetBool("rater", "enabled")
|
||||
}
|
||||
if hasOpt = c.HasOption("rater", "balancer"); hasOpt {
|
||||
rater_balancer, _ = c.GetString("rater", "balancer")
|
||||
}
|
||||
if hasOpt = c.HasOption("rater", "listen"); hasOpt {
|
||||
rater_listen, _ = c.GetString("rater", "listen")
|
||||
}
|
||||
if hasOpt = c.HasOption("rater", "rpc_encoding"); hasOpt {
|
||||
rater_rpc_encoding, _ = c.GetString("rater", "rpc_encoding")
|
||||
}
|
||||
if hasOpt = c.HasOption("balancer", "enabled"); hasOpt {
|
||||
balancer_enabled, _ = c.GetBool("balancer", "enabled")
|
||||
}
|
||||
if hasOpt = c.HasOption("balancer", "listen"); hasOpt {
|
||||
balancer_listen, _ = c.GetString("balancer", "listen")
|
||||
}
|
||||
if hasOpt = c.HasOption("balancer", "rpc_encoding"); hasOpt {
|
||||
balancer_rpc_encoding, _ = c.GetString("balancer", "rpc_encoding")
|
||||
}
|
||||
if hasOpt = c.HasOption("scheduler", "enabled"); hasOpt {
|
||||
scheduler_enabled, _ = c.GetBool("scheduler", "enabled")
|
||||
}
|
||||
if hasOpt = c.HasOption("session_manager", "enabled"); hasOpt {
|
||||
sm_enabled, _ = c.GetBool("session_manager", "enabled")
|
||||
}
|
||||
if hasOpt = c.HasOption("session_manager", "switch_type"); hasOpt {
|
||||
sm_switch_type, _ = c.GetString("session_manager", "switch_type")
|
||||
}
|
||||
if hasOpt = c.HasOption("session_manager", "rater"); hasOpt {
|
||||
sm_rater, _ = c.GetString("session_manager", "rater")
|
||||
}
|
||||
if hasOpt = c.HasOption("session_manager", "debit_period"); hasOpt {
|
||||
sm_debit_period, _ = c.GetInt("session_manager", "debit_period")
|
||||
}
|
||||
if hasOpt = c.HasOption("session_manager", "rpc_encoding"); hasOpt {
|
||||
sm_rpc_encoding, _ = c.GetString("session_manager", "rpc_encoding")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "enabled"); hasOpt {
|
||||
mediator_enabled, _ = c.GetBool("mediator", "enabled")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "cdr_path"); hasOpt {
|
||||
mediator_cdr_path, _ = c.GetString("mediator", "cdr_path")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "cdr_out_path"); hasOpt {
|
||||
mediator_cdr_out_path, _ = c.GetString("mediator", "cdr_out_path")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "rater"); hasOpt {
|
||||
mediator_rater, _ = c.GetString("mediator", "rater")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "rpc_encoding"); hasOpt {
|
||||
mediator_rpc_encoding, _ = c.GetString("mediator", "rpc_encoding")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "skipdb"); hasOpt {
|
||||
mediator_skipdb, _ = c.GetBool("mediator", "skipdb")
|
||||
}
|
||||
if hasOpt = c.HasOption("mediator", "pseudo_prepaid"); hasOpt {
|
||||
mediator_pseudo_prepaid, _ = c.GetBool("mediator", "pseudo_prepaid")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "server"); hasOpt {
|
||||
freeswitch_server, _ = c.GetString("freeswitch", "server")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "pass"); hasOpt {
|
||||
freeswitch_pass, _ = c.GetString("freeswitch", "pass")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "tor_index"); hasOpt {
|
||||
freeswitch_tor, _ = c.GetString("freeswitch", "tor_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "tenant_index"); hasOpt {
|
||||
freeswitch_tenant, _ = c.GetString("freeswitch", "tenant_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "direction_index"); hasOpt {
|
||||
freeswitch_direction, _ = c.GetString("freeswitch", "direction_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "subject_index"); hasOpt {
|
||||
freeswitch_subject, _ = c.GetString("freeswitch", "subject_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "account_index"); hasOpt {
|
||||
freeswitch_account, _ = c.GetString("freeswitch", "account_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "destination_index"); hasOpt {
|
||||
freeswitch_destination, _ = c.GetString("freeswitch", "destination_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "time_start_index"); hasOpt {
|
||||
freeswitch_time_start, _ = c.GetString("freeswitch", "time_start_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "duration_index"); hasOpt {
|
||||
freeswitch_duration, _ = c.GetString("freeswitch", "duration_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "uuid_index"); hasOpt {
|
||||
freeswitch_uuid, _ = c.GetString("freeswitch", "uuid_index")
|
||||
}
|
||||
if hasOpt = c.HasOption("freeswitch", "reconnects"); hasOpt {
|
||||
freeswitch_reconnects, _ = c.GetInt("freeswitch", "reconnects")
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Rating system designed to be used in VoIP Carriers World
|
||||
Copyright (C) 2012 Radu Ioan Fericean
|
||||
Copyright (C) 2013 ITsysCOM
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -47,15 +47,15 @@ func NewFSSessionManager(storage rater.DataStorage, connector rater.Connector, d
|
||||
|
||||
// Connects to the freeswitch mod_event_socket server and starts
|
||||
// listening for events.
|
||||
func (sm *FSSessionManager) Connect(address, pass string) (err error) {
|
||||
func (sm *FSSessionManager) Connect(address, pass string, reconnects int) (err error) {
|
||||
eventFilters := map[string]string{"Call-Direction": "inbound"}
|
||||
if fsock.FS, err = fsock.NewFSock(address, pass, 5, sm.createHandlers(), eventFilters, rater.Logger.(*syslog.Writer)); err != nil {
|
||||
if fsock.FS, err = fsock.NewFSock(address, pass, reconnects, sm.createHandlers(), eventFilters, rater.Logger.(*syslog.Writer)); err != nil {
|
||||
return err
|
||||
} else if !fsock.FS.Connected() {
|
||||
return errors.New("Cannot connect to FreeSWITCH")
|
||||
}
|
||||
fsock.FS.ReadEvents()
|
||||
return errors.New("Stopped reading events")
|
||||
return errors.New("stopped reading events")
|
||||
}
|
||||
|
||||
func (sm *FSSessionManager) createHandlers() (handlers map[string][]func(string)) {
|
||||
|
||||
@@ -24,7 +24,7 @@ import (
|
||||
)
|
||||
|
||||
type SessionManager interface {
|
||||
Connect(address, pass string) error
|
||||
Connect(address, pass string, reconnects int) error
|
||||
DisconnectSession(*Session, string)
|
||||
RemoveSession(*Session)
|
||||
LoopAction(*Session, *rater.CallDescriptor)
|
||||
|
||||
Reference in New Issue
Block a user