diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go index 66c208f70..64711f473 100644 --- a/apier/v1/accounts.go +++ b/apier/v1/accounts.go @@ -489,7 +489,10 @@ func (self *ApierV1) modifyBalance(aType string, attr *AttrAddBalance, reply *st if attr.TimingIds != nil { a.Balance.TimingIDs = utils.StringMapPointer(utils.ParseStringMap(*attr.TimingIds)) } - at.SetActions(engine.Actions{a}) + publishAction := &engine.Action{ + ActionType: engine.MetaPublishBalance, + } + at.SetActions(engine.Actions{a, publishAction}) if err := at.Execute(nil, nil); err != nil { return err } @@ -559,7 +562,10 @@ func (self *ApierV1) SetBalance(attr *utils.AttrSetBalance, reply *string) error if attr.TimingIds != nil { a.Balance.TimingIDs = utils.StringMapPointer(utils.ParseStringMap(*attr.TimingIds)) } - at.SetActions(engine.Actions{a}) + publishAction := &engine.Action{ + ActionType: engine.MetaPublishBalance, + } + at.SetActions(engine.Actions{a, publishAction}) if err := at.Execute(nil, nil); err != nil { *reply = err.Error() return err @@ -619,7 +625,10 @@ func (self *ApierV1) RemoveBalances(attr *utils.AttrSetBalance, reply *string) e if attr.TimingIds != nil { a.Balance.TimingIDs = utils.StringMapPointer(utils.ParseStringMap(*attr.TimingIds)) } - at.SetActions(engine.Actions{a}) + publishAction := &engine.Action{ + ActionType: engine.MetaPublishAccount, // here we add *publish_account because balance was deleted + } + at.SetActions(engine.Actions{a, publishAction}) if err := at.Execute(nil, nil); err != nil { *reply = err.Error() return err diff --git a/engine/action.go b/engine/action.go index 5152bdcf2..25757a9cc 100644 --- a/engine/action.go +++ b/engine/action.go @@ -82,6 +82,7 @@ const ( TopUpZeroNegative = "*topup_zero_negative" SetExpiry = "*set_expiry" MetaPublishAccount = "*publish_account" + MetaPublishBalance = "*publish_balance" ) func (a *Action) Clone() *Action { @@ -121,6 +122,7 @@ func getActionFunc(typ string) (actionTypeFunc, bool) { TopUpZeroNegative: topupZeroNegativeAction, SetExpiry: setExpiryAction, MetaPublishAccount: publishAccount, + MetaPublishBalance: publishBalance, } f, exists := actionFuncMap[typ] return f, exists @@ -878,6 +880,23 @@ func publishAccount(acnt *Account, sq *CDRStatsQueueTriggered, return nil } +// publishAccount will publish the account as well as each balance received to ThresholdS +func publishBalance(acnt *Account, sq *CDRStatsQueueTriggered, + a *Action, acs Actions) error { + if acnt == nil { + return errors.New("nil account") + } + for bType := range acnt.BalanceMap { + for _, b := range acnt.BalanceMap[bType] { + if b.account == nil { + b.account = acnt + } + b.Publish() + } + } + return nil +} + // Structure to store actions according to weight type Actions []*Action