From 8a09ed24a986a3f0b7a4073e7355b653de09ca04 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 18 Apr 2016 19:52:33 +0300 Subject: [PATCH] changed total usage formula --- sessionmanager/smg_session.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/sessionmanager/smg_session.go b/sessionmanager/smg_session.go index 73a2cc751..8f0d98c6b 100644 --- a/sessionmanager/smg_session.go +++ b/sessionmanager/smg_session.go @@ -41,8 +41,9 @@ type SMGSession struct { sessionCds []*engine.CallDescriptor callCosts []*engine.CallCost extraDuration time.Duration // keeps the current duration debited on top of what heas been asked - lastUsage time.Duration - totalUsage time.Duration + lastUsage time.Duration // last requested Duration + lastDebit time.Duration // last real debited duration + totalUsage time.Duration // sum of lastUsage } // Called in case of automatic debits @@ -82,7 +83,7 @@ func (self *SMGSession) debit(dur time.Duration, lastUsed *time.Duration) (time. //utils.Logger.Debug(fmt.Sprintf("InitDur: %f, lastUsed: %f", requestedDuration.Seconds(), lastUsed.Seconds())) //utils.Logger.Debug(fmt.Sprintf("TotalUsage: %f, extraDuration: %f", self.totalUsage.Seconds(), self.extraDuration.Seconds())) if lastUsed != nil { - self.extraDuration = self.lastUsage - *lastUsed + self.extraDuration = self.lastDebit - *lastUsed //utils.Logger.Debug(fmt.Sprintf("ExtraDuration LastUsed: %f", self.extraDuration.Seconds())) if *lastUsed != self.lastUsage { // total usage correction @@ -109,7 +110,7 @@ func (self *SMGSession) debit(dur time.Duration, lastUsed *time.Duration) (time. self.cd.DurationIndex += dur cc := &engine.CallCost{} if err := self.rater.MaxDebit(self.cd, cc); err != nil { - self.lastUsage = 0 + self.lastDebit = 0 return 0, err } // cd corrections @@ -120,13 +121,18 @@ func (self *SMGSession) debit(dur time.Duration, lastUsed *time.Duration) (time. if ccDuration != dur { self.extraDuration = ccDuration - dur } + if ccDuration >= dur { + self.lastUsage = requestedDuration + } else { + self.lastUsage = ccDuration + } self.cd.DurationIndex -= dur self.cd.DurationIndex += ccDuration self.cd.MaxCostSoFar += cc.Cost self.cd.LoopIndex += 1 self.sessionCds = append(self.sessionCds, self.cd.Clone()) self.callCosts = append(self.callCosts, cc) - self.lastUsage = initialExtraDuration + ccDuration + self.lastDebit = initialExtraDuration + ccDuration self.totalUsage += self.lastUsage //utils.Logger.Debug(fmt.Sprintf("TotalUsage: %f", self.totalUsage.Seconds()))