From c3e8901b55e57776f61949f366e27a6aa8e52bb0 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 20 Jan 2016 18:41:45 +0200 Subject: [PATCH] more updates on RatedUsage, fixes #337 --- engine/callcost.go | 3 +++ engine/cdrs.go | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/engine/callcost.go b/engine/callcost.go index 391b2a33a..e786318a7 100644 --- a/engine/callcost.go +++ b/engine/callcost.go @@ -63,6 +63,9 @@ func (cc *CallCost) GetDuration() (td time.Duration) { } func (cc *CallCost) UpdateRatedUsage() time.Duration { + if cc == nil { + return 0 + } totalDuration := cc.GetDuration() cc.RatedUsage = totalDuration.Seconds() return totalDuration diff --git a/engine/cdrs.go b/engine/cdrs.go index 51a9249e5..0d11122a3 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -175,6 +175,9 @@ func (self *CdrServer) processCdr(cdr *CDR) (err error) { cdr.RunID = utils.MetaRaw } if self.cgrCfg.CDRSStoreCdrs { // Store RawCDRs, this we do sync so we can reply with the status + if cdr.CostDetails != nil { + cdr.CostDetails.UpdateRatedUsage() + } if err := self.cdrDb.SetCDR(cdr, false); err != nil { // Only original CDR stored in primary table, no derived utils.Logger.Err(fmt.Sprintf(" Storing primary CDR %+v, got error: %s", cdr, err.Error())) return err // Error is propagated back and we don't continue processing the CDR if we cannot store it @@ -231,6 +234,9 @@ func (self *CdrServer) rateStoreStatsReplicate(cdr *CDR, sendToStats bool) error } if self.cgrCfg.CDRSStoreCdrs { // Store CDRs // Store RatedCDR + if cdr.CostDetails != nil { + cdr.CostDetails.UpdateRatedUsage() + } if err := self.cdrDb.SetCDR(cdr, true); err != nil { utils.Logger.Err(fmt.Sprintf(" Storing rated CDR %+v, got error: %s", cdr, err.Error())) }