diff --git a/engine/event.go b/engine/event.go index 521e4fc3f..df1fdecda 100644 --- a/engine/event.go +++ b/engine/event.go @@ -38,7 +38,7 @@ type Event interface { GetReqType(string) string GetSetupTime(string, string) (time.Time, error) GetAnswerTime(string, string) (time.Time, error) - GetEndTime() (time.Time, error) + GetEndTime(string, string) (time.Time, error) GetDuration(string) (time.Duration, error) GetPdd(string) (time.Duration, error) GetSupplier(string) string diff --git a/engine/storedcdr.go b/engine/storedcdr.go index 2d738642f..bc1fd3cb5 100644 --- a/engine/storedcdr.go +++ b/engine/storedcdr.go @@ -590,7 +590,7 @@ func (storedCdr *StoredCdr) GetAnswerTime(fieldName, timezone string) (time.Time } return utils.ParseTimeDetectLayout(aTimeVal, timezone) } -func (storedCdr *StoredCdr) GetEndTime() (time.Time, error) { +func (storedCdr *StoredCdr) GetEndTime(fieldName, timezone string) (time.Time, error) { return storedCdr.AnswerTime.Add(storedCdr.Usage), nil } func (storedCdr *StoredCdr) GetDuration(fieldName string) (time.Duration, error) { diff --git a/sessionmanager/fsevent.go b/sessionmanager/fsevent.go index ea9613db9..59de3a042 100644 --- a/sessionmanager/fsevent.go +++ b/sessionmanager/fsevent.go @@ -203,8 +203,8 @@ func (fsev FSEvent) GetAnswerTime(fieldName, timezone string) (t time.Time, err return utils.ParseTimeDetectLayout(aTimeStr, timezone) } -func (fsev FSEvent) GetEndTime() (t time.Time, err error) { - return utils.ParseTimeDetectLayout(fsev[END_TIME], config.CgrConfig().DefaultTimezone) +func (fsev FSEvent) GetEndTime(fieldName, timezone string) (t time.Time, err error) { + return utils.ParseTimeDetectLayout(fsev[END_TIME], timezone) } func (fsev FSEvent) GetDuration(fieldName string) (time.Duration, error) { diff --git a/sessionmanager/genericsm.go b/sessionmanager/genericsm.go index bd7335cc2..3659279dc 100644 --- a/sessionmanager/genericsm.go +++ b/sessionmanager/genericsm.go @@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without geven the implied warranty of +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -32,9 +32,7 @@ const ( CGR_CONNUUID = "cgr_connid" ) -var smgen *GenericSessionManager - -// Attempts to get the connId prgeviously set in the client state container +// Attempts to get the connId previously set in the client state container func getClientConnId(clnt *rpc2.Client) string { uuid, hasIt := clnt.State.Get(CGR_CONNUUID) if !hasIt { @@ -43,10 +41,6 @@ func getClientConnId(clnt *rpc2.Client) string { return uuid.(string) } -func SMGeneric() *GenericSessionManager { - return smgen -} - func NewGenericSessionManager(cfg *config.SmGenericConfig, rater engine.Connector, cdrsrv engine.Connector, timezone string) *GenericSessionManager { gsm := &GenericSessionManager{cfg: cfg, rater: rater, cdrsrv: cdrsrv, timezone: timezone, conns: make(map[string]*rpc2.Client), sessions: NewSessions(), connMutex: new(sync.Mutex)} return gsm diff --git a/sessionmanager/genericvent.go b/sessionmanager/genericvent.go index 82c8b0488..9aedee66a 100644 --- a/sessionmanager/genericvent.go +++ b/sessionmanager/genericvent.go @@ -129,8 +129,17 @@ func (self GenericEvent) GetAnswerTime(fieldName, timezone string) (time.Time, e return utils.ParseTimeDetectLayout(result, timezone) } -func (self GenericEvent) GetEndTime() (time.Time, error) { - return nilTime, nil +func (self GenericEvent) GetEndTime(fieldName, timezone string) (time.Time, error) { + var nilTime time.Time + aTime, err := self.GetAnswerTime(utils.META_DEFAULT, timezone) + if err != nil { + return nilTime, err + } + dur, err := self.GetDuration(utils.META_DEFAULT) + if err != nil { + return nilTime, err + } + return aTime.Add(dur), nil } func (self GenericEvent) GetDuration(fieldName string) (time.Duration, error) { diff --git a/sessionmanager/kamevent.go b/sessionmanager/kamevent.go index 70997225e..e6343508b 100644 --- a/sessionmanager/kamevent.go +++ b/sessionmanager/kamevent.go @@ -177,8 +177,8 @@ func (kev KamEvent) GetSetupTime(fieldName, timezone string) (time.Time, error) } return utils.ParseTimeDetectLayout(sTimeStr, timezone) } -func (kev KamEvent) GetEndTime() (time.Time, error) { - return utils.ParseTimeDetectLayout(kev[CGR_STOPTIME], config.CgrConfig().DefaultTimezone) +func (kev KamEvent) GetEndTime(fieldName, timezone string) (time.Time, error) { + return utils.ParseTimeDetectLayout(kev[CGR_STOPTIME], timezone) } func (kev KamEvent) GetDuration(fieldName string) (time.Duration, error) { durStr := utils.FirstNonEmpty(kev[fieldName], kev[CGR_DURATION]) diff --git a/sessionmanager/osipsevent.go b/sessionmanager/osipsevent.go index 97498ac53..9fa4057e8 100644 --- a/sessionmanager/osipsevent.go +++ b/sessionmanager/osipsevent.go @@ -159,9 +159,9 @@ func (osipsev *OsipsEvent) GetAnswerTime(fieldName, timezone string) (time.Time, } return utils.ParseTimeDetectLayout(aTimeStr, timezone) } -func (osipsev *OsipsEvent) GetEndTime() (time.Time, error) { +func (osipsev *OsipsEvent) GetEndTime(fieldName, timezone string) (time.Time, error) { var nilTime time.Time - aTime, err := osipsev.GetAnswerTime(utils.META_DEFAULT, config.CgrConfig().DefaultTimezone) + aTime, err := osipsev.GetAnswerTime(utils.META_DEFAULT, timezone) if err != nil { return nilTime, err } @@ -227,7 +227,7 @@ func (osipsev *OsipsEvent) MissingParameter() bool { if err != nil || aTime.Equal(nilTime) { return true } - endTime, err := osipsev.GetEndTime() + endTime, err := osipsev.GetEndTime(utils.META_DEFAULT, config.CgrConfig().DefaultTimezone) if err != nil || endTime.Equal(nilTime) { return true } diff --git a/sessionmanager/osipsevent_test.go b/sessionmanager/osipsevent_test.go index 60eab224c..a74915f2f 100644 --- a/sessionmanager/osipsevent_test.go +++ b/sessionmanager/osipsevent_test.go @@ -84,7 +84,7 @@ func TestOsipsEventGetValues(t *testing.T) { eAnswerTime, _ := utils.ParseTimeDetectLayout("1406370499", "") dur, _ := osipsEv.GetDuration(utils.META_DEFAULT) pdd, _ := osipsEv.GetPdd(utils.META_DEFAULT) - endTime, _ := osipsEv.GetEndTime() + endTime, _ := osipsEv.GetEndTime(utils.META_DEFAULT, "") if osipsEv.GetName() != "E_ACC_CDR" || osipsEv.GetCgrId("") != utils.Sha1("ODVkMDI2Mzc2MDY5N2EzODhjNTAzNTdlODhiZjRlYWQ", setupTime.UTC().String()) || osipsEv.GetUUID() != "ODVkMDI2Mzc2MDY5N2EzODhjNTAzNTdlODhiZjRlYWQ" || diff --git a/sessionmanager/session.go b/sessionmanager/session.go index 15d9532d5..91a912861 100644 --- a/sessionmanager/session.go +++ b/sessionmanager/session.go @@ -115,7 +115,7 @@ func (s *Session) debitLoop(runIdx int) { // Stops the debit loop func (s *Session) Close(ev engine.Event) error { close(s.stopDebit) // Close the channel so all the sessionRuns listening will be notified - if _, err := ev.GetEndTime(); err != nil { + if _, err := ev.GetEndTime(utils.META_DEFAULT, s.sessionManager.Timezone()); err != nil { utils.Logger.Err("Error parsing event stop time.") for idx := range s.sessionRuns { s.sessionRuns[idx].CallDescriptor.TimeEnd = s.sessionRuns[idx].CallDescriptor.TimeStart.Add(s.sessionRuns[idx].CallDescriptor.DurationIndex)