Replacing GetEndTime with GetDuration, support for MySQL as LogDB

This commit is contained in:
DanB
2013-05-28 16:30:29 +02:00
parent ef6b1cc9f8
commit 6875f11c35
5 changed files with 20 additions and 11 deletions

View File

@@ -45,6 +45,7 @@ const (
PARK_TIME = "start_epoch"
START_TIME = "answer_epoch"
END_TIME = "end_epoch"
DURATION = "billsec"
USERNAME = "user_name"
FS_IP = "sip_local_network_addr"
RATE = "rate"
@@ -133,6 +134,12 @@ func (fsCdr FSCdr) GetEndTime() (t time.Time, err error) {
t = time.Unix(0, st*1000)
return
}
// Extracts duration as considered by the telecom switch
func (fsCdr FSCdr) GetDuration() int64 {
dur, _ := strconv.ParseInt(fsCdr[DURATION], 0, 64)
return dur
}
func (fsCdr FSCdr) GetRate() (float64, error) {
rate, ok := fsCdr[RATE]

View File

@@ -45,6 +45,7 @@ const (
JSON = "json"
GOB = "gob"
POSTGRES = "postgres"
MYSQL = "mysql"
MONGO = "mongo"
REDIS = "redis"
SAME = "same"
@@ -241,6 +242,8 @@ func configureDatabase(db_type, host, port, name, user, pass string) (getter rat
getter, err = rater.NewMongoStorage(host, port, name, user, pass)
case POSTGRES:
getter, err = rater.NewPostgresStorage(host, port, name, user, pass)
case MYSQL:
getter, err = rater.NewMySQLStorage(host, port, name, user, pass)
default:
err = errors.New("unknown db")
return nil, err

View File

@@ -245,6 +245,7 @@ func (m *Mediator) MediateCdrFromDB(cdr rater.CDR, db rater.DataStorage) error {
TimeStart: startTime,
TimeEnd: endTime}
if err := m.connector.GetCost(cd, cc); err != nil {
fmt.Println("Got error in the mediator getCost", err.Error())
return err
}
return db.SetRatedCdr(cdr, cc)

View File

@@ -39,6 +39,7 @@ type CDR interface {
GetReqType() string
GetStartTime() (time.Time, error)
GetEndTime() (time.Time, error)
GetDuration() int64
GetFallbackSubj() string
GetExtraParameters() string
GetRate() (float64, error)

View File

@@ -30,7 +30,7 @@ type MySQLStorage struct {
}
func NewMySQLStorage(host, port, name, user, password string) (DataStorage, error) {
db, err := sql.Open("mysql", "cgrates:testus@tcp(192.168.0.17:3306)/cgrates?charset=utf8")
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", user, password, host, port, name))
if err != nil {
return nil, err
}
@@ -87,7 +87,7 @@ func (mys *MySQLStorage) LogCallCost(uuid, source string, cc *CallCost) (err err
if err != nil {
Logger.Err(fmt.Sprintf("Error marshalling timespans to json: %v", err))
}
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO call_costs VALUES ('%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', %v, %v, '%s')",
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO callcosts VALUES ('NULL','%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', %v, %v, '%s')",
uuid,
source,
cc.Direction,
@@ -106,7 +106,7 @@ func (mys *MySQLStorage) LogCallCost(uuid, source string, cc *CallCost) (err err
}
func (mys *MySQLStorage) GetCallCostLog(uuid, source string) (cc *CallCost, err error) {
row := mys.Db.QueryRow(fmt.Sprintf("SELECT * FROM call_costs WHERE uuid='%s' AND source='%s'", uuid, source))
row := mys.Db.QueryRow(fmt.Sprintf("SELECT * FROM callcosts WHERE uuid='%s' AND source='%s'", uuid, source))
var uuid_found string
var timespansJson string
err = row.Scan(&uuid_found, &cc.Direction, &cc.Tenant, &cc.TOR, &cc.Subject, &cc.Destination, &cc.Cost, &cc.ConnectFee, &timespansJson)
@@ -127,11 +127,7 @@ func (mys *MySQLStorage) SetCdr(cdr CDR) (err error) {
if err != nil {
return err
}
endTime, err := cdr.GetEndTime()
if err != nil {
return err
}
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO cdrs_primary VALUES ('%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', %v, %v, '%s')",
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO cdrs_primary VALUES (NULL, '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
cdr.GetCgrId(),
cdr.GetAccId(),
cdr.GetCdrHost(),
@@ -143,12 +139,12 @@ func (mys *MySQLStorage) SetCdr(cdr CDR) (err error) {
cdr.GetSubject(),
cdr.GetDestination(),
startTime,
endTime, //duration
cdr.GetDuration(), //duration
))
if err != nil {
Logger.Err(fmt.Sprintf("failed to execute cdr insert statement: %v", err))
}
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO cdrs_extra VALUES ('%s', '%s')",
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO cdrs_extra VALUES ('NULL','%s', '%s')",
cdr.GetCgrId(),
cdr.GetExtraParameters(),
))
@@ -162,9 +158,10 @@ func (mys *MySQLStorage) SetCdr(cdr CDR) (err error) {
func (mys *MySQLStorage) SetRatedCdr(cdr CDR, callcost *CallCost) (err error) {
rate, err := cdr.GetRate()
if err != nil {
fmt.Println("Could not find rate in cdr")
return err
}
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO cdrs_extra VALUES ('%s', '%s', '%s', '%s')",
_, err = mys.Db.Exec(fmt.Sprintf("INSERT INTO rated_cdrs VALUES ('%s', '%s', '%s', '%s')",
cdr.GetCgrId(),
rate,
"cgrcostid",