diff --git a/cmd/cgr-balancer/cgr-balanncer.go b/cmd/cgr-balancer/cgr-balanncer.go index 7238b18bb..9991f9243 100644 --- a/cmd/cgr-balancer/cgr-balanncer.go +++ b/cmd/cgr-balancer/cgr-balanncer.go @@ -53,7 +53,7 @@ func GetCallCost(key *timespans.CallDescriptor, method string) (reply *timespans time.Sleep(1 * time.Second) // wait one second and retry } else { reply = ×pans.CallCost{} - reply, err = timespans.AccLock.GuardGetCost(key.GetKey(), func() (*timespans.CallCost, error) { + reply, err = accLock.GuardGetCost(key.GetKey(), func() (*timespans.CallCost, error) { err = client.Call(method, *key, reply) return reply, err }) @@ -76,7 +76,7 @@ func CallMethod(key *timespans.CallDescriptor, method string) (reply float64, er log.Print("Waiting for raters to register...") time.Sleep(1 * time.Second) // wait one second and retry } else { - reply, err = timespans.AccLock.Guard(key.GetKey(), func() (float64, error) { + reply, err = accLock.Guard(key.GetKey(), func() (float64, error) { err = client.Call(method, *key, &reply) return reply, err }) diff --git a/cmd/cgr-rater/cgr-rater.go b/cmd/cgr-rater/cgr-rater.go index 5f7cd4bc8..7a06ccdae 100644 --- a/cmd/cgr-rater/cgr-rater.go +++ b/cmd/cgr-rater/cgr-rater.go @@ -56,7 +56,7 @@ func NewStorage(nsg timespans.StorageGetter) *Responder { RPC method providing the rating information from the storage. */ func (s *Responder) GetCost(cd timespans.CallDescriptor, reply *timespans.CallCost) (err error) { - r, e := timespans.AccLock.GuardGetCost(cd.GetKey(), func() (*timespans.CallCost, error) { + r, e := timespans.AccLock.GuardGetCost(cd.GetUserBalanceKey(), func() (*timespans.CallCost, error) { return (&cd).GetCost() }) *reply, err = *r, e @@ -64,7 +64,7 @@ func (s *Responder) GetCost(cd timespans.CallDescriptor, reply *timespans.CallCo } func (s *Responder) DebitCents(cd timespans.CallDescriptor, reply *float64) (err error) { - r, e := timespans.AccLock.Guard(cd.GetKey(), func() (float64, error) { + r, e := timespans.AccLock.Guard(cd.GetUserBalanceKey(), func() (float64, error) { return (&cd).DebitCents() }) *reply, err = r, e @@ -72,7 +72,7 @@ func (s *Responder) DebitCents(cd timespans.CallDescriptor, reply *float64) (err } func (s *Responder) DebitSMS(cd timespans.CallDescriptor, reply *float64) (err error) { - r, e := timespans.AccLock.Guard(cd.GetKey(), func() (float64, error) { + r, e := timespans.AccLock.Guard(cd.GetUserBalanceKey(), func() (float64, error) { return (&cd).DebitSMS() }) *reply, err = r, e @@ -80,7 +80,7 @@ func (s *Responder) DebitSMS(cd timespans.CallDescriptor, reply *float64) (err e } func (s *Responder) DebitSeconds(cd timespans.CallDescriptor, reply *float64) (err error) { - r, e := timespans.AccLock.Guard(cd.GetKey(), func() (float64, error) { + r, e := timespans.AccLock.Guard(cd.GetUserBalanceKey(), func() (float64, error) { return 0, (&cd).DebitSeconds() }) *reply, err = r, e @@ -88,7 +88,7 @@ func (s *Responder) DebitSeconds(cd timespans.CallDescriptor, reply *float64) (e } func (s *Responder) GetMaxSessionTime(cd timespans.CallDescriptor, reply *float64) (err error) { - r, e := timespans.AccLock.Guard(cd.GetKey(), func() (float64, error) { + r, e := timespans.AccLock.Guard(cd.GetUserBalanceKey(), func() (float64, error) { return (&cd).GetMaxSessionTime() }) *reply, err = r, e @@ -96,7 +96,7 @@ func (s *Responder) GetMaxSessionTime(cd timespans.CallDescriptor, reply *float6 } func (s *Responder) AddRecievedCallSeconds(cd timespans.CallDescriptor, reply *float64) (err error) { - r, e := timespans.AccLock.Guard(cd.GetKey(), func() (float64, error) { + r, e := timespans.AccLock.Guard(cd.GetUserBalanceKey(), func() (float64, error) { return 0, (&cd).AddRecievedCallSeconds() }) *reply, err = r, e diff --git a/timespans/action_timing.go b/timespans/action_timing.go index 14c15caf1..7023f4644 100644 --- a/timespans/action_timing.go +++ b/timespans/action_timing.go @@ -150,7 +150,6 @@ func (at *ActionTiming) getUserBalances() (ubs []*UserBalance) { } func (at *ActionTiming) Execute() (err error) { - aac, err := at.getActions() if err != nil { log.Print("Failed to get actions: ", err) diff --git a/timespans/calldesc.go b/timespans/calldesc.go index 0e4ac6483..04dfff45d 100644 --- a/timespans/calldesc.go +++ b/timespans/calldesc.go @@ -86,17 +86,21 @@ func (cd *CallDescriptor) AddActivationPeriodIfNotPresent(aps ...*ActivationPeri } } +// Returns the key used to retrive the user balance involved in this call +func (cd *CallDescriptor) GetUserBalanceKey() string { + subj := cd.Subject + if cd.Account != "" { + subj = cd.Account + } + return fmt.Sprintf("%s:%s:%s", cd.Direction, cd.Tenant, subj) +} + /* Gets and caches the user balance information. */ func (cd *CallDescriptor) getUserBalance() (ub *UserBalance, err error) { if cd.userBalance == nil { - subj := cd.Subject - if cd.Account != "" { - subj = cd.Account - } - key := fmt.Sprintf("%s:%s:%s", cd.Direction, cd.Tenant, subj) - cd.userBalance, err = storageGetter.GetUserBalance(key) + cd.userBalance, err = storageGetter.GetUserBalance(cd.GetUserBalanceKey()) } return cd.userBalance, err } diff --git a/timespans/userbalance.go b/timespans/userbalance.go index a957d4442..5e2acd6ed 100644 --- a/timespans/userbalance.go +++ b/timespans/userbalance.go @@ -251,6 +251,7 @@ func (ub *UserBalance) countUnits(a *Action) { ub.executeActionTriggers() } +// Create minute counters for all triggered actions that have actions operating on minute buckets func (ub *UserBalance) initMinuteCounters() { ucTempMap := make(map[string]*UnitsCounter, 2) for _, at := range ub.ActionTriggers {