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:
DanB
2015-03-15 14:18:30 +01:00
parent ab946cd637
commit 77d9d2ec30
9 changed files with 44 additions and 41 deletions

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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)