mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
@@ -158,35 +158,35 @@ func parseTemplateValue(rsrFlds utils.RSRFields, acnt *Account, action *Action)
|
||||
var parsedValue string // Template values
|
||||
for _, rsrFld := range rsrFlds {
|
||||
switch rsrFld.Id {
|
||||
case "account_id":
|
||||
case "AccountID":
|
||||
parsedValue += rsrFld.ParseValue(acnt.Id)
|
||||
case "direction":
|
||||
case "Directions":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.Directions.String())
|
||||
case "tenant":
|
||||
case utils.TENANT:
|
||||
parsedValue += rsrFld.ParseValue(dta.Tenant)
|
||||
case "account":
|
||||
case utils.ACCOUNT:
|
||||
parsedValue += rsrFld.ParseValue(dta.Account)
|
||||
case "action_id":
|
||||
case "ActionID":
|
||||
parsedValue += rsrFld.ParseValue(action.Id)
|
||||
case "action_type":
|
||||
case "ActionType":
|
||||
parsedValue += rsrFld.ParseValue(action.ActionType)
|
||||
case "balance_type":
|
||||
case "BalanceType":
|
||||
parsedValue += rsrFld.ParseValue(action.BalanceType)
|
||||
case "balance_uuid":
|
||||
case "BalanceUUID":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.Uuid)
|
||||
case "balance_id":
|
||||
case "BalanceID":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.Id)
|
||||
case "balance_value":
|
||||
case "BalanceValue":
|
||||
parsedValue += rsrFld.ParseValue(strconv.FormatFloat(action.Balance.GetValue(), 'f', -1, 64))
|
||||
case "destination_id":
|
||||
case "DestinationIDs":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.DestinationIds.String())
|
||||
case "extra_params":
|
||||
case "ExtraParameters":
|
||||
parsedValue += rsrFld.ParseValue(action.ExtraParameters)
|
||||
case "rating_subject":
|
||||
case "RatingSubject":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.RatingSubject)
|
||||
case "category":
|
||||
case utils.CATEGORY:
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.Categories.String())
|
||||
case "shared_group":
|
||||
case "SharedGroups":
|
||||
parsedValue += rsrFld.ParseValue(action.Balance.SharedGroups.String())
|
||||
default:
|
||||
parsedValue += rsrFld.ParseValue("") // Mostly for static values
|
||||
@@ -197,15 +197,14 @@ func parseTemplateValue(rsrFlds utils.RSRFields, acnt *Account, action *Action)
|
||||
|
||||
func cdrLogAction(acc *Account, sq *StatsQueueTriggered, a *Action, acs Actions) (err error) {
|
||||
defaultTemplate := map[string]utils.RSRFields{
|
||||
utils.TOR: utils.ParseRSRFieldsMustCompile("balance_type", utils.INFIELD_SEP),
|
||||
utils.CDRHOST: utils.ParseRSRFieldsMustCompile("^127.0.0.1", utils.INFIELD_SEP),
|
||||
utils.DIRECTION: utils.ParseRSRFieldsMustCompile("direction", utils.INFIELD_SEP),
|
||||
utils.REQTYPE: utils.ParseRSRFieldsMustCompile("^"+utils.META_PREPAID, utils.INFIELD_SEP),
|
||||
utils.TENANT: utils.ParseRSRFieldsMustCompile("tenant", utils.INFIELD_SEP),
|
||||
utils.ACCOUNT: utils.ParseRSRFieldsMustCompile("account", utils.INFIELD_SEP),
|
||||
utils.SUBJECT: utils.ParseRSRFieldsMustCompile("account", utils.INFIELD_SEP),
|
||||
utils.COST: utils.ParseRSRFieldsMustCompile("balance_value", utils.INFIELD_SEP),
|
||||
utils.MEDI_RUNID: utils.ParseRSRFieldsMustCompile("^"+utils.META_DEFAULT, utils.INFIELD_SEP),
|
||||
utils.TOR: utils.ParseRSRFieldsMustCompile("BalanceType", utils.INFIELD_SEP),
|
||||
utils.CDRHOST: utils.ParseRSRFieldsMustCompile("^127.0.0.1", utils.INFIELD_SEP),
|
||||
utils.DIRECTION: utils.ParseRSRFieldsMustCompile("Directions", utils.INFIELD_SEP),
|
||||
utils.REQTYPE: utils.ParseRSRFieldsMustCompile("^"+utils.META_PREPAID, utils.INFIELD_SEP),
|
||||
utils.TENANT: utils.ParseRSRFieldsMustCompile(utils.TENANT, utils.INFIELD_SEP),
|
||||
utils.ACCOUNT: utils.ParseRSRFieldsMustCompile(utils.ACCOUNT, utils.INFIELD_SEP),
|
||||
utils.SUBJECT: utils.ParseRSRFieldsMustCompile(utils.ACCOUNT, utils.INFIELD_SEP),
|
||||
utils.COST: utils.ParseRSRFieldsMustCompile("BalanceValue", utils.INFIELD_SEP),
|
||||
}
|
||||
template := make(map[string]string)
|
||||
|
||||
@@ -225,10 +224,10 @@ func cdrLogAction(acc *Account, sq *StatsQueueTriggered, a *Action, acs Actions)
|
||||
// set stored cdr values
|
||||
var cdrs []*CDR
|
||||
for _, action := range acs {
|
||||
if !utils.IsSliceMember([]string{DEBIT, DEBIT_RESET}, action.ActionType) || action.Balance == nil {
|
||||
if !utils.IsSliceMember([]string{DEBIT, DEBIT_RESET, TOPUP, TOPUP_RESET}, action.ActionType) || action.Balance == nil {
|
||||
continue // Only log specific actions
|
||||
}
|
||||
cdr := &CDR{Source: CDRLOG, SetupTime: time.Now(), AnswerTime: time.Now(), OriginID: utils.GenUUID(), ExtraFields: make(map[string]string)}
|
||||
cdr := &CDR{RunID: action.ActionType, Source: CDRLOG, SetupTime: time.Now(), AnswerTime: time.Now(), OriginID: utils.GenUUID(), ExtraFields: make(map[string]string)}
|
||||
cdr.CGRID = utils.Sha1(cdr.OriginID, cdr.SetupTime.String())
|
||||
cdr.Usage = time.Duration(1) * time.Second
|
||||
elem := reflect.ValueOf(cdr).Elem()
|
||||
@@ -250,7 +249,6 @@ func cdrLogAction(acc *Account, sq *StatsQueueTriggered, a *Action, acs Actions)
|
||||
cdr.ExtraFields[key] = parsedValue
|
||||
}
|
||||
}
|
||||
//utils.Logger.Debug(fmt.Sprintf("account: %+v, action: %+v, balance: %+v", acc, action, action.Balance))
|
||||
cdrs = append(cdrs, cdr)
|
||||
if cdrStorage == nil { // Only save if the cdrStorage is defined
|
||||
continue
|
||||
@@ -258,11 +256,6 @@ func cdrLogAction(acc *Account, sq *StatsQueueTriggered, a *Action, acs Actions)
|
||||
if err := cdrStorage.SetCDR(cdr, true); err != nil {
|
||||
return err
|
||||
}
|
||||
// FixMe
|
||||
//if err := cdrStorage.LogCallCost(); err != nil {
|
||||
// return err
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
b, _ := json.Marshal(cdrs)
|
||||
|
||||
@@ -82,7 +82,7 @@ func TestActionsLocalRpcConn(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionsLocalSetCdrlogActions(t *testing.T) {
|
||||
func TestActionsLocalSetCdrlogDebit(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
@@ -109,7 +109,7 @@ func TestActionsLocalSetCdrlogActions(t *testing.T) {
|
||||
t.Errorf("Calling ApierV1.ExecuteAction received: %s", reply)
|
||||
}
|
||||
var rcvedCdrs []*ExternalCDR
|
||||
if err := actsLclRpc.Call("ApierV2.GetCdrs", utils.RPCCDRsFilter{Sources: []string{CDRLOG}}, &rcvedCdrs); err != nil {
|
||||
if err := actsLclRpc.Call("ApierV2.GetCdrs", utils.RPCCDRsFilter{Sources: []string{CDRLOG}, Accounts: []string{attrsSetAccount.Account}}, &rcvedCdrs); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
} else if len(rcvedCdrs) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(rcvedCdrs))
|
||||
@@ -121,11 +121,55 @@ func TestActionsLocalSetCdrlogActions(t *testing.T) {
|
||||
rcvedCdrs[0].Account != "dan2904" ||
|
||||
rcvedCdrs[0].Subject != "dan2904" ||
|
||||
rcvedCdrs[0].Usage != "1" ||
|
||||
rcvedCdrs[0].RunID != utils.META_DEFAULT ||
|
||||
rcvedCdrs[0].RunID != DEBIT ||
|
||||
rcvedCdrs[0].Cost != attrsAA.Actions[0].Units {
|
||||
t.Errorf("Received: %+v", rcvedCdrs[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionsLocalSetCdrlogTopup(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
var reply string
|
||||
attrsSetAccount := &utils.AttrSetAccount{Tenant: "cgrates.org", Account: "dan2905"}
|
||||
if err := actsLclRpc.Call("ApierV1.SetAccount", attrsSetAccount, &reply); err != nil {
|
||||
t.Error("Got error on ApierV1.SetAccount: ", err.Error())
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Calling ApierV1.SetAccount received: %s", reply)
|
||||
}
|
||||
attrsAA := &utils.AttrSetActions{ActionsId: "ACTS_2", Actions: []*utils.TPAction{
|
||||
&utils.TPAction{Identifier: TOPUP, BalanceType: utils.MONETARY, Units: 5.0, ExpiryTime: UNLIMITED, Weight: 20.0},
|
||||
&utils.TPAction{Identifier: CDRLOG},
|
||||
}}
|
||||
if err := actsLclRpc.Call("ApierV1.SetActions", attrsAA, &reply); err != nil && err.Error() != utils.ErrExists.Error() {
|
||||
t.Error("Got error on ApierV1.SetActions: ", err.Error())
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Calling ApierV1.SetActions received: %s", reply)
|
||||
}
|
||||
attrsEA := &utils.AttrExecuteAction{Tenant: attrsSetAccount.Tenant, Account: attrsSetAccount.Account, ActionsId: attrsAA.ActionsId}
|
||||
if err := actsLclRpc.Call("ApierV1.ExecuteAction", attrsEA, &reply); err != nil {
|
||||
t.Error("Got error on ApierV1.ExecuteAction: ", err.Error())
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Calling ApierV1.ExecuteAction received: %s", reply)
|
||||
}
|
||||
var rcvedCdrs []*ExternalCDR
|
||||
if err := actsLclRpc.Call("ApierV2.GetCdrs", utils.RPCCDRsFilter{Sources: []string{CDRLOG}, Accounts: []string{attrsSetAccount.Account}}, &rcvedCdrs); err != nil {
|
||||
t.Error("Unexpected error: ", err.Error())
|
||||
} else if len(rcvedCdrs) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(rcvedCdrs))
|
||||
} else if rcvedCdrs[0].ToR != utils.MONETARY ||
|
||||
rcvedCdrs[0].OriginHost != "127.0.0.1" ||
|
||||
rcvedCdrs[0].Source != CDRLOG ||
|
||||
rcvedCdrs[0].RequestType != utils.META_PREPAID ||
|
||||
rcvedCdrs[0].Tenant != "cgrates.org" ||
|
||||
rcvedCdrs[0].Account != "dan2905" ||
|
||||
rcvedCdrs[0].Subject != "dan2905" ||
|
||||
rcvedCdrs[0].Usage != "1" ||
|
||||
rcvedCdrs[0].RunID != TOPUP ||
|
||||
rcvedCdrs[0].Cost != attrsAA.Actions[0].Units {
|
||||
t.Errorf("Received: %+v", rcvedCdrs[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionsLocalStopCgrEngine(t *testing.T) {
|
||||
|
||||
@@ -1212,7 +1212,7 @@ func TestActionCdrLogParamsWithOverload(t *testing.T) {
|
||||
acnt := &Account{Id: "cgrates.org:dan2904"}
|
||||
cdrlog := &Action{
|
||||
ActionType: CDRLOG,
|
||||
ExtraParameters: `{"Subject":"^rif","Destination":"^1234","ToR":"~action_tag:s/^at(.)$/0$1/","AccountId":"~account_id:s/^\\*(.*)$/$1/"}`,
|
||||
ExtraParameters: `{"Subject":"^rif","Destination":"^1234","ToR":"~ActionTag:s/^at(.)$/0$1/","AccountID":"~AccountID:s/^\\*(.*)$/$1/"}`,
|
||||
}
|
||||
err := cdrLogAction(acnt, nil, cdrlog, Actions{
|
||||
&Action{
|
||||
@@ -1230,14 +1230,14 @@ func TestActionCdrLogParamsWithOverload(t *testing.T) {
|
||||
cdrs := make([]*CDR, 0)
|
||||
json.Unmarshal([]byte(cdrlog.ExpirationString), &cdrs)
|
||||
expectedExtraFields := map[string]string{
|
||||
"AccountId": "cgrates.org:dan2904",
|
||||
"AccountID": "cgrates.org:dan2904",
|
||||
}
|
||||
if len(cdrs) != 2 ||
|
||||
cdrs[0].Subject != "rif" {
|
||||
t.Errorf("Wrong cdrlogs: %+v", cdrs[0])
|
||||
}
|
||||
if !reflect.DeepEqual(cdrs[0].ExtraFields, expectedExtraFields) {
|
||||
t.Errorf("Received extra_fields: %+v %+v", cdrs[0].ExtraFields, expectedExtraFields)
|
||||
t.Errorf("Expecting extra fields: %+v, received: %+v", expectedExtraFields, cdrs[0].ExtraFields)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user