From b41d9ae2d6c7b02d7589a99929dc871b188b34bc Mon Sep 17 00:00:00 2001 From: Trial97 Date: Thu, 8 Jul 2021 14:14:13 +0300 Subject: [PATCH] Added ProcessedProfileIDs in vars for attributes --- engine/attributes.go | 5 ++++- utils/consts.go | 1 + utils/stringset.go | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/engine/attributes.go b/engine/attributes.go index db8005bfe..b1a96b283 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -273,9 +273,11 @@ func (alS *AttributeService) V1ProcessEvent(ctx *context.Context, args *AttrArgs processRuns = *args.ProcessRuns } args.CGREvent = args.CGREvent.Clone() + processedPrf := make(utils.StringSet) eNV := utils.MapStorage{ utils.MetaVars: utils.MapStorage{ - utils.ProcessRuns: 0, + utils.ProcessRuns: 0, + utils.ProcessedProfileIDs: processedPrf, }, utils.MetaTenant: tnt, } @@ -307,6 +309,7 @@ func (alS *AttributeService) V1ProcessEvent(ctx *context.Context, args *AttrArgs tnt = evRply.CGREvent.Tenant lastID = evRply.MatchedProfiles[0] matchedIDs = append(matchedIDs, lastID) + processedPrf.Add(lastID) for _, fldName := range evRply.AlteredFields { alteredFields.Add(fldName) } diff --git a/utils/consts.go b/utils/consts.go index f554584fe..71f44396a 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -807,6 +807,7 @@ const ( RouteID = "RouteID" MetaMonthlyEstimated = "*monthly_estimated" ProcessRuns = "ProcessRuns" + ProcessedProfileIDs = "ProcessedProfileIDs" HashtagSep = "#" MetaRounding = "*rounding" StatsNA = -1.0 diff --git a/utils/stringset.go b/utils/stringset.go index 4b74c90ab..e229b3a52 100644 --- a/utils/stringset.go +++ b/utils/stringset.go @@ -136,3 +136,28 @@ func (s StringSet) Equals(s2 StringSet) bool { } return true } + +// added this to implement DataProvieder interface avoid reflect usage in MapStorage + +// String returns the set as a json string ( the fields are not ordered) +func (s StringSet) String() string { return ToJSON(s.AsSlice()) } + +// FieldAsInterface returns an empty structure if the path exists else ErrNotFound +func (s StringSet) FieldAsInterface(fldPath []string) (interface{}, error) { + if len(fldPath) != 1 { + return nil, ErrNotFound + } + val, has := s[fldPath[0]] + if !has { + return nil, ErrNotFound + } + return val, nil +} + +// FieldAsString returns an empty structure as a json string if the path exists else ErrNotFound +func (s StringSet) FieldAsString(fldPath []string) (_ string, err error) { + if _, err = s.FieldAsInterface(fldPath); err != nil { + return + } + return "{}", nil // noting in it as is a empty structure +}