From 7e7657b30d2308bd26f1be011bc2d3079989928b Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 16 Jul 2021 17:10:37 +0300 Subject: [PATCH] Updated account update threshold trigger --- engine/account.go | 19 ++++++++++++++++--- engine/action.go | 8 +++++++- engine/balances.go | 4 ++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/engine/account.go b/engine/account.go index 1d5ef2c85..cee45d81f 100644 --- a/engine/account.go +++ b/engine/account.go @@ -376,6 +376,9 @@ func (acc *Account) getAlldBalancesForPrefix(destination, category, func (acc *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun bool, goNegative bool) (cc *CallCost, err error) { usefulUnitBalances := acc.getAlldBalancesForPrefix(cd.Destination, cd.Category, cd.ToR, cd.TimeStart) usefulMoneyBalances := acc.getAlldBalancesForPrefix(cd.Destination, cd.Category, utils.MetaMonetary, cd.TimeStart) + // intiValues map[UUID]float64 and pass them to publish updating initial value + initUnitBal, initMoneyBal := balancesValues(usefulUnitBalances), balancesValues(usefulMoneyBalances) + var leftCC *CallCost cc = cd.CreateCallCost() var hadBalanceSubj bool @@ -578,8 +581,8 @@ func (acc *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun bo COMMIT: if !dryRun { // save darty shared balances - usefulMoneyBalances.SaveDirtyBalances(acc) - usefulUnitBalances.SaveDirtyBalances(acc) + usefulMoneyBalances.SaveDirtyBalances(acc, initMoneyBal) + usefulUnitBalances.SaveDirtyBalances(acc, initUnitBal) } //log.Printf("Final CC: %+v", cc) return @@ -1091,8 +1094,11 @@ func (acc *Account) AsAccountSummary() *AccountSummary { } // Publish sends the account to stats and threshold -func (acc *Account) Publish() { +func (acc *Account) Publish(initBal map[string]float64) { acntSummary := acc.AsAccountSummary() + for _, currentBal := range acntSummary.BalanceSummaries { + currentBal.Initial = initBal[currentBal.UUID] + } cgrEv := &utils.CGREvent{ Tenant: acntSummary.Tenant, ID: utils.GenUUID(), @@ -1120,7 +1126,14 @@ func (acc *Account) Publish() { fmt.Sprintf(" error: %s processing account event %+v with StatS.", err.Error(), cgrEv)) } } +} +func balancesValues(bals Balances) (init map[string]float64) { + init = make(map[string]float64) + for _, bal := range bals { + init[bal.Uuid] = bal.Value + } + return } // NewAccountSummaryFromJSON creates a new AcccountSummary from a json string diff --git a/engine/action.go b/engine/action.go index d0fc6a6d5..7c45424f1 100644 --- a/engine/action.go +++ b/engine/action.go @@ -754,7 +754,13 @@ func publishAccount(ub *Account, a *Action, acs Actions, extraData interface{}) if ub == nil { return errors.New("nil account") } - ub.Publish() + initBal := make(map[string]float64) + for _, bals := range ub.BalanceMap { + for _, bal := range bals { + initBal[bal.Uuid] = bal.Value + } + } + ub.Publish(initBal) return nil } diff --git a/engine/balances.go b/engine/balances.go index 6bb55009f..1033ba97f 100644 --- a/engine/balances.go +++ b/engine/balances.go @@ -757,7 +757,7 @@ func (bc Balances) HasBalance(balance *Balance) bool { return false } -func (bc Balances) SaveDirtyBalances(acc *Account) { +func (bc Balances) SaveDirtyBalances(acc *Account, initBal map[string]float64) { savedAccounts := utils.StringSet{} for _, b := range bc { if b.account == nil || !b.dirty || savedAccounts.Has(b.account.ID) { @@ -767,7 +767,7 @@ func (bc Balances) SaveDirtyBalances(acc *Account) { if b.account != acc { dm.SetAccount(b.account) } - b.account.Publish() + b.account.Publish(initBal) } }