mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 10:36:24 +05:00
Format time into RFC3339 for more compact representation, GetCdrs returning now CgrExtCdr with SetupTime, AnswerTime and Usage set as string for more interoperability with other languages
This commit is contained in:
@@ -1441,7 +1441,7 @@ func TestLocalGetCdrs(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
var reply []*utils.StoredCdr
|
||||
var reply []*utils.CgrExtCdr
|
||||
req := utils.AttrGetCdrs{}
|
||||
if err := rater.Call("ApierV1.GetCdrs", req, &reply); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
@@ -1465,7 +1465,7 @@ func TestLocalProcessCdr(t *testing.T) {
|
||||
} else if reply != utils.OK {
|
||||
t.Error("Unexpected reply received: ", reply)
|
||||
}
|
||||
var cdrs []*utils.StoredCdr
|
||||
var cdrs []*utils.CgrExtCdr
|
||||
req := utils.AttrGetCdrs{}
|
||||
if err := rater.Call("ApierV1.GetCdrs", req, &cdrs); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
|
||||
@@ -46,7 +46,7 @@ func (apier *ApierV1) GetCallCostLog(attrs AttrGetCallCost, reply *engine.CallCo
|
||||
}
|
||||
|
||||
// Retrieves CDRs based on the filters
|
||||
func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.CgrCdrOut) error {
|
||||
func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.CgrExtCdr) error {
|
||||
cdrsFltr, err := attrs.AsCdrsFilter()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
@@ -54,10 +54,10 @@ func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.CgrCdrOut
|
||||
if cdrs, _, err := apier.CdrDb.GetStoredCdrs(cdrsFltr); err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
} else if len(cdrs) == 0 {
|
||||
*reply = make([]*utils.CgrCdrOut, 0)
|
||||
*reply = make([]*utils.CgrExtCdr, 0)
|
||||
} else {
|
||||
for _, cdr := range cdrs {
|
||||
*reply = append(*reply, cdr.AsCgrCdrOut())
|
||||
*reply = append(*reply, cdr.AsCgrExtCdr())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
)
|
||||
|
||||
// Retrieves CDRs based on the filters
|
||||
func (apier *ApierV2) GetCdrs(attrs utils.RpcCdrsFilter, reply *[]*utils.CgrCdrOut) error {
|
||||
func (apier *ApierV2) GetCdrs(attrs utils.RpcCdrsFilter, reply *[]*utils.CgrExtCdr) error {
|
||||
cdrsFltr, err := attrs.AsCdrsFilter()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
@@ -34,10 +34,10 @@ func (apier *ApierV2) GetCdrs(attrs utils.RpcCdrsFilter, reply *[]*utils.CgrCdrO
|
||||
if cdrs, _, err := apier.CdrDb.GetStoredCdrs(cdrsFltr); err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
} else if len(cdrs) == 0 {
|
||||
*reply = make([]*utils.CgrCdrOut, 0)
|
||||
*reply = make([]*utils.CgrExtCdr, 0)
|
||||
} else {
|
||||
for _, cdr := range cdrs {
|
||||
*reply = append(*reply, cdr.AsCgrCdrOut())
|
||||
*reply = append(*reply, cdr.AsCgrExtCdr())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -155,7 +155,7 @@ func TestV2CdrsMysqlGetCdrs(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
var reply []*utils.StoredCdr
|
||||
var reply []*utils.CgrExtCdr
|
||||
req := utils.RpcCdrsFilter{}
|
||||
if err := cdrsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
|
||||
@@ -149,7 +149,7 @@ func TestV2CdrsPsqlGetCdrs(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
var reply []*utils.StoredCdr
|
||||
var reply []*utils.CgrExtCdr
|
||||
req := utils.RpcCdrsFilter{}
|
||||
if err := cdrsPsqlRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
|
||||
@@ -163,7 +163,7 @@ func TestTutFsCallsCdrs1001(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
var reply []*utils.CgrCdrOut
|
||||
var reply []*utils.CgrExtCdr
|
||||
req := utils.RpcCdrsFilter{Accounts: []string{"1001"}, RunIds: []string{utils.META_DEFAULT}}
|
||||
if err := tutFsCallsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
@@ -176,7 +176,7 @@ func TestTutFsCallsCdrs1001(t *testing.T) {
|
||||
if reply[0].ReqType != utils.PREPAID {
|
||||
t.Errorf("Unexpected ReqType for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].Usage != 67.0 { // Usage as seconds
|
||||
if reply[0].Usage != "67" { // Usage as seconds
|
||||
t.Errorf("Unexpected Usage for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].Cost != 0.0159 {
|
||||
@@ -192,6 +192,9 @@ func TestTutFsCallsCdrs1001(t *testing.T) {
|
||||
if reply[0].ReqType != utils.RATED {
|
||||
t.Errorf("Unexpected ReqType for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].Subject != "1002" {
|
||||
t.Errorf("Unexpected Subject for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].Cost != 0.3059 {
|
||||
t.Errorf("Unexpected Cost for CDR: %+v", reply[0])
|
||||
}
|
||||
|
||||
@@ -115,9 +115,9 @@ func (storedCdr *StoredCdr) FieldAsString(rsrFld *RSRField) string {
|
||||
case DESTINATION:
|
||||
return rsrFld.ParseValue(storedCdr.Destination)
|
||||
case SETUP_TIME:
|
||||
return rsrFld.ParseValue(storedCdr.SetupTime.String())
|
||||
return rsrFld.ParseValue(storedCdr.SetupTime.Format(time.RFC3339))
|
||||
case ANSWER_TIME:
|
||||
return rsrFld.ParseValue(storedCdr.AnswerTime.String())
|
||||
return rsrFld.ParseValue(storedCdr.AnswerTime.Format(time.RFC3339))
|
||||
case USAGE:
|
||||
return strconv.FormatFloat(Round(storedCdr.Usage.Seconds(), 0, ROUNDING_MIDDLE), 'f', -1, 64)
|
||||
case MEDI_RUNID:
|
||||
@@ -174,8 +174,8 @@ func (storedCdr *StoredCdr) AsHttpForm() url.Values {
|
||||
v.Set(ACCOUNT, storedCdr.Account)
|
||||
v.Set(SUBJECT, storedCdr.Subject)
|
||||
v.Set(DESTINATION, storedCdr.Destination)
|
||||
v.Set(SETUP_TIME, storedCdr.SetupTime.String())
|
||||
v.Set(ANSWER_TIME, storedCdr.AnswerTime.String())
|
||||
v.Set(SETUP_TIME, storedCdr.SetupTime.Format(time.RFC3339))
|
||||
v.Set(ANSWER_TIME, storedCdr.AnswerTime.Format(time.RFC3339))
|
||||
v.Set(USAGE, storedCdr.FormatUsage(SECONDS))
|
||||
return v
|
||||
}
|
||||
@@ -305,8 +305,8 @@ func (storedCdr *StoredCdr) ForkCdr(runId string, reqTypeFld, directionFld, tena
|
||||
return frkStorCdr, nil
|
||||
}
|
||||
|
||||
func (storedCdr *StoredCdr) AsCgrCdrOut() *CgrCdrOut {
|
||||
return &CgrCdrOut{CgrId: storedCdr.CgrId,
|
||||
func (storedCdr *StoredCdr) AsCgrExtCdr() *CgrExtCdr {
|
||||
return &CgrExtCdr{CgrId: storedCdr.CgrId,
|
||||
OrderId: storedCdr.OrderId,
|
||||
TOR: storedCdr.TOR,
|
||||
AccId: storedCdr.AccId,
|
||||
@@ -319,9 +319,9 @@ func (storedCdr *StoredCdr) AsCgrCdrOut() *CgrCdrOut {
|
||||
Account: storedCdr.Account,
|
||||
Subject: storedCdr.Subject,
|
||||
Destination: storedCdr.Destination,
|
||||
SetupTime: storedCdr.SetupTime,
|
||||
AnswerTime: storedCdr.AnswerTime,
|
||||
Usage: storedCdr.Usage.Seconds(),
|
||||
SetupTime: storedCdr.SetupTime.Format(time.RFC3339),
|
||||
AnswerTime: storedCdr.AnswerTime.Format(time.RFC3339),
|
||||
Usage: storedCdr.FormatUsage(SECONDS),
|
||||
ExtraFields: storedCdr.ExtraFields,
|
||||
MediationRunId: storedCdr.MediationRunId,
|
||||
RatedAccount: storedCdr.RatedAccount,
|
||||
@@ -481,7 +481,7 @@ func (storedCdr *StoredCdr) String() string {
|
||||
return string(mrsh)
|
||||
}
|
||||
|
||||
type CgrCdrOut struct {
|
||||
type CgrExtCdr struct {
|
||||
CgrId string
|
||||
OrderId int64
|
||||
TOR string
|
||||
@@ -495,9 +495,9 @@ type CgrCdrOut struct {
|
||||
Account string
|
||||
Subject string
|
||||
Destination string
|
||||
SetupTime time.Time
|
||||
AnswerTime time.Time
|
||||
Usage float64
|
||||
SetupTime string
|
||||
AnswerTime string
|
||||
Usage string
|
||||
ExtraFields map[string]string
|
||||
MediationRunId string
|
||||
RatedAccount string
|
||||
|
||||
@@ -47,8 +47,8 @@ func TestFieldAsString(t *testing.T) {
|
||||
cdr.FieldAsString(&RSRField{Id: ACCOUNT}) != cdr.Account ||
|
||||
cdr.FieldAsString(&RSRField{Id: SUBJECT}) != cdr.Subject ||
|
||||
cdr.FieldAsString(&RSRField{Id: DESTINATION}) != cdr.Destination ||
|
||||
cdr.FieldAsString(&RSRField{Id: SETUP_TIME}) != cdr.SetupTime.String() ||
|
||||
cdr.FieldAsString(&RSRField{Id: ANSWER_TIME}) != cdr.AnswerTime.String() ||
|
||||
cdr.FieldAsString(&RSRField{Id: SETUP_TIME}) != cdr.SetupTime.Format(time.RFC3339) ||
|
||||
cdr.FieldAsString(&RSRField{Id: ANSWER_TIME}) != cdr.AnswerTime.Format(time.RFC3339) ||
|
||||
cdr.FieldAsString(&RSRField{Id: USAGE}) != "10" ||
|
||||
cdr.FieldAsString(&RSRField{Id: MEDI_RUNID}) != cdr.MediationRunId ||
|
||||
cdr.FieldAsString(&RSRField{Id: COST}) != "1.01" ||
|
||||
@@ -70,8 +70,8 @@ func TestFieldAsString(t *testing.T) {
|
||||
cdr.FieldAsString(&RSRField{Id: ACCOUNT}) != cdr.Account,
|
||||
cdr.FieldAsString(&RSRField{Id: SUBJECT}) != cdr.Subject,
|
||||
cdr.FieldAsString(&RSRField{Id: DESTINATION}) != cdr.Destination,
|
||||
cdr.FieldAsString(&RSRField{Id: SETUP_TIME}) != cdr.SetupTime.String(),
|
||||
cdr.FieldAsString(&RSRField{Id: ANSWER_TIME}) != cdr.AnswerTime.String(),
|
||||
cdr.FieldAsString(&RSRField{Id: SETUP_TIME}) != cdr.SetupTime.Format(time.RFC3339),
|
||||
cdr.FieldAsString(&RSRField{Id: ANSWER_TIME}) != cdr.AnswerTime.Format(time.RFC3339),
|
||||
cdr.FieldAsString(&RSRField{Id: USAGE}) != "10",
|
||||
cdr.FieldAsString(&RSRField{Id: MEDI_RUNID}) != cdr.MediationRunId,
|
||||
cdr.FieldAsString(&RSRField{Id: RATED_ACCOUNT}) != "dan",
|
||||
@@ -283,11 +283,11 @@ func TestStoredCdrAsHttpForm(t *testing.T) {
|
||||
if cdrForm.Get(DESTINATION) != "1002" {
|
||||
t.Errorf("Expected: %s, received: %s", "1002", cdrForm.Get(DESTINATION))
|
||||
}
|
||||
if cdrForm.Get(SETUP_TIME) != "2013-11-07 08:42:20 +0000 UTC" {
|
||||
t.Errorf("Expected: %s, received: %s", "2013-11-07 08:42:20 +0000 UTC", cdrForm.Get(SETUP_TIME))
|
||||
if cdrForm.Get(SETUP_TIME) != "2013-11-07T08:42:20Z" {
|
||||
t.Errorf("Expected: %s, received: %s", "2013-11-07T08:42:20Z", cdrForm.Get(SETUP_TIME))
|
||||
}
|
||||
if cdrForm.Get(ANSWER_TIME) != "2013-11-07 08:42:26 +0000 UTC" {
|
||||
t.Errorf("Expected: %s, received: %s", "2013-11-07 08:42:26 +0000 UTC", cdrForm.Get(ANSWER_TIME))
|
||||
if cdrForm.Get(ANSWER_TIME) != "2013-11-07T08:42:26Z" {
|
||||
t.Errorf("Expected: %s, received: %s", "2013-11-07T08:42:26Z", cdrForm.Get(ANSWER_TIME))
|
||||
}
|
||||
if cdrForm.Get(USAGE) != "10" {
|
||||
t.Errorf("Expected: %s, received: %s", "10", cdrForm.Get(USAGE))
|
||||
@@ -388,18 +388,18 @@ func TestStoredCdrForkCdrFromMetaDefaults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestStoredCdrAsCgrCdrOut(t *testing.T) {
|
||||
func TestStoredCdrAsCgrExtCdr(t *testing.T) {
|
||||
storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1",
|
||||
CdrSource: UNIT_TEST, ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002",
|
||||
SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID,
|
||||
Usage: time.Duration(10), ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, RatedAccount: "dan", RatedSubject: "dans",
|
||||
}
|
||||
expectOutCdr := &CgrCdrOut{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1",
|
||||
expectOutCdr := &CgrExtCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1",
|
||||
CdrSource: UNIT_TEST, ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002",
|
||||
SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID,
|
||||
Usage: 0.00000001, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, RatedAccount: "dan", RatedSubject: "dans",
|
||||
SetupTime: "2013-11-07T08:42:20Z", AnswerTime: "2013-11-07T08:42:26Z", MediationRunId: DEFAULT_RUNID,
|
||||
Usage: "0.00000001", ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, RatedAccount: "dan", RatedSubject: "dans",
|
||||
}
|
||||
if cdrOut := storCdr.AsCgrCdrOut(); !reflect.DeepEqual(expectOutCdr, cdrOut) {
|
||||
if cdrOut := storCdr.AsCgrExtCdr(); !reflect.DeepEqual(expectOutCdr, cdrOut) {
|
||||
t.Errorf("Expected: %+v, received: %+v", expectOutCdr, cdrOut)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,10 +31,10 @@ func TestHttpJsonPost(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
cdrOut := &CgrCdrOut{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1",
|
||||
cdrOut := &CgrExtCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1",
|
||||
CdrSource: UNIT_TEST, ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "account1", Subject: "tgooiscs0014", Destination: "1002",
|
||||
SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID,
|
||||
Usage: 0.00000001, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
|
||||
SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String(), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String(), MediationRunId: DEFAULT_RUNID,
|
||||
Usage: "0.00000001", ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
|
||||
}
|
||||
if _, err := HttpJsonPost("http://localhost:8000", false, cdrOut); err == nil || err.Error() != "Post http://localhost:8000: dial tcp 127.0.0.1:8000: connection refused" {
|
||||
t.Error(err)
|
||||
|
||||
Reference in New Issue
Block a user