mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-13 02:56:24 +05:00
worked on mediator, updated config tests
This commit is contained in:
@@ -64,11 +64,14 @@ var (
|
||||
mediator_enabled = false
|
||||
mediator_cdr_file = "Master.csv" // Freeswitch Master CSV CDR file.
|
||||
mediator_result_file = "out.csv" // Generated file containing CDR and price info.
|
||||
mediator_rater = INTERNAL // address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
mediator_host = "localhost" // The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
mediator_port = "5432" // The port to bind to.
|
||||
mediator_db = "cgrates" // The name of the database to connect to.
|
||||
mediator_user = "" // The user to sign in as.
|
||||
mediator_password = "" // The user's password.
|
||||
mediator_json = false // use JSON for RPC encoding
|
||||
mediator_skipdb = false
|
||||
|
||||
stats_enabled = false
|
||||
stats_listen = "127.0.0.1:8000" // Web server address (for stat reports)
|
||||
@@ -107,11 +110,14 @@ func readConfig(configFn string) {
|
||||
mediator_enabled, _ = c.GetBool("mediator", "enabled")
|
||||
mediator_cdr_file, _ = c.GetString("mediator", "cdr_file")
|
||||
mediator_result_file, _ = c.GetString("mediator", "result_file")
|
||||
mediator_host, _ = c.GetString("mediator", "host")
|
||||
mediator_port, _ = c.GetString("mediator", "port")
|
||||
mediator_db, _ = c.GetString("mediator", "db")
|
||||
mediator_user, _ = c.GetString("mediator", "user")
|
||||
mediator_password, _ = c.GetString("mediator", "password")
|
||||
mediator_rater, _ = c.GetString("mediator", "rater")
|
||||
mediator_host, _ = c.GetString("mediator", "db_host")
|
||||
mediator_port, _ = c.GetString("mediator", "db_port")
|
||||
mediator_db, _ = c.GetString("mediator", "db_name")
|
||||
mediator_user, _ = c.GetString("mediator", "db_user")
|
||||
mediator_password, _ = c.GetString("mediator", "db_passwd")
|
||||
mediator_json, _ = c.GetBool("mediator", "json")
|
||||
mediator_skipdb, _ = c.GetBool("mediator", "skipdb")
|
||||
|
||||
stats_enabled, _ = c.GetBool("stats_server", "enabled")
|
||||
stats_listen, _ = c.GetString("stats_server", "listen")
|
||||
@@ -157,6 +163,33 @@ func listenToHttpRequests() {
|
||||
http.ListenAndServe(stats_listen, nil)
|
||||
}
|
||||
|
||||
func startMediator(responder *timespans.Responder) {
|
||||
db, err := sql.Open("postgres", fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s sslmode=disable", mediator_host, mediator_port, mediator_db, mediator_user, mediator_password))
|
||||
//defer db.Close()
|
||||
if err != nil {
|
||||
timespans.Logger.Err(fmt.Sprintf("failed to open the database: %v", err))
|
||||
}
|
||||
var connector sessionmanager.Connector
|
||||
if mediator_rater == INTERNAL {
|
||||
connector = responder
|
||||
} else {
|
||||
var client *rpc.Client
|
||||
var err error
|
||||
if mediator_json {
|
||||
client, err = jsonrpc.Dial("tcp", mediator_rater)
|
||||
} else {
|
||||
client, err = rpc.Dial("tcp", mediator_rater)
|
||||
}
|
||||
if err != nil {
|
||||
timespans.Logger.Crit(fmt.Sprintf("Could not connect to rater: %v", err))
|
||||
exitChan <- true
|
||||
}
|
||||
connector = &sessionmanager.RPCClientConnector{client}
|
||||
}
|
||||
m := &Mediator{connector, db, mediator_skipdb}
|
||||
m.parseCSV()
|
||||
}
|
||||
|
||||
func startSessionManager(responder *timespans.Responder) {
|
||||
var connector sessionmanager.Connector
|
||||
if sm_rater == INTERNAL {
|
||||
@@ -240,30 +273,7 @@ func main() {
|
||||
}
|
||||
|
||||
if mediator_enabled {
|
||||
db, err := sql.Open("postgres", fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s sslmode=disable", mediator_host, mediator_port, mediator_db, mediator_user, mediator_password))
|
||||
//defer db.Close()
|
||||
if err != nil {
|
||||
timespans.Logger.Err(fmt.Sprintf("failed to open the database: %v", err))
|
||||
}
|
||||
var connector sessionmanager.Connector
|
||||
if sm_rater == INTERNAL {
|
||||
connector = responder
|
||||
} else {
|
||||
var client *rpc.Client
|
||||
var err error
|
||||
if sm_json {
|
||||
client, err = jsonrpc.Dial("tcp", sm_rater)
|
||||
} else {
|
||||
client, err = rpc.Dial("tcp", sm_rater)
|
||||
}
|
||||
if err != nil {
|
||||
timespans.Logger.Crit(fmt.Sprintf("Could not connect to rater: %v", err))
|
||||
exitChan <- true
|
||||
}
|
||||
connector = &sessionmanager.RPCClientConnector{client}
|
||||
}
|
||||
m := &Mediator{connector, db}
|
||||
_ = m
|
||||
go startMediator(responder)
|
||||
}
|
||||
|
||||
<-exitChan
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"bufio"
|
||||
"database/sql"
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
_ "github.com/bmizerany/pq"
|
||||
@@ -35,6 +36,7 @@ import (
|
||||
type Mediator struct {
|
||||
Connector sessionmanager.Connector
|
||||
Db *sql.DB
|
||||
SkipDb bool
|
||||
}
|
||||
|
||||
/*func readDbRecord(db *sql.DB, searchedUUID string) (cc *timespans.CallCost, timespansText string, err error) {
|
||||
@@ -50,19 +52,32 @@ func (m *Mediator) parseCSV() {
|
||||
}
|
||||
csvReader := csv.NewReader(bufio.NewReader(file))
|
||||
|
||||
for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() {
|
||||
uuid := record[10]
|
||||
_ = uuid
|
||||
t, _ := time.Parse("2012-05-21 17:48:20", record[5])
|
||||
fmt.Println(t)
|
||||
for record, ok := csvReader.Read(); ok == nil; record, ok = csvReader.Read() {
|
||||
//t, _ := time.Parse("2012-05-21 17:48:20", record[5])
|
||||
var cc *timespans.CallCost
|
||||
if !m.SkipDb {
|
||||
cc, err = m.GetCostsFromDB(record)
|
||||
} else {
|
||||
cc, err = m.GetCostsFromRater(record)
|
||||
|
||||
}
|
||||
if err != nil {
|
||||
timespans.Logger.Err(fmt.Sprintf("Could not get the cost for mediator record (%v): %v", record, err))
|
||||
}
|
||||
fmt.Println(cc)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Mediator) GetCostsFromDB(searchedUUID string) (cc *timespans.CallCost, timespansText string, err error) {
|
||||
func (m *Mediator) GetCostsFromDB(record []string) (cc *timespans.CallCost, err error) {
|
||||
searchedUUID := record[10]
|
||||
row := m.Db.QueryRow(fmt.Sprintf("SELECT * FROM callcosts WHERE uuid='%s'", searchedUUID))
|
||||
var uuid string
|
||||
cc = ×pans.CallCost{}
|
||||
err = row.Scan(&uuid, &cc.Direction, &cc.Tenant, &cc.TOR, &cc.Subject, &cc.Destination, &cc.Cost, &cc.ConnectFee, ×pansText)
|
||||
var timespansJson string
|
||||
err = row.Scan(&uuid, &cc.Direction, &cc.Tenant, &cc.TOR, &cc.Subject, &cc.Destination, &cc.Cost, &cc.ConnectFee, ×pansJson)
|
||||
err = json.Unmarshal([]byte(timespansJson), cc.Timespans)
|
||||
if err != nil {
|
||||
cc, err = m.GetCostsFromRater(record)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -29,56 +29,63 @@ func TestConfig(t *testing.T) {
|
||||
redis_db != 1 ||
|
||||
|
||||
rater_enabled != true ||
|
||||
rater_standalone != true ||
|
||||
rater_balancer_server != "test" ||
|
||||
rater_balancer != "test" ||
|
||||
rater_listen != "test" ||
|
||||
rater_json != true ||
|
||||
|
||||
balancer_enabled != true ||
|
||||
balancer_standalone != true ||
|
||||
balancer_listen_rater != "test" ||
|
||||
balancer_listen_api != "test" ||
|
||||
balancer_web_status_server != "test" ||
|
||||
balancer_listen != "test" ||
|
||||
balancer_json != true ||
|
||||
|
||||
scheduler_enabled != true ||
|
||||
|
||||
sm_enabled != true ||
|
||||
sm_api_server != "test" ||
|
||||
sm_rater != "test" ||
|
||||
sm_freeswitch_server != "test" ||
|
||||
sm_freeswitch_pass != "test" ||
|
||||
sm_json != true ||
|
||||
|
||||
mediator_enabled != true ||
|
||||
mediator_cdr_file != "test" ||
|
||||
mediator_result_file != "test" ||
|
||||
mediator_rater != "test" ||
|
||||
mediator_host != "test" ||
|
||||
mediator_port != "test" ||
|
||||
mediator_db != "test" ||
|
||||
mediator_user != "test" ||
|
||||
mediator_password != "test" {
|
||||
mediator_password != "test" ||
|
||||
mediator_json != true ||
|
||||
mediator_skipdb != true ||
|
||||
stats_enabled != true ||
|
||||
stats_listen != "test" {
|
||||
t.Log(redis_server)
|
||||
t.Log(redis_db)
|
||||
t.Log(rater_enabled)
|
||||
t.Log(rater_standalone)
|
||||
t.Log(rater_balancer_server)
|
||||
t.Log(rater_balancer)
|
||||
t.Log(rater_listen)
|
||||
t.Log(rater_json)
|
||||
t.Log(balancer_enabled)
|
||||
t.Log(balancer_standalone)
|
||||
t.Log(balancer_listen_rater)
|
||||
t.Log(balancer_listen_api)
|
||||
t.Log(balancer_listen)
|
||||
t.Log(balancer_json)
|
||||
t.Log(scheduler_enabled)
|
||||
t.Log(sm_enabled)
|
||||
t.Log(sm_api_server)
|
||||
t.Log(sm_rater)
|
||||
t.Log(sm_freeswitch_server)
|
||||
t.Log(sm_freeswitch_pass)
|
||||
t.Log(sm_json)
|
||||
t.Log(mediator_enabled)
|
||||
t.Log(mediator_cdr_file)
|
||||
t.Log(mediator_result_file)
|
||||
t.Log(mediator_rater)
|
||||
t.Log(mediator_host)
|
||||
t.Log(mediator_port)
|
||||
t.Log(mediator_db)
|
||||
t.Log(mediator_user)
|
||||
t.Log(mediator_password)
|
||||
t.Log(stats_enabled)
|
||||
t.Log(stats_listen)
|
||||
|
||||
t.Error("Config file read failed!")
|
||||
}
|
||||
|
||||
@@ -34,12 +34,15 @@ json = false # use JSON for RPC encoding
|
||||
enabled = true
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
rater = internal #address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
db_type = postgres # Only one supported for now
|
||||
db_host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
db_port = 5432 # The port to bind to.
|
||||
db_name = cgrates # The name of the database to connect to.
|
||||
db_user = # The user to sign in as.
|
||||
db_paswd = # The user's password.root
|
||||
db_passwd = # The user's password.root
|
||||
json = true # use JSON for RPC encoding
|
||||
skipdb = true
|
||||
|
||||
[scheduler]
|
||||
enabled = true
|
||||
|
||||
@@ -28,9 +28,13 @@ json = false # use JSON for RPC encoding
|
||||
enabled = true
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
rater = internal #address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
db_type = postgres # Only one supported for now
|
||||
db_host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
db_port = 5432 # The port to bind to.
|
||||
db_name = cgrates # The name of the database to connect to.
|
||||
db_user = # The user to sign in as.
|
||||
db_paswd = # The user's password.root
|
||||
db_passwd = # The user's password.root
|
||||
json = true # use JSON for RPC encoding
|
||||
skipdb = true
|
||||
|
||||
|
||||
@@ -15,43 +15,45 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
[global]
|
||||
redis_server = 127.0.0.1:6379 #redis address hostort
|
||||
redis_db = 10 # redis database number
|
||||
redis_server = test #redis address hostort
|
||||
redis_db = 1 # redis database number
|
||||
|
||||
[balancer]
|
||||
enabled = false # Start balancer server
|
||||
listen = 127.0.0.1:2001 # Balancer listen interface
|
||||
listen_rater = 127.0.0.1:2000 # Balancer listen interface
|
||||
json = false # use JSON for RPC encoding
|
||||
enabled = true # Start balancer server
|
||||
listen = test # Balancer listen interface
|
||||
listen_rater = test # Balancer listen interface
|
||||
json = true # use JSON for RPC encoding
|
||||
|
||||
[rater]
|
||||
enable = true
|
||||
listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only
|
||||
balancer = 127.0.0.1:2000 # if defined it will register to balancer as worker
|
||||
json = false # use JSON for RPC encoding
|
||||
enabled = true
|
||||
listen = test # listening address hostort, internal for internal communication only
|
||||
balancer = test # if defined it will register to balancer as worker
|
||||
json = true # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
db_type = postgres # Only one supported for now
|
||||
db_host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
db_port = 5432 # The port to bind to.
|
||||
db_name = cgrates # The name of the database to connect to.
|
||||
db_user = # The user to sign in as.
|
||||
db_paswd = # The user's password.root
|
||||
enabled = true
|
||||
cdr_file = test # Freeswitch Master CSV CDR file.
|
||||
result_file = test # Generated file containing CDR and price info.
|
||||
rater = test #address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
db_type = test # Only one supported for now
|
||||
db_host = test # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
db_port = test # The port to bind to.
|
||||
db_name = test # The name of the database to connect to.
|
||||
db_user = test # The user to sign in as.
|
||||
db_passwd = test # The user's password.root
|
||||
json = true # use JSON for RPC encoding
|
||||
skipdb = true
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
json = false # use JSON for RPC encoding
|
||||
enabled = true
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
rater = 127.0.0.1:2000 #address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
freeswitch_server = localhost:8021 # freeswitch address hostort
|
||||
freeswitch_pass = ClueCon # freeswitch address hostort
|
||||
json = false # use JSON for RPC encoding
|
||||
enabled = true
|
||||
rater = test #address where to access rater. Can be internal, direct rater address or the address of a balancer
|
||||
freeswitch_server = test # freeswitch address hostort
|
||||
freeswitch_pass = test # freeswitch address hostort
|
||||
json = true # use JSON for RPC encoding
|
||||
|
||||
[stats_server]
|
||||
enabled = false
|
||||
listen = 127.0.0.1:8000 # Web server address (for stat reports)
|
||||
enabled = true
|
||||
listen = test # Web server address (for stat reports)
|
||||
Reference in New Issue
Block a user