From 2ee6802d4c8f6bb108965f0aa04af57cc7116d5e Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 18 Nov 2015 09:24:23 +0100 Subject: [PATCH] Query costs for 0 duration prepaid calls in CDRS, fixes #290 --- engine/cdrs.go | 5 +---- sessionmanager/fssessionmanager.go | 13 ++++++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/engine/cdrs.go b/engine/cdrs.go index eab196d26..7de4703f2 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -316,9 +316,6 @@ func (self *CdrServer) deriveCdrs(storedCdr *StoredCdr) ([]*StoredCdr, error) { // Retrive the cost from engine func (self *CdrServer) getCostFromRater(storedCdr *StoredCdr) (*CallCost, error) { - //if storedCdr.Usage == time.Duration(0) { // failed call, nil cost - // return nil, nil // No costs present, better than empty call cost since could lead us to 0 costs - //} cc := new(CallCost) var err error cd := &CallDescriptor{ @@ -349,7 +346,7 @@ func (self *CdrServer) getCostFromRater(storedCdr *StoredCdr) (*CallCost, error) func (self *CdrServer) rateCDR(storedCdr *StoredCdr) error { var qryCC *CallCost var err error - if utils.IsSliceMember([]string{utils.META_PREPAID, utils.PREPAID}, storedCdr.ReqType) { // ToDo: Get rid of PREPAID as soon as we don't want to support it backwards + if utils.IsSliceMember([]string{utils.META_PREPAID, utils.PREPAID}, storedCdr.ReqType) && storedCdr.Usage != 0 { // ToDo: Get rid of PREPAID as soon as we don't want to support it backwards // Should be previously calculated and stored in DB delay := utils.Fib() for i := 0; i < 4; i++ { diff --git a/sessionmanager/fssessionmanager.go b/sessionmanager/fssessionmanager.go index 98d8d1499..0ed305f12 100644 --- a/sessionmanager/fssessionmanager.go +++ b/sessionmanager/fssessionmanager.go @@ -204,9 +204,6 @@ func (sm *FSSessionManager) onChannelHangupComplete(ev engine.Event) { if ev.GetReqType(utils.META_DEFAULT) == utils.META_NONE { // Do not process this request return } - if sm.cfg.CreateCdr { - go sm.ProcessCdr(ev.AsStoredCdr(config.CgrConfig().DefaultTimezone)) - } var s *Session for i := 0; i < 2; i++ { // Protect us against concurrency, wait a couple of seconds for the answer to be populated before we process hangup s = sm.sessions.getSession(ev.GetUUID()) @@ -215,11 +212,13 @@ func (sm *FSSessionManager) onChannelHangupComplete(ev engine.Event) { } time.Sleep(time.Duration(i+1) * time.Second) } - if s == nil { // Not handled by us - return + if s != nil { // Handled by us, cleanup here + if err := sm.sessions.removeSession(s, ev); err != nil { + utils.Logger.Err(err.Error()) + } } - if err := sm.sessions.removeSession(s, ev); err != nil { - utils.Logger.Err(err.Error()) + if sm.cfg.CreateCdr { + sm.ProcessCdr(ev.AsStoredCdr(config.CgrConfig().DefaultTimezone)) } }