From 676ad1c10287d56089fa02b96d7bdc71f9f7391e Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 13 Dec 2018 20:54:56 +0300 Subject: [PATCH] AgentRequest selectors returning ErrNotFound in case of not matching --- agents/agentreq.go | 7 +++++++ agents/diamagent.go | 3 ++- agents/libdiam.go | 3 +-- utils/errors.go | 4 ++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/agents/agentreq.go b/agents/agentreq.go index 205cfb978..f339f0a2c 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -127,6 +127,13 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) ( } out, err := ar.ParseField(tplFld) if err != nil { + if err == utils.ErrNotFound { + if !tplFld.Mandatory { + err = nil + continue + } + err = utils.ErrPrefixNotFound(tplFld.Tag) + } return nil, err } var valSet []*config.NMItem diff --git a/agents/diamagent.go b/agents/diamagent.go index b48a52399..e4d75ecc5 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -209,7 +209,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor, utils.MetaDryRun, utils.MetaAuth, utils.MetaInitiate, utils.MetaUpdate, utils.MetaTerminate, utils.MetaEvent, - utils.MetaCDRs} { + utils.MetaCDRs, utils.META_NONE} { if reqProcessor.Flags.HasKey(typ) { // request type is identified through flags reqType = typ break @@ -223,6 +223,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor, switch reqType { default: return false, fmt.Errorf("unknown request type: <%s>", reqType) + case utils.META_NONE: // do nothing on CGRateS side case utils.MetaDryRun: utils.Logger.Info( fmt.Sprintf("<%s> DRY_RUN, processorID: %s, CGREvent: %s", diff --git a/agents/libdiam.go b/agents/libdiam.go index 50aad6e49..0499c2a9f 100644 --- a/agents/libdiam.go +++ b/agents/libdiam.go @@ -358,8 +358,7 @@ func (dP *diameterDP) FieldAsInterface(fldPath []string) (data interface{}, err if err != nil { return nil, err } else if len(fltrAVPs) == 0 || len(fltrAVPs) != len(avps) { - return nil, fmt.Errorf("%s for selector %s", - utils.ErrFilterNotPassingNoCaps.Error(), slctr.AttrName()) + return nil, utils.ErrNotFound } for k, fAVP := range fltrAVPs { if dataAVP, err := diamAVPAsIface(fAVP); err != nil { diff --git a/utils/errors.go b/utils/errors.go index 24a4af829..88d442b02 100644 --- a/utils/errors.go +++ b/utils/errors.go @@ -165,3 +165,7 @@ func ErrHasPrefix(err error, prfx string) (has bool) { func ErrEnvNotFound(key string) error { return errors.New("ENV_VAR_NOT_FOUND:" + key) } + +func ErrPrefixNotFound(reason string) error { + return fmt.Errorf("%s:%s", ErrNotFound.Error(), reason) +}