Updated asActiveSessions

This commit is contained in:
Trial97
2019-03-13 11:54:10 +02:00
committed by Dan Christian Bogos
parent a3eac846d4
commit 44a55a0edc
2 changed files with 52 additions and 20 deletions

View File

@@ -150,6 +150,39 @@ func (s *Session) AsActiveSessions(tmz, nodeID string) (aSs []*ActiveSession) {
s.RUnlock()
return
}
func (s *Session) asActiveSessions(sr *SRun, tmz, nodeID string) (aS *ActiveSession) {
s.RLock()
aS = &ActiveSession{
CGRID: s.CGRID,
RunID: sr.Event.GetStringIgnoreErrors(utils.RunID),
ToR: sr.Event.GetStringIgnoreErrors(utils.ToR),
OriginID: s.EventStart.GetStringIgnoreErrors(utils.OriginID),
OriginHost: s.EventStart.GetStringIgnoreErrors(utils.OriginHost),
Source: utils.SessionS + "_" + s.EventStart.GetStringIgnoreErrors(utils.EVENT_NAME),
RequestType: sr.Event.GetStringIgnoreErrors(utils.RequestType),
Tenant: s.Tenant,
Category: sr.Event.GetStringIgnoreErrors(utils.Category),
Account: sr.Event.GetStringIgnoreErrors(utils.Account),
Subject: sr.Event.GetStringIgnoreErrors(utils.Subject),
Destination: sr.Event.GetStringIgnoreErrors(utils.Destination),
SetupTime: sr.Event.GetTimeIgnoreErrors(utils.SetupTime, tmz),
AnswerTime: sr.Event.GetTimeIgnoreErrors(utils.AnswerTime, tmz),
Usage: sr.TotalUsage,
ExtraFields: sr.Event.AsMapStringIgnoreErrors(
utils.NewStringMap(utils.MainCDRFields...)),
NodeID: nodeID,
DebitInterval: s.DebitInterval,
}
if sr.CD != nil {
aS.LoopIndex = sr.CD.LoopIndex
aS.DurationIndex = sr.CD.DurationIndex
aS.MaxRate = sr.CD.MaxRate
aS.MaxRateUnit = sr.CD.MaxRateUnit
aS.MaxCostSoFar = sr.CD.MaxCostSoFar
}
s.RUnlock()
return
}
// TotalUsage returns the first session run total usage
func (s *Session) TotalUsage() (tDur time.Duration) {

View File

@@ -903,31 +903,30 @@ func (sS *SessionS) asActiveSessions(fltrs map[string]string,
var remainingSessions []*Session // Survived index matching
ss := sS.getSessions(fltrs[utils.CGRID], psv)
for _, s := range ss {
remainingSessions = append(remainingSessions, s.Clone())
remainingSessions = append(remainingSessions, s)
}
if len(fltrs) != 0 { // Still have some filters to match
for i := 0; i < len(remainingSessions); {
if !remainingSessions[i].EventStart.HasField(utils.RunID) { // ToDo: try removing dependency on default run
remainingSessions[i].EventStart.Set(utils.RunID, utils.META_DEFAULT)
}
matchingAll := true
for fltrFldName, fltrFldVal := range fltrs {
if remainingSessions[i].EventStart.GetStringIgnoreErrors(fltrFldName) != fltrFldVal { // No Match
matchingAll = false
break
for _, s := range remainingSessions {
for _, sr := range s.SRuns {
matchingAll := true
for fltrFldName, fltrFldVal := range fltrs {
if sr.Event.GetStringIgnoreErrors(fltrFldName) != fltrFldVal { // No Match
matchingAll = false
break
}
}
if matchingAll {
aSs = append(aSs, s.asActiveSessions(sr, sS.cgrCfg.GeneralCfg().DefaultTimezone,
sS.cgrCfg.GeneralCfg().NodeID))
}
}
if !matchingAll {
remainingSessions = append(remainingSessions[:i], remainingSessions[i+1:]...)
continue // if we have stripped, don't increase index so we can check next element by next run
}
i++
}
}
for _, s := range remainingSessions {
aSs = append(aSs,
s.AsActiveSessions(sS.cgrCfg.GeneralCfg().DefaultTimezone,
sS.cgrCfg.GeneralCfg().NodeID)...) // Expensive for large number of sessions
} else {
for _, s := range remainingSessions {
aSs = append(aSs,
s.AsActiveSessions(sS.cgrCfg.GeneralCfg().DefaultTimezone,
sS.cgrCfg.GeneralCfg().NodeID)...) // Expensive for large number of sessions
}
}
if count {
return nil, len(aSs), nil