mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-21 23:28:44 +05:00
Updating CDR *combimed export to support filtering based on originally exported CDR
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -560,6 +560,7 @@ const (
|
||||
MetaHdr = "*hdr"
|
||||
MetaTrl = "*trl"
|
||||
MetaTmp = "*tmp"
|
||||
MetaCmedReq = "*cmedreq" // used with combinedMediation
|
||||
CGROriginHost = "cgr_originhost"
|
||||
MetaInitiate = "*initiate"
|
||||
MetaFD = "*fd"
|
||||
|
||||
Reference in New Issue
Block a user