Faster ActiveSessionsCount

This commit is contained in:
DanB
2016-08-26 15:42:45 +02:00
parent cd4fec5167
commit dedb006d6c
3 changed files with 15 additions and 12 deletions

View File

@@ -592,7 +592,7 @@ func (self *SMGeneric) getSessions() map[string][]*SMGSession {
return self.sessions
}
func (self *SMGeneric) ActiveSessions(fltrs map[string]string) (aSessions []*ActiveSession, err error) {
func (self *SMGeneric) ActiveSessions(fltrs map[string]string, count bool) (aSessions []*ActiveSession, counter int, err error) {
aSessions = make([]*ActiveSession, 0) // Make sure we return at least empty list and not nil
// Check first based on indexes so we can downsize the list of matching sessions
matchingSessionIDs, checkedFilters := self.getSessionIDsMatchingIndexes(fltrs)
@@ -617,7 +617,7 @@ func (self *SMGeneric) ActiveSessions(fltrs map[string]string) (aSessions []*Act
for i, s := range remainingSessions {
sMp, err := s.eventStart.AsMapStringString()
if err != nil {
return nil, err
return nil, 0, err
}
if _, hasRunID := sMp[utils.MEDI_RUNID]; !hasRunID {
sMp[utils.MEDI_RUNID] = utils.META_DEFAULT
@@ -635,8 +635,11 @@ func (self *SMGeneric) ActiveSessions(fltrs map[string]string) (aSessions []*Act
}
}
}
if count {
return nil, len(remainingSessions), nil
}
for _, s := range remainingSessions {
aSessions = append(aSessions, s.AsActiveSession(self.Timezone()))
aSessions = append(aSessions, s.AsActiveSession(self.Timezone())) // Expensive for large number of sessions
}
return
}

View File

@@ -213,27 +213,27 @@ func TestSMGActiveSessions(t *testing.T) {
"Extra3": "extra3",
}
smg.recordSession(smGev2.GetUUID(), &SMGSession{eventStart: smGev2})
if aSessions, err := smg.ActiveSessions(nil); err != nil {
if aSessions, _, err := smg.ActiveSessions(nil, false); err != nil {
t.Error(err)
} else if len(aSessions) != 2 {
t.Errorf("Received sessions: %%+v", aSessions)
}
if aSessions, err := smg.ActiveSessions(map[string]string{"Tenant": "itsyscom.com"}); err != nil {
if aSessions, _, err := smg.ActiveSessions(map[string]string{"Tenant": "itsyscom.com"}, false); err != nil {
t.Error(err)
} else if len(aSessions) != 1 {
t.Errorf("Received sessions: %%+v", aSessions)
}
if aSessions, err := smg.ActiveSessions(map[string]string{utils.TOR: "*voice"}); err != nil {
if aSessions, _, err := smg.ActiveSessions(map[string]string{utils.TOR: "*voice"}, false); err != nil {
t.Error(err)
} else if len(aSessions) != 2 {
t.Errorf("Received sessions: %%+v", aSessions)
}
if aSessions, err := smg.ActiveSessions(map[string]string{"Extra3": utils.MetaEmpty}); err != nil {
if aSessions, _, err := smg.ActiveSessions(map[string]string{"Extra3": utils.MetaEmpty}, false); err != nil {
t.Error(err)
} else if len(aSessions) != 1 {
t.Errorf("Received sessions: %+v", aSessions)
}
if aSessions, err := smg.ActiveSessions(map[string]string{utils.SUPPLIER: "supplier2"}); err != nil {
if aSessions, _, err := smg.ActiveSessions(map[string]string{utils.SUPPLIER: "supplier2"}, false); err != nil {
t.Error(err)
} else if len(aSessions) != 1 {
t.Errorf("Received sessions: %+v", aSessions)