From 428a63eb5bad12abba0caeb7fc3725efa72b8fcf Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Fri, 15 Oct 2021 17:30:49 +0300 Subject: [PATCH] Add opts for sessions subsystem (cont.) --- config/config.go | 32 +++- config/config_defaults.go | 112 +++++++++++++ config/sessionscfg.go | 320 +++++++++++++++++++++++++++++++++----- sessions/sessions.go | 240 +++++++++++++++++----------- utils/consts.go | 19 ++- 5 files changed, 582 insertions(+), 141 deletions(-) diff --git a/config/config.go b/config/config.go index c6ea06e93..c5b1bf201 100644 --- a/config/config.go +++ b/config/config.go @@ -123,14 +123,30 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) { STIRCfg: new(STIRcfg), DefaultUsage: make(map[string]time.Duration), Opts: &SessionsOpts{ - Attributes: []*utils.DynamicBoolOpt{}, - Chargers: []*utils.DynamicBoolOpt{}, - Stats: []*utils.DynamicBoolOpt{}, - Thresholds: []*utils.DynamicBoolOpt{}, - Initiate: []*utils.DynamicBoolOpt{}, - Update: []*utils.DynamicBoolOpt{}, - Terminate: []*utils.DynamicBoolOpt{}, - Message: []*utils.DynamicBoolOpt{}, + Accounts: []*utils.DynamicBoolOpt{}, + Attributes: []*utils.DynamicBoolOpt{}, + CDRs: []*utils.DynamicBoolOpt{}, + Chargers: []*utils.DynamicBoolOpt{}, + Resources: []*utils.DynamicBoolOpt{}, + Routes: []*utils.DynamicBoolOpt{}, + Stats: []*utils.DynamicBoolOpt{}, + Thresholds: []*utils.DynamicBoolOpt{}, + Initiate: []*utils.DynamicBoolOpt{}, + Update: []*utils.DynamicBoolOpt{}, + Terminate: []*utils.DynamicBoolOpt{}, + Message: []*utils.DynamicBoolOpt{}, + AttributesDerivedReply: []*utils.DynamicBoolOpt{}, + BlockerError: []*utils.DynamicBoolOpt{}, + CDRsDerivedReply: []*utils.DynamicBoolOpt{}, + ResourcesAuthorize: []*utils.DynamicBoolOpt{}, + ResourcesAllocate: []*utils.DynamicBoolOpt{}, + ResourcesRelease: []*utils.DynamicBoolOpt{}, + ResourcesDerivedReply: []*utils.DynamicBoolOpt{}, + RoutesDerivedReply: []*utils.DynamicBoolOpt{}, + StatsDerivedReply: []*utils.DynamicBoolOpt{}, + ThresholdsDerivedReply: []*utils.DynamicBoolOpt{}, + MaxUsage: []*utils.DynamicBoolOpt{}, + ForceDuration: []*utils.DynamicBoolOpt{}, }, }, fsAgentCfg: new(FsAgentCfg), diff --git a/config/config_defaults.go b/config/config_defaults.go index a6618d493..3167b810f 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -619,6 +619,13 @@ const CGRATES_CFG_JSON = ` "rates_conns": [], // connections to RateS "accounts_conns": [], // connections to AccountS "opts": { + "*accounts": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], "*attributeS": [ // { // "Tenant": "*any", @@ -626,6 +633,13 @@ const CGRATES_CFG_JSON = ` // "Value": false, // }, ], + "*cdrS": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], "*chargerS": [ // { // "Tenant": "*any", @@ -633,6 +647,20 @@ const CGRATES_CFG_JSON = ` // "Value": false, // }, ], + "*resourceS": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*routeS": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], "*statS": [ // { // "Tenant": "*any", @@ -675,6 +703,90 @@ const CGRATES_CFG_JSON = ` // "Value": false, // }, ], + "*attributesDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*blockerError": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*cdrsDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*resourcesAuthorize": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*resourcesAllocate": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*resourcesRelease": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*resourcesDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*routesDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*statsDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*thresholdsDerivedReply": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*maxUsage": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], + "*forceDuration": [ + // { + // "Tenant": "*any", + // "FilterIDs": [], + // "Value": false, + // }, + ], }, }, diff --git a/config/sessionscfg.go b/config/sessionscfg.go index 79aabb0a3..d17d36278 100644 --- a/config/sessionscfg.go +++ b/config/sessionscfg.go @@ -28,25 +28,57 @@ import ( ) const ( - SessionsAttributesDftOpt = false - SessionsChargersDftOpt = false - SessionsStatsDftOpt = false - SessionsThresholdsDftOpt = false - SessionsInitiateDftOpt = false - SessionsUpdateDftOpt = false - SessionsTerminateDftOpt = false - SessionsMessageDftOpt = false + SessionsAccountsDftOpt = false + SessionsAttributesDftOpt = false + SessionsCDRsDftOpt = false + SessionsChargersDftOpt = false + SessionsResourcesDftOpt = false + SessionsRoutesDftOpt = false + SessionsStatsDftOpt = false + SessionsThresholdsDftOpt = false + SessionsInitiateDftOpt = false + SessionsUpdateDftOpt = false + SessionsTerminateDftOpt = false + SessionsMessageDftOpt = false + SessionsAttributesDerivedReplyDftOpt = false + SessionsBlockerErrorDftOpt = false + SessionsCDRsDerivedReplyDftOpt = false + SessionsResourcesAuthorizeDftOpt = false + SessionsResourcesAllocateDftOpt = false + SessionsResourcesReleaseDftOpt = false + SessionsResourcesDerivedReplyDftOpt = false + SessionsRoutesDerivedReplyDftOpt = false + SessionsStatsDerivedReplyDftOpt = false + SessionsThresholdsDerivedReplyDftOpt = false + SessionsMaxUsageDftOpt = false + SessionsForceDurationDftOpt = false ) type SessionsOpts struct { - Attributes []*utils.DynamicBoolOpt - Chargers []*utils.DynamicBoolOpt - Stats []*utils.DynamicBoolOpt - Thresholds []*utils.DynamicBoolOpt - Initiate []*utils.DynamicBoolOpt - Update []*utils.DynamicBoolOpt - Terminate []*utils.DynamicBoolOpt - Message []*utils.DynamicBoolOpt + Accounts []*utils.DynamicBoolOpt + Attributes []*utils.DynamicBoolOpt + CDRs []*utils.DynamicBoolOpt + Chargers []*utils.DynamicBoolOpt + Resources []*utils.DynamicBoolOpt + Routes []*utils.DynamicBoolOpt + Stats []*utils.DynamicBoolOpt + Thresholds []*utils.DynamicBoolOpt + Initiate []*utils.DynamicBoolOpt + Update []*utils.DynamicBoolOpt + Terminate []*utils.DynamicBoolOpt + Message []*utils.DynamicBoolOpt + AttributesDerivedReply []*utils.DynamicBoolOpt + BlockerError []*utils.DynamicBoolOpt + CDRsDerivedReply []*utils.DynamicBoolOpt + ResourcesAuthorize []*utils.DynamicBoolOpt + ResourcesAllocate []*utils.DynamicBoolOpt + ResourcesRelease []*utils.DynamicBoolOpt + ResourcesDerivedReply []*utils.DynamicBoolOpt + RoutesDerivedReply []*utils.DynamicBoolOpt + StatsDerivedReply []*utils.DynamicBoolOpt + ThresholdsDerivedReply []*utils.DynamicBoolOpt + MaxUsage []*utils.DynamicBoolOpt + ForceDuration []*utils.DynamicBoolOpt } // SessionSCfg is the config section for SessionS @@ -96,12 +128,24 @@ func (sesOpts *SessionsOpts) loadFromJSONCfg(jsnCfg *SessionsOptsJson) (err erro if jsnCfg == nil { return } + if jsnCfg.Accounts != nil { + sesOpts.Accounts = append(sesOpts.Accounts, jsnCfg.Accounts...) + } if jsnCfg.Attributes != nil { sesOpts.Attributes = append(sesOpts.Attributes, jsnCfg.Attributes...) } + if jsnCfg.CDRs != nil { + sesOpts.CDRs = append(sesOpts.CDRs, jsnCfg.CDRs...) + } if jsnCfg.Chargers != nil { sesOpts.Chargers = append(sesOpts.Chargers, jsnCfg.Chargers...) } + if jsnCfg.Resources != nil { + sesOpts.Resources = append(sesOpts.Resources, jsnCfg.Resources...) + } + if jsnCfg.Routes != nil { + sesOpts.Routes = append(sesOpts.Routes, jsnCfg.Routes...) + } if jsnCfg.Stats != nil { sesOpts.Stats = append(sesOpts.Stats, jsnCfg.Stats...) } @@ -120,6 +164,42 @@ func (sesOpts *SessionsOpts) loadFromJSONCfg(jsnCfg *SessionsOptsJson) (err erro if jsnCfg.Message != nil { sesOpts.Message = append(sesOpts.Message, jsnCfg.Message...) } + if jsnCfg.AttributesDerivedReply != nil { + sesOpts.AttributesDerivedReply = append(sesOpts.AttributesDerivedReply, jsnCfg.AttributesDerivedReply...) + } + if jsnCfg.BlockerError != nil { + sesOpts.BlockerError = append(sesOpts.BlockerError, jsnCfg.BlockerError...) + } + if jsnCfg.CDRsDerivedReply != nil { + sesOpts.CDRsDerivedReply = append(sesOpts.CDRsDerivedReply, jsnCfg.CDRsDerivedReply...) + } + if jsnCfg.ResourcesAuthorize != nil { + sesOpts.ResourcesAuthorize = append(sesOpts.ResourcesAuthorize, jsnCfg.ResourcesAuthorize...) + } + if jsnCfg.ResourcesAllocate != nil { + sesOpts.ResourcesAllocate = append(sesOpts.ResourcesAllocate, jsnCfg.ResourcesAllocate...) + } + if jsnCfg.ResourcesRelease != nil { + sesOpts.ResourcesRelease = append(sesOpts.ResourcesRelease, jsnCfg.ResourcesRelease...) + } + if jsnCfg.ResourcesDerivedReply != nil { + sesOpts.ResourcesDerivedReply = append(sesOpts.ResourcesDerivedReply, jsnCfg.ResourcesDerivedReply...) + } + if jsnCfg.RoutesDerivedReply != nil { + sesOpts.RoutesDerivedReply = append(sesOpts.RoutesDerivedReply, jsnCfg.RoutesDerivedReply...) + } + if jsnCfg.StatsDerivedReply != nil { + sesOpts.StatsDerivedReply = append(sesOpts.StatsDerivedReply, jsnCfg.StatsDerivedReply...) + } + if jsnCfg.ThresholdsDerivedReply != nil { + sesOpts.ThresholdsDerivedReply = append(sesOpts.ThresholdsDerivedReply, jsnCfg.ThresholdsDerivedReply...) + } + if jsnCfg.MaxUsage != nil { + sesOpts.MaxUsage = append(sesOpts.MaxUsage, jsnCfg.MaxUsage...) + } + if jsnCfg.MaxUsage != nil { + sesOpts.MaxUsage = append(sesOpts.MaxUsage, jsnCfg.MaxUsage...) + } return } @@ -276,14 +356,30 @@ func (scfg SessionSCfg) AsMapInterface(string) interface{} { } } opts := map[string]interface{}{ - utils.MetaAttributeSCfg: scfg.Opts.Attributes, - utils.MetaChargerSCfg: scfg.Opts.Chargers, - utils.MetaStatSCfg: scfg.Opts.Stats, - utils.MetaThresholdSCfg: scfg.Opts.Thresholds, - utils.MetaInitiate: scfg.Opts.Initiate, - utils.MetaUpdate: scfg.Opts.Update, - utils.MetaTerminate: scfg.Opts.Terminate, - utils.MetaMessage: scfg.Opts.Message, + utils.MetaAccountSCfg: scfg.Opts.Accounts, + utils.MetaAttributeSCfg: scfg.Opts.Attributes, + utils.MetaCDRsCfg: scfg.Opts.CDRs, + utils.MetaChargerSCfg: scfg.Opts.Chargers, + utils.MetaResourceSCfg: scfg.Opts.Resources, + utils.MetaRouteSCfg: scfg.Opts.Routes, + utils.MetaStatSCfg: scfg.Opts.Stats, + utils.MetaThresholdSCfg: scfg.Opts.Thresholds, + utils.MetaInitiate: scfg.Opts.Initiate, + utils.MetaUpdate: scfg.Opts.Update, + utils.MetaTerminate: scfg.Opts.Terminate, + utils.MetaMessage: scfg.Opts.Message, + utils.MetaAttributesDerivedReplyCfg: scfg.Opts.AttributesDerivedReply, + utils.MetaBlockerErrorCfg: scfg.Opts.BlockerError, + utils.MetaCDRsDerivedReplyCfg: scfg.Opts.CDRsDerivedReply, + utils.MetaResourcesAuthorizeCfg: scfg.Opts.ResourcesAuthorize, + utils.MetaResourcesAllocateCfg: scfg.Opts.ResourcesAllocate, + utils.MetaResourcesReleaseCfg: scfg.Opts.ResourcesRelease, + utils.MetaResourcesDerivedReplyCfg: scfg.Opts.ResourcesDerivedReply, + utils.MetaRoutesDerivedReplyCfg: scfg.Opts.RoutesDerivedReply, + utils.MetaStatsDerivedReplyCfg: scfg.Opts.StatsDerivedReply, + utils.MetaThresholdsDerivedReplyCfg: scfg.Opts.ThresholdsDerivedReply, + utils.MetaMaxUsageCfg: scfg.Opts.MaxUsage, + utils.MetaForceDurationCfg: scfg.Opts.ForceDuration, } mp := map[string]interface{}{ utils.EnabledCfg: scfg.Enabled, @@ -364,14 +460,30 @@ func (SessionSCfg) SName() string { return SessionSJSON } func (scfg SessionSCfg) CloneSection() Section { return scfg.Clone() } func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) { + var acntS []*utils.DynamicBoolOpt + if sesOpts.Accounts != nil { + acntS = utils.CloneDynamicBoolOpt(sesOpts.Accounts) + } var attrS []*utils.DynamicBoolOpt if sesOpts.Attributes != nil { attrS = utils.CloneDynamicBoolOpt(sesOpts.Attributes) } + var cdrS []*utils.DynamicBoolOpt + if sesOpts.CDRs != nil { + cdrS = utils.CloneDynamicBoolOpt(sesOpts.CDRs) + } var chrgS []*utils.DynamicBoolOpt if sesOpts.Chargers != nil { chrgS = utils.CloneDynamicBoolOpt(sesOpts.Chargers) } + var reS []*utils.DynamicBoolOpt + if sesOpts.Resources != nil { + reS = utils.CloneDynamicBoolOpt(sesOpts.Resources) + } + var rouS []*utils.DynamicBoolOpt + if sesOpts.Routes != nil { + rouS = utils.CloneDynamicBoolOpt(sesOpts.Routes) + } var stS []*utils.DynamicBoolOpt if sesOpts.Stats != nil { stS = utils.CloneDynamicBoolOpt(sesOpts.Stats) @@ -396,15 +508,79 @@ func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) { if sesOpts.Message != nil { msg = utils.CloneDynamicBoolOpt(sesOpts.Message) } + var attrDerivedReply []*utils.DynamicBoolOpt + if sesOpts.AttributesDerivedReply != nil { + attrDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.AttributesDerivedReply) + } + var blockerErr []*utils.DynamicBoolOpt + if sesOpts.BlockerError != nil { + blockerErr = utils.CloneDynamicBoolOpt(sesOpts.BlockerError) + } + var cdrsDerivedReply []*utils.DynamicBoolOpt + if sesOpts.CDRsDerivedReply != nil { + cdrsDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.CDRsDerivedReply) + } + var resAuthorize []*utils.DynamicBoolOpt + if sesOpts.ResourcesAuthorize != nil { + resAuthorize = utils.CloneDynamicBoolOpt(sesOpts.ResourcesAuthorize) + } + var resAllocate []*utils.DynamicBoolOpt + if sesOpts.ResourcesAllocate != nil { + resAllocate = utils.CloneDynamicBoolOpt(sesOpts.ResourcesAllocate) + } + var resRelease []*utils.DynamicBoolOpt + if sesOpts.ResourcesRelease != nil { + resRelease = utils.CloneDynamicBoolOpt(sesOpts.ResourcesRelease) + } + var resDerivedReply []*utils.DynamicBoolOpt + if sesOpts.ResourcesDerivedReply != nil { + resDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.ResourcesDerivedReply) + } + var rouDerivedReply []*utils.DynamicBoolOpt + if sesOpts.RoutesDerivedReply != nil { + rouDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.RoutesDerivedReply) + } + var stsDerivedReply []*utils.DynamicBoolOpt + if sesOpts.StatsDerivedReply != nil { + stsDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.StatsDerivedReply) + } + var thdsDerivedReply []*utils.DynamicBoolOpt + if sesOpts.ThresholdsDerivedReply != nil { + thdsDerivedReply = utils.CloneDynamicBoolOpt(sesOpts.ThresholdsDerivedReply) + } + var maxUsage []*utils.DynamicBoolOpt + if sesOpts.MaxUsage != nil { + maxUsage = utils.CloneDynamicBoolOpt(sesOpts.MaxUsage) + } + var forceDuration []*utils.DynamicBoolOpt + if sesOpts.ForceDuration != nil { + forceDuration = utils.CloneDynamicBoolOpt(sesOpts.ForceDuration) + } return &SessionsOpts{ - Attributes: attrS, - Chargers: chrgS, - Stats: stS, - Thresholds: thdS, - Initiate: initS, - Update: updS, - Terminate: termS, - Message: msg, + Accounts: acntS, + Attributes: attrS, + CDRs: cdrS, + Chargers: chrgS, + Resources: reS, + Routes: rouS, + Stats: stS, + Thresholds: thdS, + Initiate: initS, + Update: updS, + Terminate: termS, + Message: msg, + AttributesDerivedReply: attrDerivedReply, + BlockerError: blockerErr, + CDRsDerivedReply: cdrsDerivedReply, + ResourcesAuthorize: resAuthorize, + ResourcesAllocate: resAllocate, + ResourcesRelease: resRelease, + ResourcesDerivedReply: resDerivedReply, + RoutesDerivedReply: rouDerivedReply, + StatsDerivedReply: stsDerivedReply, + ThresholdsDerivedReply: thdsDerivedReply, + MaxUsage: maxUsage, + ForceDuration: forceDuration, } } @@ -575,14 +751,30 @@ func diffSTIRJsonCfg(d *STIRJsonCfg, v1, v2 *STIRcfg) *STIRJsonCfg { } type SessionsOptsJson struct { - Attributes []*utils.DynamicBoolOpt `json:"*attributeS"` - Chargers []*utils.DynamicBoolOpt `json:"*chargerS"` - Stats []*utils.DynamicBoolOpt `json:"*statS"` - Thresholds []*utils.DynamicBoolOpt `json:"*thresholdS"` - Initiate []*utils.DynamicBoolOpt `json:"*initiate"` - Update []*utils.DynamicBoolOpt `json:"*update"` - Terminate []*utils.DynamicBoolOpt `json:"*terminate"` - Message []*utils.DynamicBoolOpt `json:"*message"` + Accounts []*utils.DynamicBoolOpt `json:"*accountS"` + Attributes []*utils.DynamicBoolOpt `json:"*attributeS"` + CDRs []*utils.DynamicBoolOpt `json:"*cdrS"` + Chargers []*utils.DynamicBoolOpt `json:"*chargerS"` + Resources []*utils.DynamicBoolOpt `json:"*resourceS"` + Routes []*utils.DynamicBoolOpt `json:"*routeS"` + Stats []*utils.DynamicBoolOpt `json:"*statS"` + Thresholds []*utils.DynamicBoolOpt `json:"*thresholdS"` + Initiate []*utils.DynamicBoolOpt `json:"*initiate"` + Update []*utils.DynamicBoolOpt `json:"*update"` + Terminate []*utils.DynamicBoolOpt `json:"*terminate"` + Message []*utils.DynamicBoolOpt `json:"*message"` + AttributesDerivedReply []*utils.DynamicBoolOpt `json:"*attributesDerivedReply"` + BlockerError []*utils.DynamicBoolOpt `json:"*blockerError"` + CDRsDerivedReply []*utils.DynamicBoolOpt `json:"*cdrsDerivedReply"` + ResourcesAuthorize []*utils.DynamicBoolOpt `json:"*resourcesAuthorize"` + ResourcesAllocate []*utils.DynamicBoolOpt `json:"*resourcesAllocate"` + ResourcesRelease []*utils.DynamicBoolOpt `json:"*resourcesRelease"` + ResourcesDerivedReply []*utils.DynamicBoolOpt `json:"*resourcesDerivedReply"` + RoutesDerivedReply []*utils.DynamicBoolOpt `json:"*routesDerivedReply"` + StatsDerivedReply []*utils.DynamicBoolOpt `json:"*statsDerivedReply"` + ThresholdsDerivedReply []*utils.DynamicBoolOpt `json:"*thresholdsDerivedReply"` + MaxUsage []*utils.DynamicBoolOpt `json:"*maxUsage"` + ForceDuration []*utils.DynamicBoolOpt `json:"*forceDuration"` } // SessionSJsonCfg config section @@ -623,12 +815,24 @@ func diffSessionsOptsJsonCfg(d *SessionsOptsJson, v1, v2 *SessionsOpts) *Session if d == nil { d = new(SessionsOptsJson) } + if !utils.DynamicBoolOptEqual(v1.Accounts, v2.Accounts) { + d.Accounts = v2.Accounts + } if !utils.DynamicBoolOptEqual(v1.Attributes, v2.Attributes) { d.Attributes = v2.Attributes } + if !utils.DynamicBoolOptEqual(v1.CDRs, v2.CDRs) { + d.CDRs = v2.CDRs + } if !utils.DynamicBoolOptEqual(v1.Chargers, v2.Chargers) { d.Chargers = v2.Chargers } + if !utils.DynamicBoolOptEqual(v1.Resources, v2.Resources) { + d.Resources = v2.Resources + } + if !utils.DynamicBoolOptEqual(v1.Routes, v2.Routes) { + d.Routes = v2.Routes + } if !utils.DynamicBoolOptEqual(v1.Stats, v2.Stats) { d.Stats = v2.Stats } @@ -647,6 +851,42 @@ func diffSessionsOptsJsonCfg(d *SessionsOptsJson, v1, v2 *SessionsOpts) *Session if !utils.DynamicBoolOptEqual(v1.Message, v2.Message) { d.Message = v2.Message } + if !utils.DynamicBoolOptEqual(v1.AttributesDerivedReply, v2.AttributesDerivedReply) { + d.AttributesDerivedReply = v2.AttributesDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.BlockerError, v2.BlockerError) { + d.BlockerError = v2.BlockerError + } + if !utils.DynamicBoolOptEqual(v1.CDRsDerivedReply, v2.CDRsDerivedReply) { + d.CDRsDerivedReply = v2.CDRsDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.ResourcesAuthorize, v2.ResourcesAuthorize) { + d.ResourcesAuthorize = v2.ResourcesAuthorize + } + if !utils.DynamicBoolOptEqual(v1.ResourcesAllocate, v2.ResourcesAllocate) { + d.ResourcesAllocate = v2.ResourcesAllocate + } + if !utils.DynamicBoolOptEqual(v1.ResourcesRelease, v2.ResourcesRelease) { + d.ResourcesRelease = v2.ResourcesRelease + } + if !utils.DynamicBoolOptEqual(v1.ResourcesDerivedReply, v2.ResourcesDerivedReply) { + d.ResourcesDerivedReply = v2.ResourcesDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.RoutesDerivedReply, v2.RoutesDerivedReply) { + d.RoutesDerivedReply = v2.RoutesDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.StatsDerivedReply, v2.StatsDerivedReply) { + d.StatsDerivedReply = v2.StatsDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.ThresholdsDerivedReply, v2.ThresholdsDerivedReply) { + d.ThresholdsDerivedReply = v2.ThresholdsDerivedReply + } + if !utils.DynamicBoolOptEqual(v1.MaxUsage, v2.MaxUsage) { + d.MaxUsage = v2.MaxUsage + } + if !utils.DynamicBoolOptEqual(v1.ForceDuration, v2.ForceDuration) { + d.ForceDuration = v2.ForceDuration + } return d } diff --git a/sessions/sessions.go b/sessions/sessions.go index 5f20d313d..a2396fab5 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -1573,9 +1573,22 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } - if !(attrS || utils.OptAsBool(args.APIOpts, utils.OptsSesMaxUsage) || - utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAuthorize) || - utils.OptAsBool(args.APIOpts, utils.OptsRouteS)) { + var routeS bool + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Routes, + config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { + return + } + var maxUsage bool + if maxUsage, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.MaxUsage, + config.SessionsMaxUsageDftOpt, utils.OptsSesMaxUsage); err != nil { + return + } + var resAuthorize bool + if resAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesAuthorize, + config.SessionsResourcesAuthorizeDftOpt, utils.OptsSesResourceSAuthorize); err != nil { + return + } + if !(attrS || maxUsage || resAuthorize || routeS) { return // Nothing to do } if args.APIOpts == nil { @@ -1612,14 +1625,8 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, runEvents[utils.MetaRaw] = args } var acntS bool - if v, has := args.APIOpts[utils.OptsAccountS]; !has { - /* - if acntS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.CGREvent.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if acntS, err = utils.IfaceAsBool(v); err != nil { + if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Accounts, + config.SessionsAccountsDftOpt, utils.OptsAccountS); err != nil { return } if acntS { @@ -1645,7 +1652,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, } authReply.ResourceAllocation = &allocMsg } - if utils.OptAsBool(args.APIOpts, utils.OptsRouteS) { + if routeS { routesReply, err := sS.getRoutes(ctx, args.Clone()) if err != nil { return err @@ -1670,14 +1677,8 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, authReply.ThresholdIDs = &tIDs } var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.CGREvent.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { @@ -1713,25 +1714,29 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, if attrS && initAuthRply.Attributes != nil { authReply.AttributesDigest = utils.StringPointer(initAuthRply.Attributes.Digest()) } - if utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAuthorize) { + var resourcesAuthorize bool + if resourcesAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesAuthorize, + config.SessionsResourcesAuthorizeDftOpt, utils.OptsSesResourceSAuthorize); err != nil { + return + } + if resourcesAuthorize { authReply.ResourceAllocation = initAuthRply.ResourceAllocation } var acntS bool - if v, has := args.APIOpts[utils.OptsAccountS]; !has { - /* - if acntS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.CGREvent.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if acntS, err = utils.IfaceAsBool(v); err != nil { + if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Accounts, + config.SessionsAccountsDftOpt, utils.OptsAccountS); err != nil { return } if acntS { maxDur, _ := initAuthRply.MaxUsage.Duration() authReply.MaxUsage = maxDur.Seconds() } - if utils.OptAsBool(args.APIOpts, utils.OptsRouteS) { + var routeS bool + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Routes, + config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { + return + } + if routeS { authReply.RoutesDigest = utils.StringPointer(initAuthRply.RouteProfiles.Digest()) } var thdS bool @@ -1744,14 +1749,8 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, strings.Join(*initAuthRply.ThresholdIDs, utils.FieldsSep)) } var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.CGREvent.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { @@ -1809,8 +1808,12 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, config.SessionsInitiateDftOpt, utils.OptsSesInitiate); err != nil { return } - resS := utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAllocate) - if !(attrS || initS || resS) { + var resourcesAllocate bool + if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesAllocate, + config.SessionsResourcesAllocateDftOpt, utils.OptsSesResourceSAllocate); err != nil { + return + } + if !(attrS || initS || resourcesAllocate) { return // nothing to do } originID, _ := args.FieldAsString(utils.OriginID) @@ -1823,7 +1826,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, return utils.NewErrAttributeS(err) } } - if resS { + if resourcesAllocate { if len(sS.cgrCfg.SessionSCfg().ResourceSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } @@ -1848,8 +1851,13 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, return err //utils.NewErrRALs(err) } } + var forceDuration bool + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ForceDuration, + config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { + return err + } s, err := sS.initSession(ctx, args, sS.biJClntID(ctx.Client), originID, dbtItvl, - false, utils.OptAsBool(args.APIOpts, utils.OptsSesForceDuration)) + false, forceDuration) if err != nil { return err } @@ -1891,14 +1899,8 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, rply.ThresholdIDs = &tIDs } var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { @@ -2021,8 +2023,13 @@ func (sS *SessionS) BiRPCv1UpdateSession(ctx *context.Context, ev.GetStringIgnoreErrors(utils.OriginID), ev.GetStringIgnoreErrors(utils.OriginHost)) if s == nil { + var forceDuration bool + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ForceDuration, + config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { + return + } if s, err = sS.initSession(ctx, args, sS.biJClntID(ctx.Client), ev.GetStringIgnoreErrors(utils.OriginID), - dbtItvl, false, utils.OptAsBool(args.APIOpts, utils.OptsSesForceDuration)); err != nil { + dbtItvl, false, forceDuration); err != nil { return err } } @@ -2078,13 +2085,17 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, nil, true, utils.NonTransactional) } // end of RPC caching - resS := utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSRelease) + var resourcesRelease bool + if resourcesRelease, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesRelease, + config.SessionsResourcesReleaseDftOpt, utils.OptsSesResourceSRelease); err != nil { + return + } var termS bool if termS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Terminate, config.SessionsTerminateDftOpt, utils.OptsSesTerminate); err != nil { return } - if !(resS || termS) { + if !(resourcesRelease || termS) { return // nothing to do } @@ -2105,6 +2116,11 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, var s *Session fib := utils.FibDuration(time.Millisecond) var isMsg bool // one time charging, do not perform indexing and sTerminator + var forceDuration bool + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ForceDuration, + config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { + return + } for i := 0; i < sS.cgrCfg.SessionSCfg().TerminateAttempts; i++ { if s = sS.getRelocateSession(ctx, cgrID, ev.GetStringIgnoreErrors(utils.InitialOriginID), @@ -2118,7 +2134,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, } isMsg = true if s, err = sS.initSession(ctx, args, sS.biJClntID(ctx.Client), ev.GetStringIgnoreErrors(utils.OriginID), - dbtItvl, isMsg, utils.OptAsBool(args.APIOpts, utils.OptsSesForceDuration)); err != nil { + dbtItvl, isMsg, forceDuration); err != nil { return err //utils.NewErrRALs(err) } if _, err = sS.updateSession(ctx, s, ev, opts, isMsg); err != nil { @@ -2140,7 +2156,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, return err //utils.NewErrRALs(err) } } - if resS { + if resourcesRelease { if len(sS.cgrCfg.SessionSCfg().ResourceSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } @@ -2171,14 +2187,8 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, } } var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { @@ -2292,7 +2302,12 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, return utils.NewErrAttributeS(err) } } - if utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSAllocate) { + var resourcesAllocate bool + if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesAllocate, + config.SessionsResourcesAllocateDftOpt, utils.OptsSesResourceSAllocate); err != nil { + return + } + if resourcesAllocate { if len(sS.cgrCfg.SessionSCfg().ResourceSConns) == 0 { return utils.NewErrNotConnected(utils.ResourceS) } @@ -2308,7 +2323,12 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, } rply.ResourceAllocation = &allocMessage } - if utils.OptAsBool(args.APIOpts, utils.OptsRouteS) { + var routeS bool + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Routes, + config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { + return + } + if routeS { routesReply, err := sS.getRoutes(ctx, args.Clone()) if err != nil { return err @@ -2323,8 +2343,13 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, return } if message { + var forceDuration bool + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ForceDuration, + config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { + return + } var maxUsage time.Duration - if maxUsage, err = sS.chargeEvent(ctx, args, utils.OptAsBool(args.APIOpts, utils.OptsSesForceDuration)); err != nil { + if maxUsage, err = sS.chargeEvent(ctx, args, forceDuration); err != nil { return err } rply.MaxUsage = &maxUsage @@ -2345,14 +2370,8 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, rply.ThresholdIDs = &tIDs } var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { @@ -2410,7 +2429,11 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, } // end of RPC caching - blockError := utils.OptAsBool(args.APIOpts, utils.OptsSesBlockerError) + var blockError bool + if blockError, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.BlockerError, + config.SessionsBlockerErrorDftOpt, utils.OptsSesBlockerError); err != nil { + return + } events := map[string]*utils.CGREvent{ utils.MetaRaw: args, } @@ -2437,8 +2460,12 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, } if attrS { rply.Attributes = make(map[string]*engine.AttrSProcessEventReply) - - for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesAttributeSDerivedReply)) { + var attrsDerivedReply bool + if attrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.AttributesDerivedReply, + config.SessionsAttributesDerivedReplyDftOpt, utils.OptsSesAttributeSDerivedReply); err != nil { + return + } + for runID, cgrEv := range getDerivedEvents(events, attrsDerivedReply) { rplyAttr, err := sS.processAttributes(ctx, cgrEv) if err != nil { if err.Error() != utils.ErrNotFound.Error() { @@ -2453,10 +2480,20 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, } // get routes if required - if utils.OptAsBool(args.APIOpts, utils.OptsRouteS) { + var routeS bool + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Routes, + config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { + return + } + if routeS { + var routesDerivedReply bool + if routesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.RoutesDerivedReply, + config.SessionsRoutesDerivedReplyDftOpt, utils.OptsSesRouteSDerivedReply); err != nil { + return + } rply.RouteProfiles = make(map[string]engine.SortedRoutesList) // check in case we have options for suppliers - for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesRouteSDerivedReply)) { + for runID, cgrEv := range getDerivedEvents(events, routesDerivedReply) { routesReply, err := sS.getRoutes(ctx, cgrEv.Clone()) if err != nil { return err @@ -2474,8 +2511,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, return } if thdS { + var thdsDerivedReply bool + if thdsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ThresholdsDerivedReply, + config.SessionsThresholdsDerivedReplyDftOpt, utils.OptsSesThresholdSDerivedReply); err != nil { + return + } rply.ThresholdIDs = make(map[string][]string) - for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesThresholdSDerivedReply)) { + for runID, cgrEv := range getDerivedEvents(events, thdsDerivedReply) { tIDs, err := sS.processThreshold(ctx, cgrEv, true) if err != nil && err.Error() != utils.ErrNotFound.Error() { if blockError { @@ -2492,19 +2534,18 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // process stats if required var stS bool - if v, has := args.APIOpts[utils.OptsStatS]; !has { - /* - if stS, err = engine.FilterBoolCfgOpts(ctx, args.Tenant, args.AsDataProvider(), sS.filterS, - sS.cgrCfg.CdrsCfg().Opts.Stats); err != nil { - return - } - */ - } else if stS, err = utils.IfaceAsBool(v); err != nil { + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.Stats, + config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { + var stsDerivedReply bool + if stsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.StatsDerivedReply, + config.SessionsStatsDerivedReplyDftOpt, utils.OptsSesStatSDerivedReply); err != nil { + return + } rply.StatQueueIDs = make(map[string][]string) - for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesStatSDerivedReply)) { + for runID, cgrEv := range getDerivedEvents(events, stsDerivedReply) { sIDs, err := sS.processStats(ctx, cgrEv, true) if err != nil && err.Error() != utils.ErrNotFound.Error() { @@ -2593,8 +2634,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, default: return fmt.Errorf("unsuported value for %s option: %q ", utils.OptsResourceS, optStr) } + var resourcesDerivedReply bool + if resourcesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.ResourcesDerivedReply, + config.SessionsResourcesDerivedReplyDftOpt, utils.OptsSesResourceSDerivedReply); err != nil { + return + } rply.ResourceAllocation = make(map[string]string) - for runID, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesResourceSDerivedReply)) { + for runID, cgrEv := range getDerivedEvents(events, resourcesDerivedReply) { originID := engine.MapEvent(cgrEv.Event).GetStringIgnoreErrors(utils.OriginID) if originID == "" { return utils.NewErrMandatoryIeMissing(utils.OriginID) @@ -2757,12 +2803,22 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // } // } - if utils.OptAsBool(args.APIOpts, utils.OptsCDRs) { + var cdrS bool + if cdrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.CDRs, + config.SessionsCDRsDftOpt, utils.OptsCDRs); err != nil { + return + } + if cdrS { if len(sS.cgrCfg.SessionSCfg().CDRsConns) == 0 { return utils.NewErrNotConnected(utils.CDRs) } + var cdrsDerivedReply bool + if cdrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.filterS, sS.cgrCfg.SessionSCfg().Opts.CDRsDerivedReply, + config.SessionsCDRsDerivedReplyDftOpt, utils.OptsSesCDRsDerivedReply); err != nil { + return + } var cdrRply string - for _, cgrEv := range getDerivedEvents(events, utils.OptAsBool(args.APIOpts, utils.OptsSesCDRsDerivedReply)) { + for _, cgrEv := range getDerivedEvents(events, cdrsDerivedReply) { if err := sS.processCDR(ctx, cgrEv, &cdrRply); err != nil { if blockError { return utils.NewErrCDRS(err) diff --git a/utils/consts.go b/utils/consts.go index 1c6b221a0..7e4f71709 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -1944,7 +1944,10 @@ const ( // CdrsCfg MetaAccountSCfg = "*accountS" MetaAttributeSCfg = "*attributeS" + MetaCDRsCfg = "*cdrS" MetaChargerSCfg = "*chargerS" + MetaResourceSCfg = "*resourceS" + MetaRouteSCfg = "*routeS" MetaEeSCfg = "*eeS" MetaRateSCfg = "*rateS" MetaStatSCfg = "*statS" @@ -1995,6 +1998,20 @@ const ( MetaUsageTTLCfg = "*usageTTL" MetaUnitsCfg = "*units" + // SessionsCfg + MetaAttributesDerivedReplyCfg = "*attributesDerivedReply" + MetaBlockerErrorCfg = "*blockerError" + MetaCDRsDerivedReplyCfg = "*cdrsDerivedReply" + MetaResourcesAuthorizeCfg = "*resourcesAuthorize" + MetaResourcesAllocateCfg = "*resourcesAllocate" + MetaResourcesReleaseCfg = "*resourcesRelease" + MetaResourcesDerivedReplyCfg = "*resourcesDerivedReply" + MetaRoutesDerivedReplyCfg = "*routesDerivedReply" + MetaStatsDerivedReplyCfg = "*statsDerivedReply" + MetaThresholdsDerivedReplyCfg = "*thresholdsDerivedReply" + MetaMaxUsageCfg = "*maxUsage" + MetaForceDurationCfg = "*forceDuration" + // AnalyzerSCfg CleanupIntervalCfg = "cleanup_interval" IndexTypeCfg = "index_type" @@ -2179,6 +2196,7 @@ var CGROptionsSet = NewStringSet([]string{OptsRatesRateProfileIDs, OptsRatesStar const ( //CDRS and Sessions Opts + OptsAccountS = "*accountS" OptsCDRs = "*cdrS" OptsRouteS = "*routeS" OptsResourceS = "*resourceS" @@ -2219,7 +2237,6 @@ const ( // Accounts OptsAccountsUsage = "*accountsUsage" - OptsAccountS = "*accountS" OptsAccountsAccountIDs = "*accountIDs" // Actions