Updated SessionsAuthorize API

This commit is contained in:
Trial97
2021-08-24 10:49:24 +03:00
committed by Dan Christian Bogos
parent 51d828ff2e
commit b528bd0567
6 changed files with 163 additions and 127 deletions

View File

@@ -203,9 +203,9 @@ func testA1itDataSession1(t *testing.T) {
utils.Usage: "10240",
},
APIOpts: map[string]interface{}{
utils.OptsSSTTL: "28800s",
utils.OptsSSTTLLastUsed: "0s",
utils.OptsSSTTLUsage: "0s",
utils.OptsSesTTL: "28800s",
utils.OptsSesTTLLastUsed: "0s",
utils.OptsSesTTLUsage: "0s",
},
},
}
@@ -242,9 +242,9 @@ func testA1itDataSession1(t *testing.T) {
utils.Usage: "2097152",
},
APIOpts: map[string]interface{}{
utils.OptsSSTTL: "28800s",
utils.OptsSSTTLLastUsed: "2097152s",
utils.OptsSSTTLUsage: "0s",
utils.OptsSesTTL: "28800s",
utils.OptsSesTTLLastUsed: "2097152s",
utils.OptsSesTTLUsage: "0s",
},
},
}

View File

@@ -462,10 +462,10 @@ func testV1DataInitSession(t *testing.T) {
utils.Usage: initUsage,
},
APIOpts: map[string]interface{}{
utils.OptsSSTTL: "300s",
utils.OptsSSTTLLastUsed: "0s",
utils.OptsSSTTLMaxDelay: "1800s",
utils.OptsSSTTLUsage: "0s",
utils.OptsSesTTL: "300s",
utils.OptsSesTTLLastUsed: "0s",
utils.OptsSesTTLMaxDelay: "1800s",
utils.OptsSesTTLUsage: "0s",
},
},
}
@@ -509,10 +509,10 @@ func testV1DataUpdateWith1Mo(t *testing.T) {
utils.Usage: reqUsage,
},
APIOpts: map[string]interface{}{
utils.OptsSSTTL: "28807s",
utils.OptsSSTTLLastUsed: "0s",
utils.OptsSSTTLMaxDelay: "1800s",
utils.OptsSSTTLUsage: "0s"},
utils.OptsSesTTL: "28807s",
utils.OptsSesTTLLastUsed: "0s",
utils.OptsSesTTLMaxDelay: "1800s",
utils.OptsSesTTLUsage: "0s"},
},
}
var rply sessions.V1UpdateSessionReply
@@ -553,10 +553,10 @@ func testV1DataUpdateWith1Go(t *testing.T) {
utils.Usage: reqUsage,
},
APIOpts: map[string]interface{}{
utils.OptsSSTTL: "28807s",
utils.OptsSSTTLLastUsed: "0s",
utils.OptsSSTTLMaxDelay: "1800s",
utils.OptsSSTTLUsage: "0s"},
utils.OptsSesTTL: "28807s",
utils.OptsSesTTLLastUsed: "0s",
utils.OptsSesTTLMaxDelay: "1800s",
utils.OptsSesTTLUsage: "0s"},
},
}
var rply sessions.V1UpdateSessionReply

View File

@@ -142,7 +142,7 @@ func testSesNoneReqTypeItInit(t *testing.T) {
utils.Usage: 10 * time.Second,
},
APIOpts: map[string]interface{}{
utils.OptsSSDebitInterval: "0s",
utils.OptsSesDebitInterval: "0s",
},
},
}

View File

@@ -137,8 +137,8 @@ func testSesPauseItInitSession(t *testing.T, cgrID string, chargeable bool, usag
utils.Usage: usage,
},
APIOpts: map[string]interface{}{
utils.OptsSSDebitInterval: "0s",
utils.OptsSSChargeable: chargeable,
utils.OptsSesDebitInterval: "0s",
utils.OptsSesChargeable: chargeable,
},
},
}
@@ -171,7 +171,7 @@ func testSesPauseItUpdateSession(t *testing.T, cgrID string, chargeable bool, us
utils.Usage: usage,
},
APIOpts: map[string]interface{}{
utils.OptsSSChargeable: chargeable,
utils.OptsSesChargeable: chargeable,
},
},
}
@@ -204,7 +204,7 @@ func testSesPauseItTerminateSession(t *testing.T, cgrID string, chargeable bool,
utils.Usage: usage,
},
APIOpts: map[string]interface{}{
utils.OptsSSChargeable: chargeable,
utils.OptsSesChargeable: chargeable,
},
},
}

