AccountS - initial accountProcessEvent

This commit is contained in:
DanB
2021-02-01 21:06:01 +01:00
parent d8ca23e0c6
commit e78c336e2f
4 changed files with 60 additions and 1 deletions

View File

@@ -20,10 +20,12 @@ package accounts
import (
"fmt"
"time"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
"github.com/ericlagergren/decimal"
)
// NewAccountS instantiates the AccountS
@@ -126,7 +128,38 @@ func (aS *AccountS) accountProcessEvent(acnt *utils.AccountProfile,
aS.cfg.AccountSCfg().AttributeSConns, aS.cfg.AccountSCfg().RateSConns); err != nil {
return
}
fmt.Println(blncOpers)
usage := utils.NewDecimal(int64(72*time.Hour), 0)
var usgEv time.Duration
if usgEv, err = cgrEv.FieldAsDuration(utils.Usage); err != nil {
if err != utils.ErrNotFound {
return
}
// not found, try at opts level
if usgEv, err = cgrEv.OptAsDuration(utils.MetaUsage); err != nil {
if err != utils.ErrNotFound {
return
}
err = nil
} else { // found, overwrite usage
usage.Big = decimal.New(int64(usgEv), 0)
}
} else {
usage.Big = decimal.New(int64(usgEv), 0)
}
for _, blncOper := range blncOpers {
if usage.Big.Cmp(decimal.New(0, 0)) == 0 {
return // no more debit
}
var dbted *utils.Decimal
if dbted, _, err = blncOper.debitUsage(usage, cgrEv); err != nil {
if err == utils.ErrFilterNotPassingNoCaps {
err = nil
continue
}
}
usage.Big = utils.SubstractBig(usage.Big, dbted.Big)
}
return
}

View File

@@ -43,6 +43,12 @@ func newAccountBalanceOperators(acnt *utils.AccountProfile,
var cncrtBlncs []*concreteBalance
blncOpers = make([]balanceOperator, len(blnCfgs))
for i, blnCfg := range blnCfgs {
if blnCfg.Type == utils.MetaConcrete {
blncOpers[i] = newConcreteBalanceOperator(blnCfg,
fltrS, connMgr, attrSConns, rateSConns)
cncrtBlncs = append(cncrtBlncs, blncOpers[i].(*concreteBalance))
continue
}
if blncOpers[i], err = newBalanceOperator(blnCfg, cncrtBlncs, fltrS, connMgr,
attrSConns, rateSConns); err != nil {
return

View File

@@ -56,6 +56,15 @@ func (ev *CGREvent) FieldAsString(fldName string) (val string, err error) {
return IfaceAsString(iface), nil
}
// OptAsString returns an option as string
func (ev *CGREvent) OptAsString(optName string) (val string, err error) {
iface, has := ev.Opts[optName]
if !has {
return "", ErrNotFound
}
return IfaceAsString(iface), nil
}
// FieldAsTime returns a field as Time instance
func (ev *CGREvent) FieldAsTime(fldName string, timezone string) (t time.Time, err error) {
iface, has := ev.Event[fldName]
@@ -76,6 +85,16 @@ func (ev *CGREvent) FieldAsDuration(fldName string) (d time.Duration, err error)
return IfaceAsDuration(iface)
}
// OptAsDuration returns an option as Duration instance
func (ev *CGREvent) OptAsDuration(optName string) (d time.Duration, err error) {
iface, has := ev.Event[optName]
if !has {
err = ErrNotFound
return
}
return IfaceAsDuration(iface)
}
// FieldAsFloat64 returns a field as float64 instance
func (ev *CGREvent) FieldAsFloat64(fldName string) (f float64, err error) {
iface, has := ev.Event[fldName]

View File

@@ -953,6 +953,7 @@ const (
MetaCDR = "*cdr"
MetaExporterIDs = "*exporterIDs"
MetaAsync = "*async"
MetaUsage = "*usage"
)
// Migrator Action