mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add opts for sessions subsystem (cont.)
This commit is contained in:
committed by
Dan Christian Bogos
parent
a4caeb1e38
commit
428a63eb5b
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
// },
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user