mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Replacing GetEndTime with GetDuration, support for MySQL as LogDB
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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, ×pansJson)
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user