mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-17 14:19:54 +05:00
Add verification for ignoreFilters opt when matching stats
This commit is contained in:
committed by
Dan Christian Bogos
parent
5802e868c8
commit
c861adc043
@@ -156,9 +156,10 @@ func (sS *StatService) StoreStatQueue(sq *StatQueue) (err error) {
|
||||
}
|
||||
|
||||
// matchingStatQueuesForEvent returns ordered list of matching statQueues which are active by the time of the call
|
||||
func (sS *StatService) matchingStatQueuesForEvent(tnt string, statsIDs []string, actTime *time.Time, evNm utils.MapStorage) (sqs StatQueues, err error) {
|
||||
func (sS *StatService) matchingStatQueuesForEvent(tnt string, statsIDs []string, actTime *time.Time, evNm utils.MapStorage, ignoreFilters bool) (sqs StatQueues, err error) {
|
||||
sqIDs := utils.NewStringSet(statsIDs)
|
||||
if len(sqIDs) == 0 {
|
||||
ignoreFilters = false
|
||||
sqIDs, err = MatchingItemIDsForEvent(evNm,
|
||||
sS.cgrcfg.StatSCfg().StringIndexedFields,
|
||||
sS.cgrcfg.StatSCfg().PrefixIndexedFields,
|
||||
@@ -192,15 +193,17 @@ func (sS *StatService) matchingStatQueuesForEvent(tnt string, statsIDs []string,
|
||||
sqPrfl.unlock()
|
||||
continue
|
||||
}
|
||||
var pass bool
|
||||
if pass, err = sS.filterS.Pass(tnt, sqPrfl.FilterIDs,
|
||||
evNm); err != nil {
|
||||
sqPrfl.unlock()
|
||||
sqs.unlock()
|
||||
return nil, err
|
||||
} else if !pass {
|
||||
sqPrfl.unlock()
|
||||
continue
|
||||
if !ignoreFilters {
|
||||
var pass bool
|
||||
if pass, err = sS.filterS.Pass(tnt, sqPrfl.FilterIDs,
|
||||
evNm); err != nil {
|
||||
sqPrfl.unlock()
|
||||
sqs.unlock()
|
||||
return nil, err
|
||||
} else if !pass {
|
||||
sqPrfl.unlock()
|
||||
continue
|
||||
}
|
||||
}
|
||||
lkID := guardian.Guardian.GuardIDs(utils.EmptyString,
|
||||
config.CgrConfig().GeneralCfg().LockingTimeout,
|
||||
@@ -331,7 +334,13 @@ func (sS *StatService) processEvent(tnt string, args *utils.CGREvent) (statQueue
|
||||
return
|
||||
}
|
||||
}
|
||||
matchSQs, err := sS.matchingStatQueuesForEvent(tnt, stsIDs, args.Time, evNm)
|
||||
ignFilters := sS.cgrcfg.StatSCfg().Opts.ProfileIgnoreFilters
|
||||
if opt, has := args.APIOpts[utils.OptsStatsProfileIDs]; has {
|
||||
if ignFilters, err = utils.IfaceAsBool(opt); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
matchSQs, err := sS.matchingStatQueuesForEvent(tnt, stsIDs, args.Time, evNm, ignFilters)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -398,11 +407,17 @@ func (sS *StatService) V1GetStatQueuesForEvent(args *utils.CGREvent, reply *[]st
|
||||
return
|
||||
}
|
||||
}
|
||||
ignFilters := sS.cgrcfg.StatSCfg().Opts.ProfileIgnoreFilters
|
||||
if opt, has := args.APIOpts[utils.OptsStatsProfileIDs]; has {
|
||||
if ignFilters, err = utils.IfaceAsBool(opt); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
var sQs StatQueues
|
||||
if sQs, err = sS.matchingStatQueuesForEvent(tnt, stsIDs, args.Time, utils.MapStorage{
|
||||
utils.MetaReq: args.Event,
|
||||
utils.MetaOpts: args.APIOpts,
|
||||
}); err != nil {
|
||||
}, ignFilters); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ func TestMatchingStatQueuesForEvent(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err := statService.matchingStatQueuesForEvent(testStatsArgs[0].Tenant, stsIDs, testStatsArgs[0].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[0].Event, utils.MetaOpts: testStatsArgs[0].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[0].Event, utils.MetaOpts: testStatsArgs[0].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -259,7 +259,7 @@ func TestMatchingStatQueuesForEvent(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err = statService.matchingStatQueuesForEvent(testStatsArgs[1].Tenant, stsIDs, testStatsArgs[1].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[1].Event, utils.MetaOpts: testStatsArgs[1].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[1].Event, utils.MetaOpts: testStatsArgs[1].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -276,7 +276,7 @@ func TestMatchingStatQueuesForEvent(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err = statService.matchingStatQueuesForEvent(testStatsArgs[2].Tenant, stsIDs, testStatsArgs[2].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[2].Event, utils.MetaOpts: testStatsArgs[2].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[2].Event, utils.MetaOpts: testStatsArgs[2].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -358,7 +358,7 @@ func TestStatQueuesMatchWithIndexFalse(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err := statService.matchingStatQueuesForEvent(testStatsArgs[0].Tenant, stsIDs, testStatsArgs[0].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[0].Event, utils.MetaOpts: testStatsArgs[0].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[0].Event, utils.MetaOpts: testStatsArgs[0].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -375,7 +375,7 @@ func TestStatQueuesMatchWithIndexFalse(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err = statService.matchingStatQueuesForEvent(testStatsArgs[1].Tenant, stsIDs, testStatsArgs[1].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[1].Event, utils.MetaOpts: testStatsArgs[1].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[1].Event, utils.MetaOpts: testStatsArgs[1].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -392,7 +392,7 @@ func TestStatQueuesMatchWithIndexFalse(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
msq, err = statService.matchingStatQueuesForEvent(testStatsArgs[2].Tenant, stsIDs, testStatsArgs[2].Time,
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[2].Event, utils.MetaOpts: testStatsArgs[2].APIOpts})
|
||||
utils.MapStorage{utils.MetaReq: testStatsArgs[2].Event, utils.MetaOpts: testStatsArgs[2].APIOpts}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -692,7 +692,7 @@ func TestStatQueueMatchingStatQueuesForEventLocks(t *testing.T) {
|
||||
ids.Add(rPrf.ID)
|
||||
}
|
||||
dm.RemoveStatQueue("cgrates.org", "STS1")
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{})
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{}, false)
|
||||
if err != utils.ErrNotFound {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -753,7 +753,7 @@ func TestStatQueueMatchingStatQueuesForEventLocks2(t *testing.T) {
|
||||
}
|
||||
prfs = append(prfs, rPrf)
|
||||
ids.Add(rPrf.ID)
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{})
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{}, false)
|
||||
expErr := utils.ErrPrefixNotFound(rPrf.FilterIDs[0])
|
||||
if err == nil || err.Error() != expErr.Error() {
|
||||
t.Errorf("Expected error: %s ,received: %+v", expErr, err)
|
||||
@@ -800,7 +800,7 @@ func TestStatQueueMatchingStatQueuesForEventLocksBlocker(t *testing.T) {
|
||||
prfs = append(prfs, rPrf)
|
||||
ids.Add(rPrf.ID)
|
||||
}
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{})
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -867,7 +867,7 @@ func TestStatQueueMatchingStatQueuesForEventLocksActivationInterval(t *testing.T
|
||||
}
|
||||
dm.SetStatQueueProfile(rPrf, true)
|
||||
ids.Add(rPrf.ID)
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), utils.TimePointer(time.Now()), utils.MapStorage{})
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), utils.TimePointer(time.Now()), utils.MapStorage{}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
@@ -919,7 +919,7 @@ func TestStatQueueMatchingStatQueuesForEventLocks3(t *testing.T) {
|
||||
for i := 0; i < 10; i++ {
|
||||
ids.Add(fmt.Sprintf("STS%d", i))
|
||||
}
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{})
|
||||
_, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{}, false)
|
||||
if err != utils.ErrNotImplemented {
|
||||
t.Fatalf("Error: %+v", err)
|
||||
}
|
||||
@@ -958,7 +958,7 @@ func TestStatQueueMatchingStatQueuesForEventLocks4(t *testing.T) {
|
||||
ids.Add(rPrf.ID)
|
||||
}
|
||||
ids.Add("STS20")
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{})
|
||||
mres, err := rS.matchingStatQueuesForEvent("cgrates.org", ids.AsSlice(), nil, utils.MapStorage{}, false)
|
||||
if err != nil {
|
||||
t.Errorf("Error: %+v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user