diff --git a/engine/cdr.go b/engine/cdr.go index 09717bc72..f269db541 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -305,21 +305,25 @@ func (cdr *CDR) String() string { // combimedCdrFieldVal groups together CDRs with same CGRID and combines their values matching filter field ID func (cdr *CDR) combimedCdrFieldVal(cfgCdrFld *config.FCTemplate, groupCDRs []*CDR, filterS *FilterS) (string, error) { var combimedVal string // Will result as combination of the field values, filters must match + var hasVal bool fltrMp := cdr.AsMapStorage() for _, grpCDR := range groupCDRs { if cdr.CGRID != grpCDR.CGRID { continue // We only care about cdrs with same primary cdr behind } - fmt.Printf("### grpCDR: %+v\n", utils.ToIJSON(grpCDR)) fltrMp[utils.MetaCmedReq] = grpCDR.AsMapStorage()[utils.MetaReq] // so we can relate in filters if pass, err := filterS.Pass(grpCDR.Tenant, cfgCdrFld.Filters, fltrMp); err != nil { return utils.EmptyString, err } else if !pass { continue } + if !hasVal { + hasVal = true + } combimedVal += grpCDR.FieldsAsString(cfgCdrFld.Value) - fmt.Printf("### Adding to combimedVal: <%s>, field: %+v\n", combimedVal, cfgCdrFld) - + } + if !hasVal { + return utils.EmptyString, utils.ErrCombimedNotFound } return combimedVal, nil } @@ -446,6 +450,9 @@ func (cdr *CDR) AsExportRecord(exportFields []*config.FCTemplate, } fmtOut, err := cdr.formatField(cfgFld, httpSkipTLSCheck, groupedCDRs, filterS) if err != nil { + if err == utils.ErrCombimedNotFound { + continue + } utils.Logger.Warning(fmt.Sprintf(" error: %s exporting field: %s, CDR: %s\n", err.Error(), utils.ToJSON(cfgFld), utils.ToJSON(cdr))) return nil, err diff --git a/engine/cdr_test.go b/engine/cdr_test.go index 453244814..d014f489b 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -1479,10 +1479,8 @@ func TestCDRcombimedCdrFieldVal(t *testing.T) { t.Errorf("Error: %+v", err) } - if out, err := cdr.combimedCdrFieldVal(tpFld, groupCDRs, &FilterS{cfg: cfg}); err != nil { - t.Error(err) - } else if out != utils.EmptyString { - t.Errorf("Expected : %+v, received: %+v", utils.EmptyString, out) + if out, err := cdr.combimedCdrFieldVal(tpFld, groupCDRs, &FilterS{cfg: cfg}); err == nil { + t.Errorf("Expected error %v, received: %+v", utils.ErrCombimedNotFound, out) } } diff --git a/utils/errors.go b/utils/errors.go index e3e210d49..d93cbb86a 100644 --- a/utils/errors.go +++ b/utils/errors.go @@ -71,6 +71,7 @@ var ( ErrIndexOutOfBounds = errors.New("INDEX_OUT_OF_BOUNDS") ErrWrongPath = errors.New("WRONG_PATH") ErrServiceAlreadyRunning = fmt.Errorf("service already running") + ErrCombimedNotFound = errors.New("COMBIMED_NOT_FOUND") ErrMap = map[string]error{ ErrNoMoreData.Error(): ErrNoMoreData,