View File

@@ -214,17 +214,17 @@ func (sS *SessionS) setSTerminator(s *Session, opts engine.MapEvent) {
var err error
// TTL
var ttl time.Duration
if opts.HasField(utils.OptsSSTTL) {
ttl, err = opts.GetDuration(utils.OptsSSTTL)
} else if s.OptsStart.HasField(utils.OptsSSTTL) {
ttl, err = s.OptsStart.GetDuration(utils.OptsSSTTL)
if opts.HasField(utils.OptsSesTTL) {
ttl, err = opts.GetDuration(utils.OptsSesTTL)
} else if s.OptsStart.HasField(utils.OptsSesTTL) {
ttl, err = s.OptsStart.GetDuration(utils.OptsSesTTL)
} else {
ttl = sS.cgrCfg.SessionSCfg().SessionTTL
}
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s>, cannot extract <%s> for session:<%s>, from it's options: <%s>, err: <%s>",
utils.SessionS, utils.OptsSSTTL, s.CGRID, opts, err))
utils.SessionS, utils.OptsSesTTL, s.CGRID, opts, err))
return
}
if ttl == 0 {
@@ -232,17 +232,17 @@ func (sS *SessionS) setSTerminator(s *Session, opts engine.MapEvent) {
}
// random delay computation
var maxDelay time.Duration
if opts.HasField(utils.OptsSSTTLMaxDelay) {
maxDelay, err = opts.GetDuration(utils.OptsSSTTLMaxDelay)
} else if s.OptsStart.HasField(utils.OptsSSTTLMaxDelay) {
maxDelay, err = s.OptsStart.GetDuration(utils.OptsSSTTLMaxDelay)
if opts.HasField(utils.OptsSesTTLMaxDelay) {
maxDelay, err = opts.GetDuration(utils.OptsSesTTLMaxDelay)
} else if s.OptsStart.HasField(utils.OptsSesTTLMaxDelay) {
maxDelay, err = s.OptsStart.GetDuration(utils.OptsSesTTLMaxDelay)
} else if sS.cgrCfg.SessionSCfg().SessionTTLMaxDelay != nil {
maxDelay = *sS.cgrCfg.SessionSCfg().SessionTTLMaxDelay
}
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s>, cannot extract <%s> for session:<%s>, from it's options: <%s>, err: <%s>",
utils.SessionS, utils.OptsSSTTLMaxDelay, s.CGRID, opts.String(), err.Error()))
utils.SessionS, utils.OptsSesTTLMaxDelay, s.CGRID, opts.String(), err.Error()))
return
}
if maxDelay != 0 {
@@ -252,47 +252,47 @@ func (sS *SessionS) setSTerminator(s *Session, opts engine.MapEvent) {
}
// LastUsed
var ttlLastUsed *time.Duration
if opts.HasField(utils.OptsSSTTLLastUsed) {
ttlLastUsed, err = opts.GetDurationPtr(utils.OptsSSTTLLastUsed)
} else if s.OptsStart.HasField(utils.OptsSSTTLLastUsed) {
ttlLastUsed, err = s.OptsStart.GetDurationPtr(utils.OptsSSTTLLastUsed)
if opts.HasField(utils.OptsSesTTLLastUsed) {
ttlLastUsed, err = opts.GetDurationPtr(utils.OptsSesTTLLastUsed)
} else if s.OptsStart.HasField(utils.OptsSesTTLLastUsed) {
ttlLastUsed, err = s.OptsStart.GetDurationPtr(utils.OptsSesTTLLastUsed)
} else {
ttlLastUsed = sS.cgrCfg.SessionSCfg().SessionTTLLastUsed
}
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s>, cannot extract <%s> for session:<%s>, from it's options: <%s>, err: <%s>",
utils.SessionS, utils.OptsSSTTLLastUsed, s.CGRID, opts.String(), err.Error()))
utils.SessionS, utils.OptsSesTTLLastUsed, s.CGRID, opts.String(), err.Error()))
return
}
// LastUsage
var ttlLastUsage *time.Duration
if opts.HasField(utils.OptsSSTTLLastUsage) {
ttlLastUsage, err = opts.GetDurationPtr(utils.OptsSSTTLLastUsage)
} else if s.OptsStart.HasField(utils.OptsSSTTLLastUsage) {
ttlLastUsage, err = s.OptsStart.GetDurationPtr(utils.OptsSSTTLLastUsage)
if opts.HasField(utils.OptsSesTTLLastUsage) {
ttlLastUsage, err = opts.GetDurationPtr(utils.OptsSesTTLLastUsage)
} else if s.OptsStart.HasField(utils.OptsSesTTLLastUsage) {
ttlLastUsage, err = s.OptsStart.GetDurationPtr(utils.OptsSesTTLLastUsage)
} else {
ttlLastUsage = sS.cgrCfg.SessionSCfg().SessionTTLLastUsage
}
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s>, cannot extract <%s> for session:<%s>, from it's options: <%s>, err: <%s>",
utils.SessionS, utils.OptsSSTTLLastUsage, s.CGRID, opts.String(), err.Error()))
utils.SessionS, utils.OptsSesTTLLastUsage, s.CGRID, opts.String(), err.Error()))
return
}
// TTLUsage
var ttlUsage *time.Duration
if opts.HasField(utils.OptsSSTTLUsage) {
ttlUsage, err = opts.GetDurationPtr(utils.OptsSSTTLUsage)
} else if s.OptsStart.HasField(utils.OptsSSTTLUsage) {
ttlUsage, err = s.OptsStart.GetDurationPtr(utils.OptsSSTTLUsage)
if opts.HasField(utils.OptsSesTTLUsage) {
ttlUsage, err = opts.GetDurationPtr(utils.OptsSesTTLUsage)
} else if s.OptsStart.HasField(utils.OptsSesTTLUsage) {
ttlUsage, err = s.OptsStart.GetDurationPtr(utils.OptsSesTTLUsage)
} else {
ttlUsage = sS.cgrCfg.SessionSCfg().SessionTTLUsage
}
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s>, cannot extract <%s> for session:<%s>, from it's options: <%s>, err: <%s>",
utils.SessionS, utils.OptsSSTTLUsage, s.CGRID, opts.String(), err.Error()))
utils.SessionS, utils.OptsSesTTLUsage, s.CGRID, opts.String(), err.Error()))
return
}
// previously defined, reset
@@ -946,7 +946,7 @@ func (sS *SessionS) newSession(ctx *context.Context, cgrEv *utils.CGREvent, resI
ClientConnID: clntConnID,
DebitInterval: dbtItval,
}
s.chargeable = s.OptsStart.GetBoolOrDefault(utils.OptsSSChargeable, true)
s.chargeable = s.OptsStart.GetBoolOrDefault(utils.OptsSesChargeable, true)
if !isMsg && sS.isIndexed(s, false) { // check if already exists
return nil, utils.ErrExists
}
@@ -1259,7 +1259,7 @@ func (sS *SessionS) updateSession(ctx *context.Context, s *Session, updtEv, opts
s.updateSRuns(updtEv, sS.cgrCfg.SessionSCfg().AlterableFields)
sS.setSTerminator(s, opts) // reset the terminator
}
s.chargeable = opts.GetBoolOrDefault(utils.OptsSSChargeable, true)
s.chargeable = opts.GetBoolOrDefault(utils.OptsSesChargeable, true)
//init has no updtEv
if updtEv == nil {
updtEv = engine.MapEvent(s.EventStart.Clone())
@@ -1551,12 +1551,23 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
}
// end of RPC caching
if !args.GetAttributes && !args.AuthorizeResources &&
!args.GetMaxUsage && !args.GetRoutes {
if !(args.GetAttributes || utils.OptAsBool(args.APIOpts, utils.OptsSesAttributeS) ||
args.GetMaxUsage || utils.OptAsBool(args.APIOpts, utils.OptsSesMaxUsage) ||
args.AuthorizeResources || utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAuth) ||
args.GetRoutes || utils.OptAsBool(args.APIOpts, utils.OptsSesRouteS)) {
return // Nothing to do
}
if args.GetAttributes {
rplyAttr, err := sS.processAttributes(ctx, args.CGREvent, args.AttributeIDs, false)
if args.GetAttributes ||
utils.OptAsBool(args.APIOpts, utils.OptsSesAttributeS) {
var atrsIDs []string
if atrsIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesAttributeIDs); err != nil {
return
}
if atrsIDs == nil {
atrsIDs = args.AttributeIDs
}
rplyAttr, err := sS.processAttributes(ctx, args.CGREvent, atrsIDs, false)
if err == nil {
args.CGREvent = rplyAttr.CGREvent
authReply.Attributes = &rplyAttr
@@ -1564,9 +1575,11 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
return utils.NewErrAttributeS(err)
}
}
if args.GetMaxUsage {
if args.GetMaxUsage ||
utils.OptAsBool(args.APIOpts, utils.OptsSesMaxUsage) {
var sRunsUsage map[string]time.Duration
if sRunsUsage, err = sS.authEvent(ctx, args.CGREvent, args.ForceDuration); err != nil {
if sRunsUsage, err = sS.authEvent(ctx, args.CGREvent,
args.ForceDuration || utils.OptAsBool(args.APIOpts, utils.OptsSesForceDuration)); err != nil {
return err
}
@@ -1580,7 +1593,8 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
}
authReply.MaxUsage = &maxUsage
}
if args.AuthorizeResources {
if args.AuthorizeResources ||
utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAuth) {
if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 {
return utils.NewErrNotConnected(utils.ResourceS)
}
@@ -1600,9 +1614,12 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
}
authReply.ResourceAllocation = &allocMsg
}
if args.GetRoutes {
if args.GetRoutes ||
utils.OptAsBool(args.APIOpts, utils.OptsSesRouteS) {
routesReply, err := sS.getRoutes(ctx, args.CGREvent.Clone(), args.Paginator,
args.RoutesIgnoreErrors, args.RoutesMaxCost, false)
args.RoutesIgnoreErrors || utils.OptAsBool(args.APIOpts, utils.OptsSesRouteSIgnoreErrors),
utils.FirstNonEmpty(args.RoutesMaxCost, utils.IfaceAsString(args.APIOpts[utils.OptsSesRouteSMaxCost])),
false)
if err != nil {
return err
}
@@ -1610,8 +1627,16 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
authReply.RouteProfiles = routesReply
}
}
if args.ProcessThresholds {
tIDs, err := sS.processThreshold(ctx, args.CGREvent, args.ThresholdIDs, true)
if args.ProcessThresholds ||
utils.OptAsBool(args.APIOpts, utils.OptsSesThresholdS) {
var thIDs []string
if thIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesThresholdIDs); err != nil {
return
}
if thIDs == nil {
thIDs = args.ThresholdIDs
}
tIDs, err := sS.processThreshold(ctx, args.CGREvent, thIDs, true)
if err != nil && err.Error() != utils.ErrNotFound.Error() {
utils.Logger.Warning(
fmt.Sprintf("<%s> error: %s processing event %+v with ThresholdS.",
@@ -1620,8 +1645,16 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
}
authReply.ThresholdIDs = &tIDs
}
if args.ProcessStats {
sIDs, err := sS.processStats(ctx, args.CGREvent, args.StatIDs, false)
if args.ProcessStats ||
utils.OptAsBool(args.APIOpts, utils.OptsSesStatS) {
var statIDs []string
if statIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesStatIDs); err != nil {
return
}
if statIDs == nil {
statIDs = args.StatIDs
}
sIDs, err := sS.processStats(ctx, args.CGREvent, statIDs, false)
if err != nil &&
err.Error() != utils.ErrNotFound.Error() {
utils.Logger.Warning(
@@ -1738,8 +1771,8 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context,
var err error
opts := engine.MapEvent(args.APIOpts)
dbtItvl := sS.cgrCfg.SessionSCfg().DebitInterval
if opts.HasField(utils.OptsSSDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSSDebitInterval); err != nil {
if opts.HasField(utils.OptsSesDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSesDebitInterval); err != nil {
return err //utils.NewErrRALs(err)
}
}
@@ -1879,8 +1912,8 @@ func (sS *SessionS) BiRPCv1UpdateSession(ctx *context.Context,
ev := engine.MapEvent(args.CGREvent.Event)
opts := engine.MapEvent(args.APIOpts)
dbtItvl := sS.cgrCfg.SessionSCfg().DebitInterval
if opts.HasField(utils.OptsSSDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSSDebitInterval); err != nil {
if opts.HasField(utils.OptsSesDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSesDebitInterval); err != nil {
return err //utils.NewErrRALs(err)
}
}
@@ -1957,8 +1990,8 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context,
return utils.NewErrMandatoryIeMissing(utils.OriginID)
}
dbtItvl := sS.cgrCfg.SessionSCfg().DebitInterval
if opts.HasField(utils.OptsSSDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSSDebitInterval); err != nil {
if opts.HasField(utils.OptsSesDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = opts.GetDuration(utils.OptsSesDebitInterval); err != nil {
return err //utils.NewErrRALs(err)
}
}
@@ -1990,7 +2023,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context,
s.UpdateSRuns(ev, sS.cgrCfg.SessionSCfg().AlterableFields)
}
s.Lock()
s.chargeable = opts.GetBoolOrDefault(utils.OptsSSChargeable, true)
s.chargeable = opts.GetBoolOrDefault(utils.OptsSesChargeable, true)
s.Unlock()
if err = sS.terminateSession(ctx, s,
ev.GetDurationPtrIgnoreErrors(utils.Usage),
@@ -2226,12 +2259,12 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// end of RPC caching
blockError := utils.OptAsBool(args.APIOpts, utils.OptsSSBlockerError)
blockError := utils.OptAsBool(args.APIOpts, utils.OptsSesBlockerError)
events := map[string]*utils.CGREvent{
utils.MetaRaw: args.CGREvent,
}
if utils.OptAsBool(args.APIOpts, utils.OptsSSChargerS) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesChargerS) {
var chrgrs []*engine.ChrgSProcessEventReply
if chrgrs, err = sS.processChargerS(ctx, args.CGREvent); err != nil {
return
@@ -2242,14 +2275,14 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// check for *attribute
if utils.OptAsBool(args.APIOpts, utils.OptsSSAttributeS) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesAttributeS) {
var attrIDs []string
if attrIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSSAttributeIDs); err != nil {
if attrIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesAttributeIDs); err != nil {
return
}
rply.Attributes = make(map[string]*engine.AttrSProcessEventReply)
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSAttributeSDerivedReply)) {
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesAttributeSDerivedReply)) {
rplyAttr, err := sS.processAttributes(ctx, cgrEv, attrIDs, false)
if err != nil {
if err.Error() != utils.ErrNotFound.Error() {
@@ -2264,12 +2297,12 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// get routes if required
if utils.OptAsBool(args.APIOpts, utils.OptsSSRouteS) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesRouteS) {
rply.RouteProfiles = make(map[string]engine.SortedRoutesList)
// check in case we have options for suppliers
ignoreErrors := utils.OptAsBool(args.APIOpts, utils.OptsSSRouteSIgnoreErrors)
maxCost := utils.IfaceAsString(args.APIOpts[utils.OptsSSRouteSMaxCost])
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSRouteSDerivedReply)) {
ignoreErrors := utils.OptAsBool(args.APIOpts, utils.OptsSesRouteSIgnoreErrors)
maxCost := utils.IfaceAsString(args.APIOpts[utils.OptsSesRouteSMaxCost])
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesRouteSDerivedReply)) {
routesReply, err := sS.getRoutes(ctx, cgrEv.Clone(), args.Paginator, ignoreErrors, maxCost, false)
if err != nil {
return err
@@ -2281,13 +2314,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// process thresholds if required
if utils.OptAsBool(args.APIOpts, utils.OptsSSThresholdS) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesThresholdS) {
rply.ThresholdIDs = make(map[string][]string)
var thIDs []string
if thIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSSThresholdIDs); err != nil {
if thIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesThresholdIDs); err != nil {
return
}
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSThresholdSDerivedReply)) {
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesThresholdSDerivedReply)) {
tIDs, err := sS.processThreshold(ctx, cgrEv, thIDs, true)
if err != nil && err.Error() != utils.ErrNotFound.Error() {
if blockError {
@@ -2303,13 +2336,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// process stats if required
if utils.OptAsBool(args.APIOpts, utils.OptsSSStatS) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesStatS) {
rply.StatQueueIDs = make(map[string][]string)
var stIDs []string
if stIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSSStatIDs); err != nil {
if stIDs, err = utils.OptAsStringSlice(args.APIOpts, utils.OptsSesStatIDs); err != nil {
return
}
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSStatSDerivedReply)) {
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesStatSDerivedReply)) {
sIDs, err := sS.processStats(ctx, cgrEv, stIDs, true)
if err != nil &&
err.Error() != utils.ErrNotFound.Error() {
@@ -2325,8 +2358,8 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
}
if utils.OptAsBool(args.APIOpts, utils.OptsSSSTIRAuthenticate) {
for _, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSSTIRDerivedReply)) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesSTIRAuthenticate) {
for _, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesSTIRDerivedReply)) {
ev := engine.MapEvent(cgrEv.Event)
opts := engine.MapEvent(cgrEv.APIOpts)
attest := sS.cgrCfg.SessionSCfg().STIRCfg.AllowedAttest
@@ -2346,9 +2379,9 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
return utils.NewSTIRError(err.Error())
}
}
} else if utils.OptAsBool(args.APIOpts, utils.OptsSSSTIRInitiate) {
} else if utils.OptAsBool(args.APIOpts, utils.OptsSesSTIRInitiate) {
rply.STIRIdentity = make(map[string]string)
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSSTIRDerivedReply)) {
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesSTIRDerivedReply)) {
ev := engine.MapEvent(cgrEv.Event)
opts := engine.MapEvent(cgrEv.APIOpts)
attest := sS.cgrCfg.SessionSCfg().STIRCfg.DefaultAttest
@@ -2382,7 +2415,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
}
// check for *resources
if opt, has := args.APIOpts[utils.OptsSSResourceS]; has {
if opt, has := args.APIOpts[utils.OptsSesResourceS]; has {
if len(sS.cgrCfg.SessionSCfg().ResSConns) == 0 {
return utils.NewErrNotConnected(utils.ResourceS)
}
@@ -2396,10 +2429,10 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
case utils.MetaRelease:
method = utils.ResourceSv1ReleaseResources
default:
return fmt.Errorf("unsuported value for %s option: %q ", utils.OptsSSResourceS, optStr)
return fmt.Errorf("unsuported value for %s option: %q ", utils.OptsSesResourceS, optStr)
}
rply.ResourceAllocation = make(map[string]string)
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSResourceSDerivedReply)) {
for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSDerivedReply)) {
originID := engine.MapEvent(cgrEv.Event).GetStringIgnoreErrors(utils.OriginID)
if originID == "" {
return utils.NewErrMandatoryIeMissing(utils.OriginID)
@@ -2566,12 +2599,12 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
// }
// }
if utils.OptAsBool(args.APIOpts, utils.OptsSSCDRs) {
if utils.OptAsBool(args.APIOpts, utils.OptsSesCDRs) {
if len(sS.cgrCfg.SessionSCfg().CDRsConns) == 0 {
return utils.NewErrNotConnected(utils.CDRs)
}
var cdrRply string
for _, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSSCDRsDerivedReply)) {
for _, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesCDRsDerivedReply)) {
if err := sS.processCDR(ctx, cgrEv, &cdrRply, false); err != nil {
if blockError {
return utils.NewErrCDRS(err)

View File

@@ -2081,47 +2081,50 @@ var (
)
// CGROptionsSet the possible cgr options
var CGROptionsSet = NewStringSet([]string{OptsRatesStartTime, OptsRatesUsage, OptsSSTTL,
OptsSSTTLMaxDelay, OptsSSTTLLastUsed, OptsSSTTLLastUsage, OptsSSTTLUsage,
OptsSSDebitInterval, OptsStirATest, OptsStirPayloadMaxDuration, OptsStirIdentity,
var CGROptionsSet = NewStringSet([]string{OptsRatesStartTime, OptsRatesUsage, OptsSesTTL,
OptsSesTTLMaxDelay, OptsSesTTLLastUsed, OptsSesTTLLastUsage, OptsSesTTLUsage,
OptsSesDebitInterval, OptsStirATest, OptsStirPayloadMaxDuration, OptsStirIdentity,
OptsStirOriginatorTn, OptsStirOriginatorURI, OptsStirDestinationTn, OptsStirDestinationURI,
OptsStirPublicKeyPath, OptsStirPrivateKeyPath, OptsAPIKey, OptsRouteID, OptsContext,
OptsAttributesProcessRuns, OptsRoutesLimit, OptsRoutesOffset, OptsSSChargeable,
OptsAttributesProcessRuns, OptsRoutesLimit, OptsRoutesOffset, OptsSesChargeable,
RemoteHostOpt, CacheOpt, OptsRoutesProfilesCount, OptsDispatchersProfilesCount})
// Event Opts
const (
// SessionS
OptsSSTTL = "*ssTTL"
OptsSSChargeable = "*ssChargeable"
OptsSSDebitInterval = "*ssDebitInterval"
OptsSSTTLLastUsage = "*ssTTLLastUsage"
OptsSSTTLLastUsed = "*ssTTLLastUsed"
OptsSSTTLMaxDelay = "*ssTTLMaxDelay"
OptsSSTTLUsage = "*ssTTLUsage"
OptsSesTTL = "*sesTTL"
OptsSesChargeable = "*sesChargeable"
OptsSesDebitInterval = "*sesDebitInterval"
OptsSesTTLLastUsage = "*sesTTLLastUsage"
OptsSesTTLLastUsed = "*sesTTLLastUsed"
OptsSesTTLMaxDelay = "*sesTTLMaxDelay"
OptsSesTTLUsage = "*sesTTLUsage"
OptsSSAttributeS = "*ssAttributeS"
OptsSSAttributeIDs = "*ssAttributeIDs"
OptsSSAttributeSDerivedReply = "*ssAttributeSDerivedReply"
OptsSSBlockerError = "*ssBlockerError"
OptsSSCDRs = "*ssCDRs"
OptsSSCDRsDerivedReply = "*ssCDRsDerivedReply"
OptsSSChargerS = "*ssChargerS"
OptsSSResourceS = "*ssResourceS"
OptsSSResourceSDerivedReply = "*ssResourceSDerivedReply"
OptsSSRouteS = "*ssRouteS"
OptsSSRouteSDerivedReply = "*ssRouteSDerivedReply"
OptsSSRouteSIgnoreErrors = "*ssRouteSIgnoreErrors"
OptsSSRouteSMaxCost = "*ssRouteSMaxCost"
OptsSSStatS = "*ssStatS"
OptsSSStatSDerivedReply = "*ssStatSDerivedReply"
OptsSSStatIDs = "*ssStatIDs"
OptsSSSTIRAuthenticate = "*ssSTIRAuthenticate"
OptsSSSTIRDerivedReply = "*ssSTIRDerivedReply"
OptsSSSTIRInitiate = "*ssSTIRInitiate"
OptsSSThresholdS = "*ssThresholdS"
OptsSSThresholdSDerivedReply = "*ssThresholdSDerivedReply"
OptsSSThresholdIDs = "*ssThresholdIDs"
OptsSesAttributeS = "*sesAttributeS"
OptsSesAttributeIDs = "*sesAttributeIDs"
OptsSesAttributeSDerivedReply = "*sesAttributeSDerivedReply"
OptsSesBlockerError = "*sesBlockerError"
OptsSesCDRs = "*sesCDRs"
OptsSesCDRsDerivedReply = "*sesCDRsDerivedReply"
OptsSesChargerS = "*sesChargerS"
OptsSesResourceS = "*sesResourceS"
OptsSesResourceSAuth = "*sesResourceSAuth"
OptsSesResourceSDerivedReply = "*sesResourceSDerivedReply"
OptsSesRouteS = "*sesRouteS"
OptsSesRouteSDerivedReply = "*sesRouteSDerivedReply"
OptsSesRouteSIgnoreErrors = "*sesRouteSIgnoreErrors"
OptsSesRouteSMaxCost = "*sesRouteSMaxCost"
OptsSesStatS = "*sesStatS"
OptsSesStatSDerivedReply = "*sesStatSDerivedReply"
OptsSesStatIDs = "*sesStatIDs"
OptsSesSTIRAuthenticate = "*sesSTIRAuthenticate"
OptsSesSTIRDerivedReply = "*sesSTIRDerivedReply"
OptsSesSTIRInitiate = "*sesSTIRInitiate"
OptsSesThresholdS = "*sesThresholdS"
OptsSesThresholdSDerivedReply = "*sesThresholdSDerivedReply"
OptsSesThresholdIDs = "*sesThresholdIDs"
OptsSesMaxUsage = "*sesMaxUsage"
OptsSesForceDuration = "*sesForceDuration"
OptsCDRsAttributeS = "*cdrsAttributeS"
OptsCDRsChargerS = "*cdrsChargerS"