From 821b5492ce6239dd0da3572e8de75542ada8298f Mon Sep 17 00:00:00 2001 From: TeoV Date: Mon, 25 Nov 2019 17:18:04 +0200 Subject: [PATCH] Add ~*req prefix when sending NavigableMap to Pass for filtering --- engine/attributes.go | 9 ++++++--- engine/cdr.go | 8 ++++++-- engine/cdre.go | 4 +++- engine/chargers.go | 4 +++- engine/filters.go | 4 +++- engine/libstats.go | 4 +++- engine/resources.go | 4 +++- engine/stats.go | 4 +++- engine/suppliers.go | 4 +++- engine/thresholds.go | 4 +++- 10 files changed, 36 insertions(+), 13 deletions(-) diff --git a/engine/attributes.go b/engine/attributes.go index 95762fda7..fd1eda7a1 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -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 diff --git a/engine/cdr.go b/engine/cdr.go index 92f474e04..d684a8be4 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -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 diff --git a/engine/cdre.go b/engine/cdre.go index 2a6ce38e3..bb874ad3b 100644 --- a/engine/cdre.go +++ b/engine/cdre.go @@ -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 } } diff --git a/engine/chargers.go b/engine/chargers.go index e3224a820..838408e98 100644 --- a/engine/chargers.go +++ b/engine/chargers.go @@ -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 diff --git a/engine/filters.go b/engine/filters.go index 307fdae00..242369997 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -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 } diff --git a/engine/libstats.go b/engine/libstats.go index ee9e3e338..60a58cb78 100644 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -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 diff --git a/engine/resources.go b/engine/resources.go index eda74dcdf..5b2e7a9cf 100644 --- a/engine/resources.go +++ b/engine/resources.go @@ -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 diff --git a/engine/stats.go b/engine/stats.go index 39bde825e..9bc08a4c2 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -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 diff --git a/engine/suppliers.go b/engine/suppliers.go index 31d1c4133..51650afff 100644 --- a/engine/suppliers.go +++ b/engine/suppliers.go @@ -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 diff --git a/engine/thresholds.go b/engine/thresholds.go index a457c4262..ee0ad1b82 100644 --- a/engine/thresholds.go +++ b/engine/thresholds.go @@ -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