diff --git a/rater/calldesc.go b/rater/calldesc.go index 2b5255b63..5dbabd9d8 100644 --- a/rater/calldesc.go +++ b/rater/calldesc.go @@ -282,7 +282,7 @@ func (cd *CallDescriptor) GetCost() (*CallCost, error) { Cost: cost, ConnectFee: connectionFee, Timespans: timespans} - Logger.Info(fmt.Sprintf("Get Cost: %s => %v", cd.GetKey(), cc)) + Logger.Info(fmt.Sprintf(" Get Cost: %s => %v", cd.GetKey(), cc)) return cc, err } @@ -347,11 +347,15 @@ func (cd *CallDescriptor) GetMaxSessionTime() (seconds float64, err error) { func (cd *CallDescriptor) Debit() (cc *CallCost, err error) { cc, err = cd.GetCost() if err != nil { - Logger.Err(fmt.Sprintf("error getting cost for key %v: %v", cd.GetUserBalanceKey(), err)) + Logger.Err(fmt.Sprintf(" Error getting cost for account key %v: %v", cd.GetUserBalanceKey(), err)) return } - Logger.Debug(fmt.Sprintf("Debiting from %v, value: %v", cd.GetUserBalanceKey(), cc.Cost+cc.ConnectFee)) if userBalance, err := cd.getUserBalance(); err == nil && userBalance != nil { + Logger.Err(fmt.Sprintf(" Error retrieving user balance: %v", err)) + } else if userBalance == nil { + Logger.Debug(fmt.Sprintf(" No user balance defined: %v",cd.GetUserBalanceKey())) + } else { + Logger.Debug(fmt.Sprintf(" Attempting to debit from %v, value: %v", cd.GetUserBalanceKey(), cc.Cost+cc.ConnectFee)) defer storageGetter.SetUserBalance(userBalance) if cc.Cost != 0 || cc.ConnectFee != 0 { userBalance.debitBalance(CREDIT, cc.Cost+cc.ConnectFee, true) diff --git a/sessionmanager/fssessionmanager.go b/sessionmanager/fssessionmanager.go index a88bb8e45..3df771f64 100644 --- a/sessionmanager/fssessionmanager.go +++ b/sessionmanager/fssessionmanager.go @@ -181,16 +181,25 @@ func (sm *FSSessionManager) OnChannelPark(ev Event) { } func (sm *FSSessionManager) OnChannelAnswer(ev Event) { - rater.Logger.Info("freeswitch answer") + rater.Logger.Info(" FreeSWITCH answer.") s := NewSession(ev, sm) if s != nil { sm.sessions = append(sm.sessions, s) } + // Make sure cgr_type is enforced even if not set by FreeSWITCH + cgrType := ev.GetReqType() + if cgrType != "" { + err := fsock.FS.SendApiCmd(fmt.Sprintf("uuid_setvar %s cgr_type %s\n\n", s.uuid, cgrType)) + if err != nil { + rater.Logger.Err(" Could not enforce cgr_type variable on FreeSWITCH uuid") + } + } } func (sm *FSSessionManager) OnChannelHangupComplete(ev Event) { - rater.Logger.Info("freeswitch hangup") + rater.Logger.Info(" FreeSWITCH hangup.") s := sm.GetSession(ev.GetUUID()) + sm.RemoveSession(s) if ev.GetReqType() == REQTYPE_POSTPAID { startTime, err := ev.GetStartTime(START_TIME) if err != nil { @@ -337,10 +346,9 @@ func (sm *FSSessionManager) Shutdown() (err error) { } rater.Logger.Info("Shutting down all sessions...") fsock.FS.SendApiCmd("hupall MANAGER_REQUEST cgr_reqtype prepaid") - fsock.FS.SendApiCmd("hupall MANAGER_REQUEST cgr_reqtype postpaid") for guard := 0; len(sm.sessions) > 0 && guard < 20; guard++ { time.Sleep(100 * time.Millisecond) // wait for the hungup event to be fired - rater.Logger.Info(fmt.Sprintf("sessions: %s", sm.sessions)) + rater.Logger.Info(fmt.Sprintf(" Shutdown waiting on sessions: %s", sm.sessions)) } return }