mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-16 13:49:53 +05:00
Adding RateSCost to SessionSv1.ProcessEvent
This commit is contained in:
@@ -64,6 +64,7 @@ const (
|
||||
|
||||
type SessionsOpts struct {
|
||||
Accounts []*DynamicBoolOpt
|
||||
Rates []*DynamicBoolOpt
|
||||
Attributes []*DynamicBoolOpt
|
||||
CDRs []*DynamicBoolOpt
|
||||
Chargers []*DynamicBoolOpt
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user