mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-16 13:49:53 +05:00
Merge branch 'master' of https://github.com/cgrates/cgrates
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,6 +21,7 @@ package engine
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/rpc"
|
||||
"reflect"
|
||||
"runtime"
|
||||
@@ -401,6 +402,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 +420,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)}
|
||||
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{
|
||||
@@ -428,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)) {
|
||||
@@ -469,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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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("<SMGeneric> 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("<SMGeneric> Ending session: %s, runId: %s", sessionId, s.runId))
|
||||
if idx == 0 && s.stopDebit != nil {
|
||||
close(s.stopDebit) // Stop automatic debits
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user