From 0226f4c8e102e8b9156030a5241f830e9949e4a1 Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 26 Nov 2019 15:35:34 +0200 Subject: [PATCH] Update merge --- engine/attributes.go | 4 +++- engine/attributes_test.go | 14 +++++++------- engine/cdr.go | 8 ++++++-- engine/cdre.go | 4 +++- engine/chargers.go | 4 +++- engine/filterhelpers.go | 2 +- engine/libstats.go | 4 +++- engine/resources.go | 4 +++- engine/stats.go | 4 +++- engine/suppliers.go | 4 +++- engine/thresholds.go | 4 +++- 11 files changed, 38 insertions(+), 18 deletions(-) diff --git a/engine/attributes.go b/engine/attributes.go index 5726345a8..bb0f3fd4a 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -162,11 +162,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/attributes_test.go b/engine/attributes_test.go index 8aca9d430..db775429b 100644 --- a/engine/attributes_test.go +++ b/engine/attributes_test.go @@ -132,7 +132,7 @@ var ( Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "AttributeIDMatch", Contexts: []string{utils.MetaSessionS}, - FilterIDs: []string{"*gte:~DistinctMatch:20"}, + FilterIDs: []string{"*gte:~*req.DistinctMatch:20"}, ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), ExpiryTime: cloneExpTimeAttributes, @@ -175,17 +175,17 @@ func TestAttributeAddFilters(t *testing.T) { Rules: []*FilterRule{ { Type: utils.MetaString, - FieldName: "~Attribute", + FieldName: "~*req.Attribute", Values: []string{"AttributeProfile1"}, }, { Type: utils.MetaGreaterOrEqual, - FieldName: "~UsageInterval", + FieldName: "~*req.UsageInterval", Values: []string{(1 * time.Second).String()}, }, { Type: utils.MetaGreaterOrEqual, - FieldName: utils.DynamicDataPrefix + utils.Weight, + FieldName: "~*req." + utils.Weight, Values: []string{"9.0"}, }, }, @@ -197,7 +197,7 @@ func TestAttributeAddFilters(t *testing.T) { Rules: []*FilterRule{ { Type: utils.MetaString, - FieldName: "~Attribute", + FieldName: "~*req.Attribute", Values: []string{"AttributeProfile2"}, }, }, @@ -209,7 +209,7 @@ func TestAttributeAddFilters(t *testing.T) { Rules: []*FilterRule{ { Type: utils.MetaPrefix, - FieldName: "~Attribute", + FieldName: "~*req.Attribute", Values: []string{"AttributeProfilePrefix"}, }, }, @@ -221,7 +221,7 @@ func TestAttributeAddFilters(t *testing.T) { Rules: []*FilterRule{ { Type: utils.MetaGreaterOrEqual, - FieldName: utils.DynamicDataPrefix + utils.Weight, + FieldName: "~*req." + utils.Weight, Values: []string{"200.00"}, }, }, 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..4188b055f 100644 --- a/engine/chargers.go +++ b/engine/chargers.go @@ -70,6 +70,8 @@ func (cS *ChargerService) matchingChargerProfilesForEvent(cgrEv *utils.CGREventW return nil, err } matchingCPs := make(map[string]*ChargerProfile) + evNm := config.NewNavigableMap(nil) + evNm.Set([]string{utils.MetaReq}, cgrEv.Event, false, false) for cpID := range cpIDs { cP, err := cS.dm.GetChargerProfile(cgrEv.Tenant, cpID, true, true, utils.NonTransactional) if err != nil { @@ -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/filterhelpers.go b/engine/filterhelpers.go index 9a17607a8..774360845 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -79,7 +79,7 @@ func MatchingItemIDsForEvent(ev map[string]interface{}, stringFldIDs, prefixFldI fldVals = utils.SplitPrefix(fldVal, 1) // all prefixes till last digit } if fldName != utils.META_ANY { - fldName = utils.DynamicDataPrefix + fldName + fldName = utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + fldName } var dbItemIDs utils.StringMap // list of items matched in DB for _, val := range fldVals { 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