diff --git a/apier/v1/accounts_it_test.go b/apier/v1/accounts_it_test.go index fe710a732..9d1fb5a69 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": "~ActionValue", + "ActionVal": "~*req.ActionValue", } var reply string attrs := &utils.AttrSetBalance{ diff --git a/engine/action.go b/engine/action.go index 4e3698390..3b600ae93 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+"BalanceType", utils.INFIELD_SEP), + utils.ToR: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+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.Tenant, utils.INFIELD_SEP), - utils.Account: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Account, utils.INFIELD_SEP), - utils.Subject: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Account, utils.INFIELD_SEP), - utils.COST: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"ActionValue", 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), } template := make(map[string]string) // overwrite default template @@ -841,54 +841,53 @@ func (cdrP *cdrLogProvider) String() string { // FieldAsInterface is part of utils.DataProvider interface func (cdrP *cdrLogProvider) FieldAsInterface(fldPath []string) (data interface{}, err error) { - if len(fldPath) != 1 { - return nil, utils.ErrNotFound - } if data, err = cdrP.cache.FieldAsInterface(fldPath); err == nil || err != utils.ErrNotFound { // item found in cache return } err = nil // cancel previous err - 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[0] { - case "AccountID": - data = cdrP.acnt.ID - case utils.Tenant: - data = dta.Tenant - case utils.Account: - data = dta.Account - case "ActionID": - data = cdrP.action.Id - case "ActionType": - data = cdrP.action.ActionType - case "ActionValue": - data = strconv.FormatFloat(b.GetValue(), 'f', -1, 64) - case "BalanceType": - data = cdrP.action.Balance.GetType() - case "BalanceUUID": - data = b.Uuid - case "BalanceID": - data = b.ID - case "BalanceValue": - data = strconv.FormatFloat(cdrP.action.balanceValue, 'f', -1, 64) - case "DestinationIDs": - data = b.DestinationIDs.String() - case "ExtraParameters": - data = cdrP.action.ExtraParameters - case "RatingSubject": - data = b.RatingSubject - case utils.Category: - data = cdrP.action.Balance.Categories.String() - case "SharedGroups": - data = cdrP.action.Balance.SharedGroups.String() - default: + 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() + } + } else { data = fldPath[0] } cdrP.cache.Set(fldPath, data) diff --git a/packages/debian/changelog b/packages/debian/changelog index 1bf7f18b9..21b41119b 100644 --- a/packages/debian/changelog +++ b/packages/debian/changelog @@ -107,7 +107,8 @@ cgrates (0.11.0~dev) UNRELEASED; urgency=medium * [AttributeS] Add support for adding fields from other places that event (e.g. Resource.TotalUsage, Stat.MetricName, Account.Balance) * [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 dataconverter: *unixtime + * [Templates] Added new data converter: *unixtime + * [ActionsS] Add prefix *req to cdrLog action to uniformize -- DanB Wed, 19 Feb 2020 13:25:52 +0200 diff --git a/utils/consts.go b/utils/consts.go index 7763314bf..7ccce05e6 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -991,6 +991,11 @@ const ( MetaRemoveExpired = "*remove_expired" MetaPostEvent = "*post_event" MetaCDRAccount = "*reset_account_cdr" + ActionID = "ActionID" + ActionType = "ActionType" + ActionValue = "ActionValue" + BalanceValue = "BalanceValue" + ExtraParameters = "ExtraParameters" ) // Migrator Metas