From e8a08903ee5be4652a6d8a7188c165ca4a245ba3 Mon Sep 17 00:00:00 2001 From: DanB Date: Mon, 8 Jun 2015 18:47:53 +0200 Subject: [PATCH] PDD in CDRS, small fixes in storedcdr --- engine/cdrs.go | 4 ++-- engine/storedcdr.go | 10 +++++----- engine/storedcdr_test.go | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/engine/cdrs.go b/engine/cdrs.go index 1087d78ed..fe5f93509 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -269,13 +269,13 @@ func (self *CdrServer) deriveCdrs(storedCdr *StoredCdr) ([]*StoredCdr, error) { dcSubjFld, _ := utils.NewRSRField(dc.SubjectField) dcDstFld, _ := utils.NewRSRField(dc.DestinationField) dcSTimeFld, _ := utils.NewRSRField(dc.SetupTimeField) + dcPddFld, _ := utils.NewRSRField(dc.PddField) dcATimeFld, _ := utils.NewRSRField(dc.AnswerTimeField) dcDurFld, _ := utils.NewRSRField(dc.UsageField) dcSupplFld, _ := utils.NewRSRField(dc.SupplierField) dcDCausseld, _ := utils.NewRSRField(dc.DisconnectCauseField) - dcPddFld, _ := utils.NewRSRField("0") // FixMe forkedCdr, err := storedCdr.ForkCdr(dc.RunId, dcReqTypeFld, dcDirFld, dcTenantFld, dcCategoryFld, dcAcntFld, dcSubjFld, dcDstFld, - dcSTimeFld, dcATimeFld, dcDurFld, dcPddFld, dcSupplFld, dcDCausseld, []*utils.RSRField{}, true) + dcSTimeFld, dcPddFld, dcATimeFld, dcDurFld, dcSupplFld, dcDCausseld, []*utils.RSRField{}, true) if err != nil { Logger.Err(fmt.Sprintf("Could not fork CGR with cgrid %s, run: %s, error: %s", storedCdr.CgrId, dc.RunId, err.Error())) continue // do not add it to the forked CDR list diff --git a/engine/storedcdr.go b/engine/storedcdr.go index 704f594ff..619be80bd 100644 --- a/engine/storedcdr.go +++ b/engine/storedcdr.go @@ -157,12 +157,12 @@ func (storedCdr *StoredCdr) FieldAsString(rsrFld *utils.RSRField) string { return rsrFld.ParseValue(storedCdr.Destination) case utils.SETUP_TIME: return rsrFld.ParseValue(storedCdr.SetupTime.Format(time.RFC3339)) + case utils.PDD: + return strconv.FormatFloat(utils.Round(storedCdr.Pdd.Seconds(), 0, utils.ROUNDING_MIDDLE), 'f', -1, 64) case utils.ANSWER_TIME: return rsrFld.ParseValue(storedCdr.AnswerTime.Format(time.RFC3339)) case utils.USAGE: return strconv.FormatFloat(utils.Round(storedCdr.Usage.Seconds(), 0, utils.ROUNDING_MIDDLE), 'f', -1, 64) - case utils.PDD: - return strconv.FormatFloat(utils.Round(storedCdr.Pdd.Seconds(), 0, utils.ROUNDING_MIDDLE), 'f', -1, 64) case utils.SUPPLIER: return rsrFld.ParseValue(storedCdr.Supplier) case utils.DISCONNECT_CAUSE: @@ -224,9 +224,9 @@ func (storedCdr *StoredCdr) AsHttpForm() url.Values { v.Set(utils.SUBJECT, storedCdr.Subject) v.Set(utils.DESTINATION, storedCdr.Destination) v.Set(utils.SETUP_TIME, storedCdr.SetupTime.Format(time.RFC3339)) + v.Set(utils.PDD, storedCdr.FieldAsString(&utils.RSRField{Id: utils.PDD})) v.Set(utils.ANSWER_TIME, storedCdr.AnswerTime.Format(time.RFC3339)) v.Set(utils.USAGE, storedCdr.FormatUsage(utils.SECONDS)) - v.Set(utils.PDD, storedCdr.FieldAsString(&utils.RSRField{Id: utils.PDD})) v.Set(utils.SUPPLIER, storedCdr.Supplier) v.Set(utils.DISCONNECT_CAUSE, storedCdr.DisconnectCause) if storedCdr.CostDetails != nil { @@ -236,8 +236,8 @@ func (storedCdr *StoredCdr) AsHttpForm() url.Values { } // Used in mediation, primaryMandatory marks whether missing field out of request represents error or can be ignored -func (storedCdr *StoredCdr) ForkCdr(runId string, reqTypeFld, directionFld, tenantFld, categFld, accountFld, subjectFld, destFld, setupTimeFld, - answerTimeFld, durationFld, pddFld, supplierFld, disconnectCauseFld *utils.RSRField, +func (storedCdr *StoredCdr) ForkCdr(runId string, reqTypeFld, directionFld, tenantFld, categFld, accountFld, subjectFld, destFld, setupTimeFld, pddFld, + answerTimeFld, durationFld, supplierFld, disconnectCauseFld *utils.RSRField, extraFlds []*utils.RSRField, primaryMandatory bool) (*StoredCdr, error) { if reqTypeFld == nil { reqTypeFld, _ = utils.NewRSRField(utils.META_DEFAULT) diff --git a/engine/storedcdr_test.go b/engine/storedcdr_test.go index 6ec276849..d6fb13810 100644 --- a/engine/storedcdr_test.go +++ b/engine/storedcdr_test.go @@ -343,7 +343,7 @@ func TestStoredCdrForkCdr(t *testing.T) { Cost: 1.01, RatedSubject: "dans"} rtSampleCdrOut, err := storCdr.ForkCdr("sample_run1", &utils.RSRField{Id: utils.REQTYPE}, &utils.RSRField{Id: utils.DIRECTION}, &utils.RSRField{Id: utils.TENANT}, &utils.RSRField{Id: utils.CATEGORY}, &utils.RSRField{Id: utils.ACCOUNT}, &utils.RSRField{Id: utils.SUBJECT}, &utils.RSRField{Id: utils.DESTINATION}, - &utils.RSRField{Id: utils.SETUP_TIME}, &utils.RSRField{Id: utils.ANSWER_TIME}, &utils.RSRField{Id: utils.USAGE}, &utils.RSRField{Id: utils.PDD}, + &utils.RSRField{Id: utils.SETUP_TIME}, &utils.RSRField{Id: utils.PDD}, &utils.RSRField{Id: utils.ANSWER_TIME}, &utils.RSRField{Id: utils.USAGE}, &utils.RSRField{Id: utils.SUPPLIER}, &utils.RSRField{Id: utils.DISCONNECT_CAUSE}, []*utils.RSRField{&utils.RSRField{Id: "field_extr1"}, &utils.RSRField{Id: "field_extr2"}}, true) if err != nil { @@ -379,7 +379,7 @@ func TestStoredCdrForkCdrStaticVals(t *testing.T) { rsrStDCause, _ := utils.NewRSRField("^HANGUP_COMPLETE") rsrPdd, _ := utils.NewRSRField("^3") rtCdrOut2, err := storCdr.ForkCdr("wholesale_run", rsrStPostpaid, rsrStIn, rsrStCgr, rsrStPC, rsrStFA, rsrStFS, &utils.RSRField{Id: "destination"}, - rsrStST, rsrStAT, rsrStDur, rsrPdd, rsrStSuppl, rsrStDCause, []*utils.RSRField{}, true) + rsrStST, rsrPdd, rsrStAT, rsrStDur, rsrStSuppl, rsrStDCause, []*utils.RSRField{}, true) if err != nil { t.Error("Unexpected error received", err) } @@ -394,7 +394,7 @@ func TestStoredCdrForkCdrStaticVals(t *testing.T) { } _, err = storCdr.ForkCdr("wholesale_run", &utils.RSRField{Id: "dummy_header"}, &utils.RSRField{Id: "direction"}, &utils.RSRField{Id: "tenant"}, &utils.RSRField{Id: "tor"}, &utils.RSRField{Id: "account"}, &utils.RSRField{Id: "subject"}, &utils.RSRField{Id: "destination"}, - &utils.RSRField{Id: "setup_time"}, &utils.RSRField{Id: "answer_time"}, &utils.RSRField{Id: "duration"}, &utils.RSRField{Id: utils.PDD}, &utils.RSRField{Id: utils.SUPPLIER}, + &utils.RSRField{Id: "setup_time"}, &utils.RSRField{Id: utils.PDD}, &utils.RSRField{Id: "answer_time"}, &utils.RSRField{Id: "duration"}, &utils.RSRField{Id: utils.SUPPLIER}, &utils.RSRField{Id: utils.DISCONNECT_CAUSE}, []*utils.RSRField{}, true) if err == nil { t.Error("Failed to detect missing header")