From bdabfd8633c590feda5a22bcebfa3e637b870e81 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Tue, 15 Mar 2016 17:03:33 +0200 Subject: [PATCH 1/5] Add error cecking in set account v2 too --- apier/v2/accounts.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apier/v2/accounts.go b/apier/v2/accounts.go index 5da921b9f..c3c495edd 100644 --- a/apier/v2/accounts.go +++ b/apier/v2/accounts.go @@ -115,6 +115,9 @@ func (self *ApierV2) SetAccount(attr AttrSetAccount, reply *string) error { _, err := engine.Guardian.Guard(func() (interface{}, error) { actionPlansMap, err := self.RatingDb.GetAllActionPlans() if err != nil { + if err == utils.ErrNotFound { // if no action plans just continue + return 0, nil + } return 0, err } if attr.ActionPlansOverwrite { From 760f674132df3664b11f68688b8d729e4dd86310 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Tue, 15 Mar 2016 17:04:19 +0200 Subject: [PATCH 2/5] Add ID to increment balance information --- engine/account.go | 1 + engine/balances.go | 6 ++++++ engine/timespans.go | 2 ++ 3 files changed, 9 insertions(+) diff --git a/engine/account.go b/engine/account.go index 136ffd296..e231875a2 100644 --- a/engine/account.go +++ b/engine/account.go @@ -488,6 +488,7 @@ func (ub *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun boo defaultBalance.SubstractValue(cost) increment.BalanceInfo.Monetary = &MonetaryInfo{ UUID: defaultBalance.Uuid, + ID: defaultBalance.ID, Value: defaultBalance.Value, } increment.BalanceInfo.AccountID = ub.ID diff --git a/engine/balances.go b/engine/balances.go index e51b7794f..e44fa6033 100644 --- a/engine/balances.go +++ b/engine/balances.go @@ -357,6 +357,7 @@ func (b *Balance) debitUnits(cd *CallDescriptor, ub *Account, moneyBalances Bala b.SubstractValue(amount) inc.BalanceInfo.Unit = &UnitInfo{ UUID: b.Uuid, + ID: b.ID, Value: b.Value, DestinationID: cc.Destination, Consumed: amount, @@ -434,6 +435,7 @@ func (b *Balance) debitUnits(cd *CallDescriptor, ub *Account, moneyBalances Bala cost, inc.Cost = 0.0, 0.0 inc.BalanceInfo.Monetary = &MonetaryInfo{ UUID: b.Uuid, + ID: b.ID, Value: b.Value, RateInterval: ts.RateInterval, } @@ -456,6 +458,7 @@ func (b *Balance) debitUnits(cd *CallDescriptor, ub *Account, moneyBalances Bala b.SubstractValue(amount) inc.BalanceInfo.Unit = &UnitInfo{ UUID: b.Uuid, + ID: b.ID, Value: b.Value, DestinationID: cc.Destination, Consumed: amount, @@ -466,6 +469,7 @@ func (b *Balance) debitUnits(cd *CallDescriptor, ub *Account, moneyBalances Bala if cost != 0 { inc.BalanceInfo.Monetary = &MonetaryInfo{ UUID: moneyBal.Uuid, + ID: moneyBal.ID, Value: moneyBal.Value, } moneyBal.SubstractValue(cost) @@ -554,6 +558,7 @@ func (b *Balance) debitMoney(cd *CallDescriptor, ub *Account, moneyBalances Bala amount, inc.Cost = 0.0, 0.0 inc.BalanceInfo.Monetary = &MonetaryInfo{ UUID: b.Uuid, + ID: b.ID, Value: b.Value, } inc.BalanceInfo.AccountID = ub.ID @@ -575,6 +580,7 @@ func (b *Balance) debitMoney(cd *CallDescriptor, ub *Account, moneyBalances Bala cd.MaxCostSoFar += amount inc.BalanceInfo.Monetary = &MonetaryInfo{ UUID: b.Uuid, + ID: b.ID, Value: b.Value, } inc.BalanceInfo.AccountID = ub.ID diff --git a/engine/timespans.go b/engine/timespans.go index 57668a636..8a716f307 100644 --- a/engine/timespans.go +++ b/engine/timespans.go @@ -78,6 +78,7 @@ func (di *DebitInfo) Clone() *DebitInfo { type MonetaryInfo struct { UUID string + ID string Value float64 RateInterval *RateInterval } @@ -100,6 +101,7 @@ func (mi *MonetaryInfo) Equal(other *MonetaryInfo) bool { type UnitInfo struct { UUID string + ID string Value float64 DestinationID string Consumed float64 From 758f7b4a4ab7723df3377bcb697b5e756a3fcad5 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 16 Mar 2016 11:42:27 +0100 Subject: [PATCH 3/5] apply aliases/users before derived charging --- engine/cdrs.go | 14 ++++++++++++++ engine/responder.go | 2 +- sessionmanager/smgeneric.go | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/engine/cdrs.go b/engine/cdrs.go index 1911477b6..b28fd9d2c 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -262,6 +262,20 @@ func (self *CdrServer) deriveCdrs(cdr *CDR) ([]*CDR, error) { if cdr.RunID != utils.MetaRaw { // Only derive *raw CDRs return cdrRuns, nil } + if err := LoadAlias(&AttrMatchingAlias{ + Destination: cdr.Destination, + Direction: cdr.Direction, + Tenant: cdr.Tenant, + Category: cdr.Category, + Account: cdr.Account, + Subject: cdr.Subject, + Context: utils.ALIAS_CONTEXT_RATING, + }, cdr, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound { + return nil, err + } + if err := LoadUserProfile(cdr, utils.EXTRA_FIELDS); err != nil { + return nil, err + } attrsDC := &utils.AttrDerivedChargers{Tenant: cdr.Tenant, Category: cdr.Category, Direction: cdr.Direction, Account: cdr.Account, Subject: cdr.Subject, Destination: cdr.Destination} var dcs utils.DerivedChargers diff --git a/engine/responder.go b/engine/responder.go index 48f337ab2..64587311d 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -419,7 +419,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { return err } attrsDC := &utils.AttrDerivedChargers{Tenant: ev.GetTenant(utils.META_DEFAULT), Category: ev.GetCategory(utils.META_DEFAULT), Direction: ev.GetDirection(utils.META_DEFAULT), - Account: ev.GetAccount(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT)} + Account: ev.GetAccount(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT), Destination: ev.GetDestination(utils.META_DEFAULT)} dcs := &utils.DerivedChargers{} if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil { rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{ diff --git a/sessionmanager/smgeneric.go b/sessionmanager/smgeneric.go index 8da95aa45..cf7d2a88e 100644 --- a/sessionmanager/smgeneric.go +++ b/sessionmanager/smgeneric.go @@ -95,6 +95,7 @@ func (self *SMGeneric) sessionStart(evStart SMGenericEvent, connId string) error s := &SMGSession{eventStart: evStart, connId: connId, runId: sessionRun.DerivedCharger.RunID, timezone: self.timezone, rater: self.rater, cdrsrv: self.cdrsrv, cd: sessionRun.CallDescriptor} self.indexSession(sessionId, s) + utils.Logger.Info(fmt.Sprintf(" Starting session: %s, runId: %s", sessionId, s.runId)) if self.cgrCfg.SmGenericConfig.DebitInterval != 0 { s.stopDebit = stopDebitChan go s.debitLoop(self.cgrCfg.SmGenericConfig.DebitInterval) @@ -116,6 +117,7 @@ func (self *SMGeneric) sessionEnd(sessionId string, usage time.Duration) error { return nil, nil // Did not find the session so no need to close it anymore } for idx, s := range ss { + utils.Logger.Info(fmt.Sprintf(" Ending session: %s, runId: %s", sessionId, s.runId)) if idx == 0 && s.stopDebit != nil { close(s.stopDebit) // Stop automatic debits } From 260fde99324a92644c7a76de21872176c7c6089d Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 16 Mar 2016 12:03:37 +0100 Subject: [PATCH 4/5] more logging --- engine/responder.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/responder.go b/engine/responder.go index 64587311d..dccb11cfe 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -401,6 +401,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { if ev.Subject == "" { ev.Subject = ev.Account } + utils.Logger.Info(fmt.Sprintf("DC before: %+v", ev)) // replace aliases if err := LoadAlias( &AttrMatchingAlias{ @@ -418,8 +419,10 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { if err := LoadUserProfile(ev, utils.EXTRA_FIELDS); err != nil { return err } + utils.Logger.Info(fmt.Sprintf("DC after: %+v", ev)) attrsDC := &utils.AttrDerivedChargers{Tenant: ev.GetTenant(utils.META_DEFAULT), Category: ev.GetCategory(utils.META_DEFAULT), Direction: ev.GetDirection(utils.META_DEFAULT), Account: ev.GetAccount(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT), Destination: ev.GetDestination(utils.META_DEFAULT)} + utils.Logger.Info(fmt.Sprintf("Derived chargers for: %+v", attrsDC)) dcs := &utils.DerivedChargers{} if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil { rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{ From 9d3b5cc9a2407791864df7227bf1febf0b64c9d1 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 16 Mar 2016 12:06:47 +0100 Subject: [PATCH 5/5] even more logging --- engine/responder.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/responder.go b/engine/responder.go index dccb11cfe..3a36e6150 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -21,6 +21,7 @@ package engine import ( "errors" "fmt" + "log" "net/rpc" "reflect" "runtime" @@ -431,6 +432,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { return err } dcs, _ = dcs.AppendDefaultRun() + log.Print("DCS: ", len(dcs)) sesRuns := make([]*SessionRun, 0) for _, dc := range dcs.Chargers { if !utils.IsSliceMember([]string{utils.META_PREPAID, utils.PREPAID}, ev.GetReqType(dc.RequestTypeField)) { @@ -472,6 +474,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { } sesRuns = append(sesRuns, &SessionRun{DerivedCharger: dc, CallDescriptor: cd}) } + log.Print("RUNS: ", len(sesRuns)) *sRuns = sesRuns rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{ Value: sRuns,