Updating CDR *combimed export to support filtering based on originally exported CDR

This commit is contained in:
DanB
2023-06-28 12:47:10 +02:00
parent 7042048771
commit 3c9f57ce7d
4 changed files with 25 additions and 4 deletions

View File

@@ -305,12 +305,14 @@ 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
cmbReqMp := cdr.AsMapStorage()[utils.MetaReq]
for _, grpCDR := range groupCDRs {
if cdr.CGRID != grpCDR.CGRID {
continue // We only care about cdrs with same primary cdr behind
}
if pass, err := filterS.Pass(grpCDR.Tenant, cfgCdrFld.Filters, grpCDR.AsMapStorage()); err != nil {
fltrMp := grpCDR.AsMapStorage()
fltrMp[utils.MetaCmedReq] = cmbReqMp // 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

View File

@@ -1454,7 +1454,7 @@ func TestCDRcombimedCdrFieldVal(t *testing.T) {
tpFld := &config.FCTemplate{
Tag: "TestCombiMed",
Type: utils.META_COMBIMED,
Filters: []string{"*string:~*req.RunID:testRun1"},
Filters: []string{"*string:~*cmedreq.RunID:*default", "*string:~*req.RunID:testRun1"},
Value: config.NewRSRParsersMustCompile("~*req.Cost", true, utils.INFIELD_SEP),
}
cfg, err := config.NewDefaultCGRConfig()
@@ -1468,6 +1468,23 @@ func TestCDRcombimedCdrFieldVal(t *testing.T) {
t.Errorf("Expected : %+v, received: %+v", "1.22", out)
}
tpFld = &config.FCTemplate{
Tag: "TestCombiMedFail",
Type: utils.META_COMBIMED,
Filters: []string{"*string:~*cmedreq.RunID:*notdefault", "*string:~*req.RunID:testRun1"},
Value: config.NewRSRParsersMustCompile("~*req.Cost", true, utils.INFIELD_SEP),
}
cfg, err = config.NewDefaultCGRConfig()
if err != nil {
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)
}
}
func TestUsageAsCDR(t *testing.T) {

View File

@@ -487,7 +487,8 @@ func (fS *FilterS) getFieldNameDataProvider(initialDP utils.DataProvider,
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaRep),
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaCGRAReq),
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaAct),
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaEC):
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaEC),
strings.HasPrefix(fieldName, utils.DynamicDataPrefix+utils.MetaCmedReq):
dp = initialDP
// don't need to take out the prefix because the navigable map have ~*req prefix
case fieldName == utils.EmptyString:

View File

@@ -560,6 +560,7 @@ const (
MetaHdr = "*hdr"
MetaTrl = "*trl"
MetaTmp = "*tmp"
MetaCmedReq = "*cmedreq" // used with combinedMediation
CGROriginHost = "cgr_originhost"
MetaInitiate = "*initiate"
MetaFD = "*fd"