Add ~*req prefix when sending NavigableMap to Pass for filtering

This commit is contained in:
TeoV
2019-11-25 17:18:04 +02:00
parent 0e97bb5015
commit 821b5492ce
10 changed files with 36 additions and 13 deletions

View File

@@ -82,6 +82,8 @@ func (alS *AttributeService) attributeProfileForEvent(args *AttrArgsProcessEvent
}
attrIDs = aPrflIDs.Slice()
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, args.Event, false, false)
for _, apID := range attrIDs {
aPrfl, err := alS.dm.GetAttributeProfile(args.Tenant, apID, true, true, utils.NonTransactional)
if err != nil {
@@ -95,7 +97,7 @@ func (alS *AttributeService) attributeProfileForEvent(args *AttrArgsProcessEvent
continue
}
if pass, err := alS.filterS.Pass(args.Tenant, aPrfl.FilterIDs,
config.NewNavigableMap(args.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue
@@ -159,12 +161,13 @@ func (alS *AttributeService) processEvent(args *AttrArgsProcessEvent) (
MatchedProfiles: []string{attrPrf.ID},
CGREvent: args.Clone(),
blocker: attrPrf.Blocker}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, args.Event, false, false)
for _, attribute := range attrPrf.Attributes {
//in case that we have filter for attribute send them to FilterS to be processed
if len(attribute.FilterIDs) != 0 {
if pass, err := alS.filterS.Pass(args.Tenant, attribute.FilterIDs,
config.NewNavigableMap(args.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -421,9 +421,11 @@ func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTlsCheck bool,
// ExportRecord is a []string to keep it compatible with encoding/csv Writer
func (cdr *CDR) AsExportRecord(exportFields []*config.FCTemplate,
httpSkipTlsCheck bool, groupedCDRs []*CDR, filterS *FilterS) (expRecord []string, err error) {
nM := config.NewNavigableMap(nil)
nM.Set([]string{utils.MetaReq}, cdr.AsMapStringIface(), false, false)
for _, cfgFld := range exportFields {
if pass, err := filterS.Pass(cdr.Tenant,
cfgFld.Filters, config.NewNavigableMap(cdr.AsMapStringIface())); err != nil {
cfgFld.Filters, nM); err != nil {
return []string{}, err
} else if !pass {
continue
@@ -444,9 +446,11 @@ func (cdr *CDR) AsExportRecord(exportFields []*config.FCTemplate,
func (cdr *CDR) AsExportMap(exportFields []*config.FCTemplate, httpSkipTlsCheck bool,
groupedCDRs []*CDR, filterS *FilterS) (expMap map[string]string, err error) {
expMap = make(map[string]string)
nM := config.NewNavigableMap(nil)
nM.Set([]string{utils.MetaReq}, cdr.AsMapStringIface(), false, false)
for _, cfgFld := range exportFields {
if pass, err := filterS.Pass(cdr.Tenant,
cfgFld.Filters, config.NewNavigableMap(cdr.AsMapStringIface())); err != nil {
cfgFld.Filters, nM); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -388,8 +388,10 @@ func (cdre *CDRExporter) processCDRs() (err error) {
if cdre.exportTemplate.Tenant == "" {
cdre.exportTemplate.Tenant = config.CgrConfig().GeneralCfg().DefaultTenant
}
cgrDp := config.NewNavigableMap(nil)
cgrDp.Set([]string{utils.MetaReq}, cdr.AsMapStringIface(), false, false)
if pass, err := cdre.filterS.Pass(cdre.exportTemplate.Tenant,
cdre.exportTemplate.Filters, config.NewNavigableMap(cdr.AsMapStringIface())); err != nil || !pass {
cdre.exportTemplate.Filters, cgrDp); err != nil || !pass {
continue // Not passes filters, ignore this CDR
}
}

View File

@@ -69,6 +69,8 @@ func (cS *ChargerService) matchingChargerProfilesForEvent(cgrEv *utils.CGREventW
if err != nil {
return nil, err
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, cgrEv.Event, false, false)
matchingCPs := make(map[string]*ChargerProfile)
for cpID := range cpIDs {
cP, err := cS.dm.GetChargerProfile(cgrEv.Tenant, cpID, true, true, utils.NonTransactional)
@@ -83,7 +85,7 @@ func (cS *ChargerService) matchingChargerProfilesForEvent(cgrEv *utils.CGREventW
continue
}
if pass, err := cS.filterS.Pass(cgrEv.Tenant, cP.FilterIDs,
config.NewNavigableMap(cgrEv.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -549,8 +549,10 @@ func (fS *FilterS) getFieldNameDataProvider(initialDP config.DataProvider,
//convert ifaceStatValues into a NavigableMap
dp = config.NewNavigableMap(ifaceStatValues)
*fieldName = utils.DynamicDataPrefix + splitFldName[2]
default:
case strings.HasPrefix(*fieldName, utils.DynamicDataPrefix+utils.MetaReq):
dp = initialDP
default:
return nil, utils.ErrPrefixNotFound(fmt.Sprintf(" data provider prefix for <%s>", *fieldName))
}
return
}

View File

@@ -216,9 +216,11 @@ func (sq *StatQueue) addStatEvent(ev *utils.CGREvent, filterS *FilterS) (err err
ExpiryTime *time.Time
}{ev.ID, expTime})
var pass bool
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, ev.Event, false, false)
for metricID, metric := range sq.SQMetrics {
if pass, err = filterS.Pass(ev.Tenant, metric.GetFilterIDs(),
config.NewNavigableMap(ev.Event)); err != nil {
evNm); err != nil {
return
} else if !pass {
continue

View File

@@ -466,6 +466,8 @@ func (rS *ResourceService) matchingResourcesForEvent(ev *utils.CGREvent,
}
return
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, ev.Event, false, false)
lockIDs := utils.PrefixSliceItems(rs.IDs(), utils.ResourcesPrefix)
guardian.Guardian.Guard(func() (gIface interface{}, gErr error) {
for resName := range rIDs {
@@ -482,7 +484,7 @@ func (rS *ResourceService) matchingResourcesForEvent(ev *utils.CGREvent,
continue
}
if pass, err := rS.filterS.Pass(ev.Tenant, rPrf.FilterIDs,
config.NewNavigableMap(ev.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -167,6 +167,8 @@ func (sS *StatService) matchingStatQueuesForEvent(args *StatsArgsProcessEvent) (
}
sqIDs = mapIDs.Slice()
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, args.Event, false, false)
for _, sqID := range sqIDs {
sqPrfl, err := sS.dm.GetStatQueueProfile(args.Tenant, sqID, true, true, utils.NonTransactional)
if err != nil {
@@ -180,7 +182,7 @@ func (sS *StatService) matchingStatQueuesForEvent(args *StatsArgsProcessEvent) (
continue
}
if pass, err := sS.filterS.Pass(args.Tenant, sqPrfl.FilterIDs,
config.NewNavigableMap(args.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -171,6 +171,8 @@ func (spS *SupplierService) matchingSupplierProfilesForEvent(ev *utils.CGREvent,
if singleResult {
matchingSLP = make([]*SupplierProfile, 1)
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, ev.Event, false, false)
for lpID := range sPrflIDs {
splPrfl, err := spS.dm.GetSupplierProfile(ev.Tenant, lpID, true, true, utils.NonTransactional)
if err != nil {
@@ -184,7 +186,7 @@ func (spS *SupplierService) matchingSupplierProfilesForEvent(ev *utils.CGREvent,
continue
}
if pass, err := spS.filterS.Pass(ev.Tenant, splPrfl.FilterIDs,
config.NewNavigableMap(ev.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue

View File

@@ -231,6 +231,8 @@ func (tS *ThresholdService) matchingThresholdsForEvent(args *ArgsProcessEvent) (
}
tIDs = tIDsMap.Slice()
}
evNm := config.NewNavigableMap(nil)
evNm.Set([]string{utils.MetaReq}, args.Event, false, false)
for _, tID := range tIDs {
tPrfl, err := tS.dm.GetThresholdProfile(args.Tenant, tID, true, true, utils.NonTransactional)
if err != nil {
@@ -244,7 +246,7 @@ func (tS *ThresholdService) matchingThresholdsForEvent(args *ArgsProcessEvent) (
continue
}
if pass, err := tS.filterS.Pass(args.Tenant, tPrfl.FilterIDs,
config.NewNavigableMap(args.Event)); err != nil {
evNm); err != nil {
return nil, err
} else if !pass {
continue