Add opts for sessions subsystem (cont.)

This commit is contained in:
ionutboangiu
2021-10-15 17:30:49 +03:00
committed by Dan Christian Bogos
parent a4caeb1e38
commit 428a63eb5b
5 changed files with 582 additions and 141 deletions

View File

@@ -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),

View File

@@ -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,
// },
],
},
},

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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