mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-22 15:48:44 +05:00
Indexing empty FilterIDs ( *default:*any:*any)
This commit is contained in:
committed by
Dan Christian Bogos
parent
b6f34d8c57
commit
7d597caf3b
@@ -411,9 +411,28 @@ func (dm *DataManager) SetThresholdProfile(th *ThresholdProfile, withIndex bool)
|
||||
}
|
||||
indexer := NewFilterIndexer(dm, utils.ThresholdProfilePrefix, th.Tenant)
|
||||
//Verify matching Filters for every FilterID from ThresholdProfile
|
||||
for _, fltrID := range th.FilterIDs {
|
||||
fltrIDs := make([]string, len(th.FilterIDs))
|
||||
for i, fltrID := range th.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
var fltr *Filter
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
if fltrID == utils.META_NONE {
|
||||
fltr = &Filter{
|
||||
Tenant: th.Tenant,
|
||||
ID: th.ID,
|
||||
Rules: []*FilterRule{
|
||||
&FilterRule{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -497,9 +516,28 @@ func (dm *DataManager) SetStatQueueProfile(sqp *StatQueueProfile, withIndex bool
|
||||
return
|
||||
}
|
||||
//Verify matching Filters for every FilterID from StatQueueProfile
|
||||
for _, fltrID := range sqp.FilterIDs {
|
||||
fltrIDs := make([]string, len(sqp.FilterIDs))
|
||||
for i, fltrID := range sqp.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
var fltr *Filter
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
if fltrID == utils.META_NONE {
|
||||
fltr = &Filter{
|
||||
Tenant: sqp.Tenant,
|
||||
ID: sqp.ID,
|
||||
Rules: []*FilterRule{
|
||||
&FilterRule{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -573,7 +611,6 @@ func (dm *DataManager) SetTiming(t *utils.TPTiming) (err error) {
|
||||
return
|
||||
}
|
||||
return dm.CacheDataFromDB(utils.TimingsPrefix, []string{t.ID}, true)
|
||||
|
||||
}
|
||||
|
||||
func (dm *DataManager) RemoveTiming(id, transactionID string) (err error) {
|
||||
@@ -661,9 +698,28 @@ func (dm *DataManager) SetResourceProfile(rp *ResourceProfile, withIndex bool) (
|
||||
return
|
||||
}
|
||||
//Verify matching Filters for every FilterID from ResourceProfiles
|
||||
for _, fltrID := range rp.FilterIDs {
|
||||
fltrIDs := make([]string, len(rp.FilterIDs))
|
||||
for i, fltrID := range rp.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
var fltr *Filter
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
if fltrID == utils.META_NONE {
|
||||
fltr = &Filter{
|
||||
Tenant: rp.Tenant,
|
||||
ID: rp.ID,
|
||||
Rules: []*FilterRule{
|
||||
&FilterRule{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1098,9 +1154,28 @@ func (dm *DataManager) SetSupplierProfile(supp *SupplierProfile, withIndex bool)
|
||||
return
|
||||
}
|
||||
//Verify matching Filters for every FilterID from SupplierProfile
|
||||
for _, fltrID := range supp.FilterIDs {
|
||||
fltrIDs := make([]string, len(supp.FilterIDs))
|
||||
for i, fltrID := range supp.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
var fltr *Filter
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
if fltrID == utils.META_NONE {
|
||||
fltr = &Filter{
|
||||
Tenant: supp.Tenant,
|
||||
ID: supp.ID,
|
||||
Rules: []*FilterRule{
|
||||
&FilterRule{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1215,9 +1290,28 @@ func (dm *DataManager) SetAttributeProfile(ap *AttributeProfile, withIndex bool)
|
||||
for _, ctx := range ap.Contexts {
|
||||
indexer := NewFilterIndexer(dm, utils.AttributeProfilePrefix, utils.ConcatenatedKey(ap.Tenant, ctx))
|
||||
//Verify matching Filters for every FilterID from AttributeProfile
|
||||
for _, fltrID := range ap.FilterIDs {
|
||||
fltrIDs := make([]string, len(ap.FilterIDs))
|
||||
for i, fltrID := range ap.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
var fltr *Filter
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
if fltrID == utils.META_NONE {
|
||||
fltr = &Filter{
|
||||
Tenant: ap.Tenant,
|
||||
ID: ap.ID,
|
||||
Rules: []*FilterRule{
|
||||
&FilterRule{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -54,6 +54,9 @@ var sTests = []func(t *testing.T){
|
||||
testITIsDBEmpty,
|
||||
testITTestStoreFilterIndexesWithTransID,
|
||||
testITTestStoreFilterIndexesWithTransID2,
|
||||
testITFlush,
|
||||
testITIsDBEmpty,
|
||||
testITTestIndexingWithEmptyFltrID,
|
||||
}
|
||||
|
||||
func TestITRedisConnect(t *testing.T) {
|
||||
@@ -858,5 +861,51 @@ func testITTestStoreFilterIndexesWithTransID2(t *testing.T) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", idxes, rcv)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func testITTestIndexingWithEmptyFltrID(t *testing.T) {
|
||||
th := &ThresholdProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "THD_Test",
|
||||
ActivationInterval: &utils.ActivationInterval{},
|
||||
FilterIDs: []string{},
|
||||
Recurrent: true,
|
||||
MinSleep: time.Duration(0 * time.Second),
|
||||
Blocker: true,
|
||||
Weight: 1.4,
|
||||
ActionIDs: []string{},
|
||||
}
|
||||
|
||||
if err := dataManager.SetThresholdProfile(th, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
eIdxes := map[string]utils.StringMap{
|
||||
"*default:*any:*any": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
}
|
||||
reverseIdxes := map[string]utils.StringMap{
|
||||
"THD_Test": utils.StringMap{
|
||||
"*default:*any:*any": true,
|
||||
},
|
||||
}
|
||||
rfi := NewFilterIndexer(onStor, utils.ThresholdProfilePrefix, th.Tenant)
|
||||
if rcvIdx, err := dataManager.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false), MetaString,
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(eIdxes, rcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", eIdxes, rcvIdx)
|
||||
}
|
||||
}
|
||||
if reverseRcvIdx, err := dataManager.GetFilterReverseIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, true),
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(reverseIdxes, reverseRcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", reverseIdxes, reverseRcvIdx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1634,8 +1634,28 @@ func (tpr *TpReader) LoadResourceProfilesFiltered(tag string) (err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, fltrID := range res.FilterIDs {
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
fltrIDs := make([]string, len(res.FilterIDs))
|
||||
for i, fltrID := range res.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
if fltrID == utils.META_NONE {
|
||||
tpFltr := &utils.TPFilterProfile{
|
||||
Tenant: res.Tenant,
|
||||
ID: res.ID,
|
||||
Filters: []*utils.TPFilter{
|
||||
&utils.TPFilter{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
tpr.resIndexers[tntID.Tenant].IndexTPFilter(tpFltr, res.ID)
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1693,8 +1713,28 @@ func (tpr *TpReader) LoadStatsFiltered(tag string) (err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, fltrID := range sq.FilterIDs {
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
fltrIDs := make([]string, len(sq.FilterIDs))
|
||||
for i, fltrID := range sq.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
if fltrID == utils.META_NONE {
|
||||
tpFltr := &utils.TPFilterProfile{
|
||||
Tenant: sq.Tenant,
|
||||
ID: sq.ID,
|
||||
Filters: []*utils.TPFilter{
|
||||
&utils.TPFilter{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
tpr.sqpIndexers[tntID.Tenant].IndexTPFilter(tpFltr, sq.ID)
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1752,8 +1792,28 @@ func (tpr *TpReader) LoadThresholdsFiltered(tag string) (err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, fltrID := range th.FilterIDs {
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
fltrIDs := make([]string, len(th.FilterIDs))
|
||||
for i, fltrID := range th.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
if fltrID == utils.META_NONE {
|
||||
tpFltr := &utils.TPFilterProfile{
|
||||
Tenant: th.Tenant,
|
||||
ID: th.ID,
|
||||
Filters: []*utils.TPFilter{
|
||||
&utils.TPFilter{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
tpr.thdsIndexers[tntID.Tenant].IndexTPFilter(tpFltr, th.ID)
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1828,8 +1888,28 @@ func (tpr *TpReader) LoadSupplierProfilesFiltered(tag string) (err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, fltrID := range sup.FilterIDs {
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
fltrIDs := make([]string, len(sup.FilterIDs))
|
||||
for i, fltrID := range sup.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
if fltrID == utils.META_NONE {
|
||||
tpFltr := &utils.TPFilterProfile{
|
||||
Tenant: sup.Tenant,
|
||||
ID: sup.ID,
|
||||
Filters: []*utils.TPFilter{
|
||||
&utils.TPFilter{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
tpr.sppIndexers[tntID.Tenant].IndexTPFilter(tpFltr, sup.ID)
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1889,8 +1969,28 @@ func (tpr *TpReader) LoadAttributeProfilesFiltered(tag string) (err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, fltrID := range attrP.FilterIDs {
|
||||
if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
fltrIDs := make([]string, len(attrP.FilterIDs))
|
||||
for i, fltrID := range attrP.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
}
|
||||
if len(fltrIDs) == 0 {
|
||||
fltrIDs = []string{utils.META_NONE}
|
||||
}
|
||||
for _, fltrID := range fltrIDs {
|
||||
if fltrID == utils.META_NONE {
|
||||
tpFltr := &utils.TPFilterProfile{
|
||||
Tenant: attrP.Tenant,
|
||||
ID: attrP.ID,
|
||||
Filters: []*utils.TPFilter{
|
||||
&utils.TPFilter{
|
||||
Type: utils.MetaDefault,
|
||||
FieldName: utils.META_ANY,
|
||||
Values: []string{utils.META_ANY},
|
||||
},
|
||||
},
|
||||
}
|
||||
tpr.attrIndexers[tntID.Tenant].IndexTPFilter(tpFltr, attrP.ID)
|
||||
} else if strings.HasPrefix(fltrID, utils.MetaPrefix) {
|
||||
inFltr, err := NewInlineFilter(fltrID)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user