From 0f38ebabdd054b02eb9e82d859fe69e63b8d5b53 Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 17 Mar 2016 17:45:24 +0100 Subject: [PATCH] Adding LastUsed to SMG.sessionEnd --- sessionmanager/smg_event.go | 8 ++++++-- sessionmanager/smg_session.go | 6 ++++++ sessionmanager/smgeneric.go | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/sessionmanager/smg_event.go b/sessionmanager/smg_event.go index 0e710418c..643c8693f 100644 --- a/sessionmanager/smg_event.go +++ b/sessionmanager/smg_event.go @@ -157,7 +157,11 @@ func (self SMGenericEvent) GetUsage(fieldName string) (time.Duration, error) { if fieldName == utils.META_DEFAULT { fieldName = utils.USAGE } - result, _ := utils.ConvertIfaceToString(self[fieldName]) + valIf, hasVal := self[fieldName] + if !hasVal { + return nilDuration, utils.ErrNotFound + } + result, _ := utils.ConvertIfaceToString(valIf) return utils.ParseDurationWithSecs(result) } @@ -167,7 +171,7 @@ func (self SMGenericEvent) GetLastUsed(fieldName string) (time.Duration, error) } valStr, hasVal := self[fieldName] if !hasVal { - return nilDuration, nil + return nilDuration, utils.ErrNotFound } result, _ := utils.ConvertIfaceToString(valStr) return utils.ParseDurationWithSecs(result) diff --git a/sessionmanager/smg_session.go b/sessionmanager/smg_session.go index 47f7e3132..7e5d13849 100644 --- a/sessionmanager/smg_session.go +++ b/sessionmanager/smg_session.go @@ -42,6 +42,7 @@ type SMGSession struct { callCosts []*engine.CallCost extraDuration time.Duration // keeps the current duration debited on top of what heas been asked lastUsage time.Duration // Keep record of the last debit for LastUsed functionality + totalUsage time.Duration } // Called in case of automatic debits @@ -87,6 +88,7 @@ func (self *SMGSession) debit(dur time.Duration, lastUsed time.Duration) (time.D } // apply the lastUsed correction dur += lastUsedCorrection + self.totalUsage += dur // Should reflect the total usage so far // apply correction from previous run dur -= self.extraDuration self.extraDuration = 0 @@ -250,3 +252,7 @@ func (self *SMGSession) saveOperations() error { } return nil } + +func (self *SMGSession) TotalUsage() time.Duration { + return self.totalUsage +} diff --git a/sessionmanager/smgeneric.go b/sessionmanager/smgeneric.go index 1da986e1b..ac4285df3 100644 --- a/sessionmanager/smgeneric.go +++ b/sessionmanager/smgeneric.go @@ -200,7 +200,22 @@ func (self *SMGeneric) SessionStart(gev SMGenericEvent, clnt *rpc2.Client) (time func (self *SMGeneric) SessionEnd(gev SMGenericEvent, clnt *rpc2.Client) error { usage, err := gev.GetUsage(utils.META_DEFAULT) if err != nil { - return err + if err != utils.ErrNotFound { + return err + + } + lastUsed, err := gev.GetLastUsed(utils.META_DEFAULT) + if err != nil { + return err + } + var s *SMGSession + for _, s = range self.getSession(gev.GetUUID()) { + break + } + if s == nil { + return nil + } + usage = s.TotalUsage() + lastUsed } if err := self.sessionEnd(gev.GetUUID(), usage); err != nil { return err