From a08ce74151b9733fe013d5d54bc83a8db1550d55 Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 14 Oct 2020 10:01:00 +0300 Subject: [PATCH] Add *acnt and *act prefix for cgrlog action --- apier/v1/accounts_it_test.go | 2 +- engine/action.go | 100 +++++++++++++++++++---------------- engine/actions_test.go | 2 +- packages/debian/changelog | 2 +- utils/consts.go | 1 + 5 files changed, 59 insertions(+), 48 deletions(-) diff --git a/apier/v1/accounts_it_test.go b/apier/v1/accounts_it_test.go index 9d1fb5a69..1bd48e1d3 100644 --- a/apier/v1/accounts_it_test.go +++ b/apier/v1/accounts_it_test.go @@ -385,7 +385,7 @@ func testAccITSetBalanceWithExtraData(t *testing.T) { func testAccITSetBalanceWithExtraData2(t *testing.T) { extraDataMap := map[string]interface{}{ "ExtraField": "ExtraValue", - "ActionVal": "~*req.ActionValue", + "ActionVal": "~*act.ActionValue", } var reply string attrs := &utils.AttrSetBalance{ diff --git a/engine/action.go b/engine/action.go index 3b600ae93..be38dea88 100644 --- a/engine/action.go +++ b/engine/action.go @@ -126,13 +126,13 @@ func cdrLogAction(acc *Account, a *Action, acs Actions, extraData interface{}) ( return fmt.Errorf("No connection with CDR Server") } defaultTemplate := map[string]config.RSRParsers{ - utils.ToR: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.BalanceType, utils.INFIELD_SEP), + utils.ToR: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaAcnt+utils.NestingSep+utils.BalanceType, utils.INFIELD_SEP), utils.OriginHost: config.NewRSRParsersMustCompile("127.0.0.1", utils.INFIELD_SEP), utils.RequestType: config.NewRSRParsersMustCompile(utils.META_NONE, utils.INFIELD_SEP), - utils.Tenant: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.Tenant, utils.INFIELD_SEP), - utils.Account: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.Account, utils.INFIELD_SEP), - utils.Subject: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.Account, utils.INFIELD_SEP), - utils.COST: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+"ActionValue", utils.INFIELD_SEP), + utils.Tenant: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaAcnt+utils.NestingSep+utils.Tenant, utils.INFIELD_SEP), + utils.Account: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaAcnt+utils.NestingSep+utils.Account, utils.INFIELD_SEP), + utils.Subject: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaAcnt+utils.NestingSep+utils.Account, utils.INFIELD_SEP), + utils.COST: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaAct+utils.NestingSep+utils.ActionValue, utils.INFIELD_SEP), } template := make(map[string]string) // overwrite default template @@ -846,46 +846,56 @@ func (cdrP *cdrLogProvider) FieldAsInterface(fldPath []string) (data interface{} return } err = nil // cancel previous err - if len(fldPath) == 2 && fldPath[0] == utils.MetaReq { - var dta *utils.TenantAccount - if cdrP.acnt != nil { - dta, err = utils.NewTAFromAccountKey(cdrP.acnt.ID) // Account information should be valid - } - if err != nil || cdrP.acnt == nil { - dta = new(utils.TenantAccount) // Init with empty values - } - b := cdrP.action.Balance.CreateBalance() - switch fldPath[1] { - case utils.AccountID: - data = cdrP.acnt.ID - case utils.Tenant: - data = dta.Tenant - case utils.Account: - data = dta.Account - case utils.ActionID: - data = cdrP.action.Id - case utils.ActionType: - data = cdrP.action.ActionType - case utils.ActionValue: - data = strconv.FormatFloat(b.GetValue(), 'f', -1, 64) - case utils.BalanceType: - data = cdrP.action.Balance.GetType() - case utils.BalanceUUID: - data = b.Uuid - case utils.BalanceID: - data = b.ID - case utils.BalanceValue: - data = strconv.FormatFloat(cdrP.action.balanceValue, 'f', -1, 64) - case utils.DestinationIDs: - data = b.DestinationIDs.String() - case utils.ExtraParameters: - data = cdrP.action.ExtraParameters - case utils.RatingSubject: - data = b.RatingSubject - case utils.Category: - data = cdrP.action.Balance.Categories.String() - case utils.SharedGroups: - data = cdrP.action.Balance.SharedGroups.String() + if len(fldPath) == 2 { + switch fldPath[0] { + case utils.MetaAcnt: + switch fldPath[1] { + case utils.AccountID: + data = cdrP.acnt.ID + case utils.Tenant: + tntAcnt := new(utils.TenantAccount) // Init with empty values + if cdrP.acnt != nil { + if tntAcnt, err = utils.NewTAFromAccountKey(cdrP.acnt.ID); err != nil { + return + } + } + data = tntAcnt.Tenant + case utils.Account: + tntAcnt := new(utils.TenantAccount) // Init with empty values + if cdrP.acnt != nil { + if tntAcnt, err = utils.NewTAFromAccountKey(cdrP.acnt.ID); err != nil { + return + } + } + data = tntAcnt.Account + case utils.BalanceType: + data = cdrP.action.Balance.GetType() + case utils.BalanceUUID: + data = cdrP.action.Balance.CreateBalance().Uuid + case utils.BalanceID: + data = cdrP.action.Balance.CreateBalance().ID + case utils.BalanceValue: + data = strconv.FormatFloat(cdrP.action.balanceValue, 'f', -1, 64) + case utils.DestinationIDs: + data = cdrP.action.Balance.CreateBalance().DestinationIDs.String() + case utils.ExtraParameters: + data = cdrP.action.ExtraParameters + case utils.RatingSubject: + data = cdrP.action.Balance.CreateBalance().RatingSubject + case utils.Category: + data = cdrP.action.Balance.Categories.String() + case utils.SharedGroups: + data = cdrP.action.Balance.SharedGroups.String() + } + case utils.MetaAct: + switch fldPath[1] { + case utils.ActionID: + data = cdrP.action.Id + case utils.ActionType: + data = cdrP.action.ActionType + case utils.ActionValue: + data = strconv.FormatFloat(cdrP.action.Balance.CreateBalance().GetValue(), 'f', -1, 64) + } } } else { data = fldPath[0] diff --git a/engine/actions_test.go b/engine/actions_test.go index 49e247b1d..1e3dc76a9 100644 --- a/engine/actions_test.go +++ b/engine/actions_test.go @@ -2642,7 +2642,7 @@ func TestCdrLogAction(t *testing.T) { a := &Action{ Id: "CDRLog1", ActionType: utils.CDRLOG, - ExtraParameters: "{\"BalanceID\":\"~*req.BalanceID\",\"ActionID\":\"~*req.ActionID\",\"BalanceValue\":\"~*req.BalanceValue\"}", + ExtraParameters: "{\"BalanceID\":\"~*acnt.BalanceID\",\"ActionID\":\"~*act.ActionID\",\"BalanceValue\":\"~*acnt.BalanceValue\"}", Weight: 50, } acs := Actions{ diff --git a/packages/debian/changelog b/packages/debian/changelog index 21b41119b..2506f8053 100644 --- a/packages/debian/changelog +++ b/packages/debian/changelog @@ -108,7 +108,7 @@ cgrates (0.11.0~dev) UNRELEASED; urgency=medium * [EEs] Empty fields in exporter config will export the full event for the exporters that use json format * [DynamicDP] Add support for *libphonenumber prefix * [Templates] Added new data converter: *unixtime - * [ActionsS] Add prefix *req to cdrLog action to uniformize + * [ActionsS] Add prefix *acnt and *act to cdrLog action -- DanB Wed, 19 Feb 2020 13:25:52 +0200 diff --git a/utils/consts.go b/utils/consts.go index 7ccce05e6..3a24290bc 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -807,6 +807,7 @@ const ( UUID = "UUID" ActionsID = "ActionsID" MetaAct = "*act" + MetaAcnt = "*acnt" DestinationPrefix = "DestinationPrefix" DestinationID = "DestinationID" ExportTemplate = "ExportTemplate"