mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 21:29:52 +05:00
Updated asActiveSessions
This commit is contained in:
committed by
Dan Christian Bogos
parent
a3eac846d4
commit
44a55a0edc
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user