Adding RateSCost to SessionSv1.ProcessEvent

This commit is contained in:
DanB
2026-02-13 21:30:22 +01:00
parent 9ae9ebc205
commit e94628a482
3 changed files with 37 additions and 0 deletions

View File

@@ -64,6 +64,7 @@ const (
type SessionsOpts struct {
Accounts []*DynamicBoolOpt
Rates []*DynamicBoolOpt
Attributes []*DynamicBoolOpt
CDRs []*DynamicBoolOpt
Chargers []*DynamicBoolOpt

View File

@@ -880,6 +880,28 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
for runID, cgrEv := range cgrEvs {
cchEv := make(map[string]any)
// RateS Enabled
if rtS, errRTs := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
sS.fltrS, sS.cfg.SessionSCfg().Opts.Rates,
utils.MetaRates); errRTs != nil {
if cch[utils.OptsSesBlockerError].(bool) {
return errRTs
}
utils.Logger.Warning(
fmt.Sprintf("<%s> error: %s processing event: %+v with %s",
utils.SessionS, err.Error(), cgrEv, utils.RateS))
} else if rtS {
var rtsCost *utils.Decimal
if rtsCost, err = sS.ratesCost(ctx, cgrEv); err != nil {
return
}
if apiRply.RateSCost == nil {
apiRply.RateSCost = make(map[string]float64)
}
costFlt, _ := rtsCost.Float64()
apiRply.RateSCost[runID] = costFlt
}
// IPs Enabled
if ipS, errIPs := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
sS.fltrS, sS.cfg.SessionSCfg().Opts.IPs,

View File

@@ -1010,6 +1010,20 @@ func (sS *SessionS) accountsMaxAbstracts(ctx *context.Context, cgrEv *utils.CGRE
return &acntCost, nil
}
// ratesCost will query the RateS cost for Event
func (sS *SessionS) ratesCost(ctx *context.Context, cgrEv *utils.CGREvent) (cost *utils.Decimal, err error) {
if len(sS.cfg.SessionSCfg().RateSConns) == 0 {
err = errors.New("RateS is disabled")
return
}
var rtsCost utils.RateProfileCost
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().RateSConns,
utils.RateSv1CostForEvent, cgrEv, &rtsCost); err != nil {
return
}
return rtsCost.Cost, nil
}
// getSessions is used to return in a thread-safe manner active or passive sessions
func (sS *SessionS) getSessions(originID string, pSessions bool) (ss []*Session) {
ssMux := &sS.aSsMux // get the pointer so we don't copy, otherwise locks will not work