add ips flags to sessions cfg

This commit is contained in:
ionutboangiu
2025-05-30 19:23:21 +03:00
committed by Dan Christian Bogos
parent c031366a98
commit 132a23144a
9 changed files with 195 additions and 11 deletions

View File

@@ -148,6 +148,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) {
CDRs: []*DynamicBoolOpt{{value: SessionsCDRsDftOpt}},
Chargers: []*DynamicBoolOpt{{value: SessionsChargersDftOpt}},
Resources: []*DynamicBoolOpt{{value: SessionsResourcesDftOpt}},
IPs: []*DynamicBoolOpt{{value: SessionsIPsDftOpt}},
Routes: []*DynamicBoolOpt{{value: SessionsRoutesDftOpt}},
Stats: []*DynamicBoolOpt{{value: SessionsStatsDftOpt}},
Thresholds: []*DynamicBoolOpt{{value: SessionsThresholdsDftOpt}},
@@ -162,6 +163,9 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) {
ResourcesAllocate: []*DynamicBoolOpt{{value: SessionsResourcesAllocateDftOpt}},
ResourcesRelease: []*DynamicBoolOpt{{value: SessionsResourcesReleaseDftOpt}},
ResourcesDerivedReply: []*DynamicBoolOpt{{value: SessionsResourcesDerivedReplyDftOpt}},
IPsAuthorize: []*DynamicBoolOpt{{value: SessionsIPsAuthorizeDftOpt}},
IPsAllocate: []*DynamicBoolOpt{{value: SessionsIPsAllocateDftOpt}},
IPsRelease: []*DynamicBoolOpt{{value: SessionsIPsReleaseDftOpt}},
RoutesDerivedReply: []*DynamicBoolOpt{{value: SessionsRoutesDerivedReplyDftOpt}},
StatsDerivedReply: []*DynamicBoolOpt{{value: SessionsStatsDerivedReplyDftOpt}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{value: SessionsThresholdsDerivedReplyDftOpt}},

View File

@@ -661,6 +661,7 @@ const CGRATES_CFG_JSON = `
"chargers_conns": [], // connections to ChargerS for session forking <""|*internal|$rpc_conns_id>
"cdrs_conns": [], // connections to CDRs for CDR posting <""|*internal|$rpc_conns_id>
"resources_conns": [], // connections to ResourceS for resources monitoring <""|*internal|$rpc_conns_id>
"ips_conns": [], // connections to IPs for monitoring ip usage <""|*internal|$rpc_conns_id>
"thresholds_conns": [], // connections to ThresholdS for reporting session events <""|*internal|$rpc_conns_id>
"stats_conns": [], // connections to StatS for reporting session events <""|*internal|$rpc_conns_id>
"routes_conns": [], // connections to RouteS for querying routes for event <""|*internal|$rpc_conns_id>
@@ -731,6 +732,13 @@ const CGRATES_CFG_JSON = `
// "Value": false
// }
// ],
// "*ips": [
// {
// "Tenant": "*any",
// "FilterIDs": [],
// "Value": false
// }
// ],
// "*routes": [
// {
// "Tenant": "*any",
@@ -829,6 +837,27 @@ const CGRATES_CFG_JSON = `
// "Value": false
// }
// ],
// "*ipsAuthorize": [
// {
// "Tenant": "*any",
// "FilterIDs": [],
// "Value": false
// }
// ],
// "*ipsAllocate": [
// {
// "Tenant": "*any",
// "FilterIDs": [],
// "Value": false
// }
// ],
// "*ipsRelease": [
// {
// "Tenant": "*any",
// "FilterIDs": [],
// "Value": false
// }
// ],
// "*routesDerivedReply": [
// {
// "Tenant": "*any",

View File

@@ -783,6 +783,7 @@ func testCGRConfigReloadConfigFromJSONSessionS(t *testing.T) {
"sessions": map[string]any{
"enabled": true,
"resources_conns": []string{"*localhost"},
"ips_conns": []string{"*localhost"},
"routes_conns": []string{"*localhost"},
"attributes_conns": []string{"*localhost"},
"cdrs_conns": []string{"*internal"},
@@ -799,6 +800,7 @@ func testCGRConfigReloadConfigFromJSONSessionS(t *testing.T) {
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)},
ResourceSConns: []string{utils.MetaLocalHost},
IPsConns: []string{utils.MetaLocalHost},
ThresholdSConns: []string{},
StatSConns: []string{},
AccountSConns: []string{},
@@ -830,6 +832,7 @@ func testCGRConfigReloadConfigFromJSONSessionS(t *testing.T) {
CDRs: []*DynamicBoolOpt{{}},
Chargers: []*DynamicBoolOpt{{}},
Resources: []*DynamicBoolOpt{{}},
IPs: []*DynamicBoolOpt{{}},
Routes: []*DynamicBoolOpt{{}},
Stats: []*DynamicBoolOpt{{}},
Thresholds: []*DynamicBoolOpt{{}},
@@ -844,6 +847,9 @@ func testCGRConfigReloadConfigFromJSONSessionS(t *testing.T) {
ResourcesAllocate: []*DynamicBoolOpt{{}},
ResourcesRelease: []*DynamicBoolOpt{{}},
ResourcesDerivedReply: []*DynamicBoolOpt{{}},
IPsAuthorize: []*DynamicBoolOpt{{}},
IPsAllocate: []*DynamicBoolOpt{{}},
IPsRelease: []*DynamicBoolOpt{{}},
RoutesDerivedReply: []*DynamicBoolOpt{{}},
StatsDerivedReply: []*DynamicBoolOpt{{}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{}},
@@ -872,14 +878,17 @@ func testCGRConfigReloadConfigFromStringSessionS(t *testing.T) {
cfg.CdrsCfg().Enabled = true
var reply string
if err := cfg.V1SetConfigFromJSON(context.Background(), &SetConfigFromJSONArgs{
Config: `{"sessions":{
"enabled": true,
"resources_conns": ["*localhost"],
"routes_conns": ["*localhost"],
"attributes_conns": ["*localhost"],
"cdrs_conns": ["*internal"],
"chargers_conns": ["*localhost"]
}}`}, &reply); err != nil {
Config: `{
"sessions": {
"enabled": true,
"resources_conns": ["*localhost"],
"ips_conns": ["*localhost"],
"routes_conns": ["*localhost"],
"attributes_conns": ["*localhost"],
"cdrs_conns": ["*internal"],
"chargers_conns": ["*localhost"]
}
}`}, &reply); err != nil {
t.Error(err)
} else if reply != utils.OK {
t.Errorf("Expected OK received: %s", reply)
@@ -889,6 +898,7 @@ func testCGRConfigReloadConfigFromStringSessionS(t *testing.T) {
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{utils.MetaLocalHost},
ResourceSConns: []string{utils.MetaLocalHost},
IPsConns: []string{utils.MetaLocalHost},
ThresholdSConns: []string{},
StatSConns: []string{},
AccountSConns: []string{},
@@ -920,6 +930,7 @@ func testCGRConfigReloadConfigFromStringSessionS(t *testing.T) {
CDRs: []*DynamicBoolOpt{{}},
Chargers: []*DynamicBoolOpt{{}},
Resources: []*DynamicBoolOpt{{}},
IPs: []*DynamicBoolOpt{{}},
Routes: []*DynamicBoolOpt{{}},
Stats: []*DynamicBoolOpt{{}},
Thresholds: []*DynamicBoolOpt{{}},
@@ -934,6 +945,9 @@ func testCGRConfigReloadConfigFromStringSessionS(t *testing.T) {
ResourcesAllocate: []*DynamicBoolOpt{{}},
ResourcesRelease: []*DynamicBoolOpt{{}},
ResourcesDerivedReply: []*DynamicBoolOpt{{}},
IPsAuthorize: []*DynamicBoolOpt{{}},
IPsAllocate: []*DynamicBoolOpt{{}},
IPsRelease: []*DynamicBoolOpt{{}},
RoutesDerivedReply: []*DynamicBoolOpt{{}},
StatsDerivedReply: []*DynamicBoolOpt{{}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{}},
@@ -955,7 +969,7 @@ func testCGRConfigReloadConfigFromStringSessionS(t *testing.T) {
}
var rcv string
expected := `{"sessions":{"accounts_conns":[],"actions_conns":[],"alterable_fields":[],"attributes_conns":["*localhost"],"cdrs_conns":["*internal"],"channel_sync_interval":"0","chargers_conns":["*localhost"],"client_protocol":1,"default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":true,"listen_bigob":"","listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*accountsForceUsage":[],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*attributesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*blockerError":[{"FilterIDs":null,"Tenant":""}],"*cdrs":[{"FilterIDs":null,"Tenant":""}],"*cdrsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*chargeable":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*debitInterval":[{"FilterIDs":null,"Tenant":""}],"*forceUsage":[],"*initiate":[{"FilterIDs":null,"Tenant":""}],"*maxUsage":[{"FilterIDs":null,"Tenant":""}],"*message":[{"FilterIDs":null,"Tenant":""}],"*originID":[],"*resources":[{"FilterIDs":null,"Tenant":""}],"*resourcesAllocate":[{"FilterIDs":null,"Tenant":""}],"*resourcesAuthorize":[{"FilterIDs":null,"Tenant":""}],"*resourcesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*resourcesRelease":[{"FilterIDs":null,"Tenant":""}],"*routes":[{"FilterIDs":null,"Tenant":""}],"*routesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*statsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*terminate":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}],"*thresholdsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*ttl":[{"FilterIDs":null,"Tenant":""}],"*ttlLastUsage":[],"*ttlLastUsed":[],"*ttlMaxDelay":[{"FilterIDs":null,"Tenant":""}],"*ttlUsage":[],"*update":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"replication_conns":[],"resources_conns":["*localhost"],"routes_conns":["*localhost"],"session_indexes":[],"stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]}}`
expected := `{"sessions":{"accounts_conns":[],"actions_conns":[],"alterable_fields":[],"attributes_conns":["*localhost"],"cdrs_conns":["*internal"],"channel_sync_interval":"0","chargers_conns":["*localhost"],"client_protocol":1,"default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":true,"ips_conns":["*localhost"],"listen_bigob":"","listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*accountsForceUsage":[],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*attributesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*blockerError":[{"FilterIDs":null,"Tenant":""}],"*cdrs":[{"FilterIDs":null,"Tenant":""}],"*cdrsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*chargeable":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*debitInterval":[{"FilterIDs":null,"Tenant":""}],"*forceUsage":[],"*initiate":[{"FilterIDs":null,"Tenant":""}],"*ips":[{"FilterIDs":null,"Tenant":""}],"*ipsAllocate":[{"FilterIDs":null,"Tenant":""}],"*ipsAuthorize":[{"FilterIDs":null,"Tenant":""}],"*ipsRelease":[{"FilterIDs":null,"Tenant":""}],"*maxUsage":[{"FilterIDs":null,"Tenant":""}],"*message":[{"FilterIDs":null,"Tenant":""}],"*originID":[],"*resources":[{"FilterIDs":null,"Tenant":""}],"*resourcesAllocate":[{"FilterIDs":null,"Tenant":""}],"*resourcesAuthorize":[{"FilterIDs":null,"Tenant":""}],"*resourcesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*resourcesRelease":[{"FilterIDs":null,"Tenant":""}],"*routes":[{"FilterIDs":null,"Tenant":""}],"*routesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*statsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*terminate":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}],"*thresholdsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*ttl":[{"FilterIDs":null,"Tenant":""}],"*ttlLastUsage":[],"*ttlLastUsed":[],"*ttlMaxDelay":[{"FilterIDs":null,"Tenant":""}],"*ttlUsage":[],"*update":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"replication_conns":[],"resources_conns":["*localhost"],"routes_conns":["*localhost"],"session_indexes":[],"stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]}}`
if err := cfg.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Sections: []string{SessionSJSON}}, &rcv); err != nil {
t.Error(err)
} else if expected != rcv {
@@ -982,6 +996,7 @@ func testCGRConfigReloadAll(t *testing.T) {
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)},
ResourceSConns: []string{utils.MetaLocalHost},
IPsConns: []string{},
ThresholdSConns: []string{},
StatSConns: []string{},
AccountSConns: []string{},
@@ -1013,6 +1028,7 @@ func testCGRConfigReloadAll(t *testing.T) {
CDRs: []*DynamicBoolOpt{{}},
Chargers: []*DynamicBoolOpt{{}},
Resources: []*DynamicBoolOpt{{}},
IPs: []*DynamicBoolOpt{{}},
Routes: []*DynamicBoolOpt{{}},
Stats: []*DynamicBoolOpt{{}},
Thresholds: []*DynamicBoolOpt{{}},
@@ -1027,6 +1043,9 @@ func testCGRConfigReloadAll(t *testing.T) {
ResourcesAllocate: []*DynamicBoolOpt{{}},
ResourcesRelease: []*DynamicBoolOpt{{}},
ResourcesDerivedReply: []*DynamicBoolOpt{{}},
IPsAuthorize: []*DynamicBoolOpt{{}},
IPsAllocate: []*DynamicBoolOpt{{}},
IPsRelease: []*DynamicBoolOpt{{}},
RoutesDerivedReply: []*DynamicBoolOpt{{}},
StatsDerivedReply: []*DynamicBoolOpt{{}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{}},

View File

@@ -597,6 +597,7 @@ func TestSmgJsonCfg(t *testing.T) {
Chargers_conns: &[]string{},
Cdrs_conns: &[]string{},
Resources_conns: &[]string{},
IPsConns: &[]string{},
Thresholds_conns: &[]string{},
Stats_conns: &[]string{},
Routes_conns: &[]string{},

File diff suppressed because one or more lines are too long

View File

@@ -155,6 +155,14 @@ func (cfg *CGRConfig) checkConfigSanity() error {
return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID)
}
}
for _, connID := range cfg.sessionSCfg.IPsConns {
if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ipsCfg.Enabled {
return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.IPs, utils.SessionS)
}
if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) {
return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID)
}
}
for _, connID := range cfg.sessionSCfg.ThresholdSConns {
if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled {
return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.SessionS)

View File

@@ -34,6 +34,7 @@ const (
SessionsCDRsDftOpt = false
SessionsChargersDftOpt = false
SessionsResourcesDftOpt = false
SessionsIPsDftOpt = false
SessionsRoutesDftOpt = false
SessionsStatsDftOpt = false
SessionsThresholdsDftOpt = false
@@ -48,6 +49,9 @@ const (
SessionsResourcesAllocateDftOpt = false
SessionsResourcesReleaseDftOpt = false
SessionsResourcesDerivedReplyDftOpt = false
SessionsIPsAuthorizeDftOpt = false
SessionsIPsAllocateDftOpt = false
SessionsIPsReleaseDftOpt = false
SessionsRoutesDerivedReplyDftOpt = false
SessionsStatsDerivedReplyDftOpt = false
SessionsThresholdsDerivedReplyDftOpt = false
@@ -64,6 +68,7 @@ type SessionsOpts struct {
CDRs []*DynamicBoolOpt
Chargers []*DynamicBoolOpt
Resources []*DynamicBoolOpt
IPs []*DynamicBoolOpt
Routes []*DynamicBoolOpt
Stats []*DynamicBoolOpt
Thresholds []*DynamicBoolOpt
@@ -78,6 +83,9 @@ type SessionsOpts struct {
ResourcesAllocate []*DynamicBoolOpt
ResourcesRelease []*DynamicBoolOpt
ResourcesDerivedReply []*DynamicBoolOpt
IPsAuthorize []*DynamicBoolOpt
IPsAllocate []*DynamicBoolOpt
IPsRelease []*DynamicBoolOpt
RoutesDerivedReply []*DynamicBoolOpt
StatsDerivedReply []*DynamicBoolOpt
ThresholdsDerivedReply []*DynamicBoolOpt
@@ -101,6 +109,7 @@ type SessionSCfg struct {
ListenBigob string
ChargerSConns []string
ResourceSConns []string
IPsConns []string
ThresholdSConns []string
StatSConns []string
RouteSConns []string
@@ -160,6 +169,11 @@ func (sesOpts *SessionsOpts) loadFromJSONCfg(jsnCfg *SessionsOptsJson) (err erro
resources, err = IfaceToBoolDynamicOpts(jsnCfg.Resources)
sesOpts.Resources = append(resources, sesOpts.Resources...)
}
if jsnCfg.IPs != nil {
var opt []*DynamicBoolOpt
opt, err = IfaceToBoolDynamicOpts(jsnCfg.IPs)
sesOpts.IPs = append(opt, sesOpts.IPs...)
}
if jsnCfg.Routes != nil {
var routes []*DynamicBoolOpt
routes, err = IfaceToBoolDynamicOpts(jsnCfg.Chargers)
@@ -230,6 +244,21 @@ func (sesOpts *SessionsOpts) loadFromJSONCfg(jsnCfg *SessionsOptsJson) (err erro
resDerivedRpl, err = IfaceToBoolDynamicOpts(jsnCfg.ResourcesDerivedReply)
sesOpts.ResourcesDerivedReply = append(resDerivedRpl, sesOpts.ResourcesDerivedReply...)
}
if jsnCfg.IPsAuthorize != nil {
var opt []*DynamicBoolOpt
opt, err = IfaceToBoolDynamicOpts(jsnCfg.IPsAuthorize)
sesOpts.IPsAuthorize = append(opt, sesOpts.IPsAuthorize...)
}
if jsnCfg.IPsAllocate != nil {
var opt []*DynamicBoolOpt
opt, err = IfaceToBoolDynamicOpts(jsnCfg.IPsAllocate)
sesOpts.IPsAllocate = append(opt, sesOpts.IPsAllocate...)
}
if jsnCfg.IPsRelease != nil {
var opt []*DynamicBoolOpt
opt, err = IfaceToBoolDynamicOpts(jsnCfg.IPsAllocate)
sesOpts.IPsRelease = append(opt, sesOpts.IPsRelease...)
}
if jsnCfg.RoutesDerivedReply != nil {
var routesDerivedRpl []*DynamicBoolOpt
routesDerivedRpl, err = IfaceToBoolDynamicOpts(jsnCfg.RoutesDerivedReply)
@@ -338,6 +367,9 @@ func (scfg *SessionSCfg) loadFromJSONCfg(jsnCfg *SessionSJsonCfg) (err error) {
if jsnCfg.Resources_conns != nil {
scfg.ResourceSConns = updateInternalConns(*jsnCfg.Resources_conns, utils.MetaResources)
}
if jsnCfg.IPsConns != nil {
scfg.IPsConns = updateInternalConns(*jsnCfg.IPsConns, utils.MetaIPs)
}
if jsnCfg.Thresholds_conns != nil {
scfg.ThresholdSConns = updateInternalConns(*jsnCfg.Thresholds_conns, utils.MetaThresholds)
}
@@ -439,6 +471,7 @@ func (scfg SessionSCfg) AsMapInterface() any {
utils.MetaCDRs: scfg.Opts.CDRs,
utils.MetaChargers: scfg.Opts.Chargers,
utils.MetaResources: scfg.Opts.Resources,
utils.MetaIPs: scfg.Opts.IPs,
utils.MetaRoutes: scfg.Opts.Routes,
utils.MetaStats: scfg.Opts.Stats,
utils.MetaThresholds: scfg.Opts.Thresholds,
@@ -453,6 +486,9 @@ func (scfg SessionSCfg) AsMapInterface() any {
utils.MetaResourcesAllocateCfg: scfg.Opts.ResourcesAllocate,
utils.MetaResourcesReleaseCfg: scfg.Opts.ResourcesRelease,
utils.MetaResourcesDerivedReplyCfg: scfg.Opts.ResourcesDerivedReply,
utils.MetaIPsAuthorizeCfg: scfg.Opts.IPsAuthorize,
utils.MetaIPsAllocateCfg: scfg.Opts.IPsAllocate,
utils.MetaIPsReleaseCfg: scfg.Opts.IPsRelease,
utils.MetaRoutesDerivedReplyCfg: scfg.Opts.RoutesDerivedReply,
utils.MetaStatsDerivedReplyCfg: scfg.Opts.StatsDerivedReply,
utils.MetaThresholdsDerivedReplyCfg: scfg.Opts.ThresholdsDerivedReply,
@@ -496,6 +532,9 @@ func (scfg SessionSCfg) AsMapInterface() any {
if scfg.ResourceSConns != nil {
mp[utils.ResourceSConnsCfg] = getInternalJSONConns(scfg.ResourceSConns)
}
if scfg.IPsConns != nil {
mp[utils.IPsConnsCfg] = getInternalJSONConns(scfg.IPsConns)
}
if scfg.ThresholdSConns != nil {
mp[utils.ThresholdSConnsCfg] = getInternalJSONConns(scfg.ThresholdSConns)
}
@@ -547,6 +586,10 @@ func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) {
if sesOpts.Resources != nil {
reS = CloneDynamicBoolOpt(sesOpts.Resources)
}
var ipS []*DynamicBoolOpt
if sesOpts.IPs != nil {
ipS = CloneDynamicBoolOpt(sesOpts.IPs)
}
var rouS []*DynamicBoolOpt
if sesOpts.Routes != nil {
rouS = CloneDynamicBoolOpt(sesOpts.Routes)
@@ -603,6 +646,18 @@ func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) {
if sesOpts.ResourcesDerivedReply != nil {
resDerivedReply = CloneDynamicBoolOpt(sesOpts.ResourcesDerivedReply)
}
var ipAuthorize []*DynamicBoolOpt
if sesOpts.IPsAuthorize != nil {
ipAuthorize = CloneDynamicBoolOpt(sesOpts.IPsAuthorize)
}
var ipAllocate []*DynamicBoolOpt
if sesOpts.IPsAllocate != nil {
ipAllocate = CloneDynamicBoolOpt(sesOpts.IPsAllocate)
}
var ipRelease []*DynamicBoolOpt
if sesOpts.IPsRelease != nil {
ipRelease = CloneDynamicBoolOpt(sesOpts.IPsRelease)
}
var rouDerivedReply []*DynamicBoolOpt
if sesOpts.RoutesDerivedReply != nil {
rouDerivedReply = CloneDynamicBoolOpt(sesOpts.RoutesDerivedReply)
@@ -665,6 +720,7 @@ func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) {
CDRs: cdrS,
Chargers: chrgS,
Resources: reS,
IPs: ipS,
Routes: rouS,
Stats: stS,
Thresholds: thdS,
@@ -679,6 +735,9 @@ func (sesOpts *SessionsOpts) Clone() (cln *SessionsOpts) {
ResourcesAllocate: resAllocate,
ResourcesRelease: resRelease,
ResourcesDerivedReply: resDerivedReply,
IPsAuthorize: ipAuthorize,
IPsAllocate: ipAllocate,
IPsRelease: ipRelease,
RoutesDerivedReply: rouDerivedReply,
StatsDerivedReply: stsDerivedReply,
ThresholdsDerivedReply: thdsDerivedReply,
@@ -722,6 +781,9 @@ func (scfg SessionSCfg) Clone() (cln *SessionSCfg) {
if scfg.ResourceSConns != nil {
cln.ResourceSConns = slices.Clone(scfg.ResourceSConns)
}
if scfg.IPsConns != nil {
cln.IPsConns = slices.Clone(scfg.IPsConns)
}
if scfg.ThresholdSConns != nil {
cln.ThresholdSConns = slices.Clone(scfg.ThresholdSConns)
}
@@ -853,6 +915,7 @@ type SessionsOptsJson struct {
CDRs []*DynamicInterfaceOpt `json:"*cdrs"`
Chargers []*DynamicInterfaceOpt `json:"*chargers"`
Resources []*DynamicInterfaceOpt `json:"*resources"`
IPs []*DynamicInterfaceOpt `json:"*ips"`
Routes []*DynamicInterfaceOpt `json:"*routes"`
Stats []*DynamicInterfaceOpt `json:"*stats"`
Thresholds []*DynamicInterfaceOpt `json:"*thresholds"`
@@ -867,6 +930,9 @@ type SessionsOptsJson struct {
ResourcesAllocate []*DynamicInterfaceOpt `json:"*resourcesAllocate"`
ResourcesRelease []*DynamicInterfaceOpt `json:"*resourcesRelease"`
ResourcesDerivedReply []*DynamicInterfaceOpt `json:"*resourcesDerivedReply"`
IPsAuthorize []*DynamicInterfaceOpt `json:"*ipsAuthorize"`
IPsAllocate []*DynamicInterfaceOpt `json:"*ipsAllocate"`
IPsRelease []*DynamicInterfaceOpt `json:"*ipsRelease"`
RoutesDerivedReply []*DynamicInterfaceOpt `json:"*routesDerivedReply"`
StatsDerivedReply []*DynamicInterfaceOpt `json:"*statsDerivedReply"`
ThresholdsDerivedReply []*DynamicInterfaceOpt `json:"*thresholdsDerivedReply"`
@@ -890,6 +956,7 @@ type SessionSJsonCfg struct {
Listen_bigob *string
Chargers_conns *[]string
Resources_conns *[]string
IPsConns *[]string `json:"ips_conns"`
Thresholds_conns *[]string
Stats_conns *[]string
Routes_conns *[]string
@@ -930,6 +997,9 @@ func diffSessionsOptsJsonCfg(d *SessionsOptsJson, v1, v2 *SessionsOpts) *Session
if !DynamicBoolOptEqual(v1.Resources, v2.Resources) {
d.Resources = BoolToIfaceDynamicOpts(v2.Resources)
}
if !DynamicBoolOptEqual(v1.IPs, v2.IPs) {
d.IPs = BoolToIfaceDynamicOpts(v2.IPs)
}
if !DynamicBoolOptEqual(v1.Routes, v2.Routes) {
d.Routes = BoolToIfaceDynamicOpts(v2.Routes)
}
@@ -972,6 +1042,15 @@ func diffSessionsOptsJsonCfg(d *SessionsOptsJson, v1, v2 *SessionsOpts) *Session
if !DynamicBoolOptEqual(v1.ResourcesDerivedReply, v2.ResourcesDerivedReply) {
d.ResourcesDerivedReply = BoolToIfaceDynamicOpts(v2.ResourcesDerivedReply)
}
if !DynamicBoolOptEqual(v1.IPsAuthorize, v2.IPsAuthorize) {
d.IPsAuthorize = BoolToIfaceDynamicOpts(v2.IPsAuthorize)
}
if !DynamicBoolOptEqual(v1.IPsAllocate, v2.IPsAllocate) {
d.IPsAllocate = BoolToIfaceDynamicOpts(v2.IPsAllocate)
}
if !DynamicBoolOptEqual(v1.IPsRelease, v2.IPsRelease) {
d.IPsRelease = BoolToIfaceDynamicOpts(v2.IPsRelease)
}
if !DynamicBoolOptEqual(v1.RoutesDerivedReply, v2.RoutesDerivedReply) {
d.RoutesDerivedReply = BoolToIfaceDynamicOpts(v2.RoutesDerivedReply)
}
@@ -1036,6 +1115,9 @@ func diffSessionSJsonCfg(d *SessionSJsonCfg, v1, v2 *SessionSCfg) *SessionSJsonC
if !slices.Equal(v1.ResourceSConns, v2.ResourceSConns) {
d.Resources_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ResourceSConns))
}
if !slices.Equal(v1.IPsConns, v2.IPsConns) {
d.IPsConns = utils.SliceStringPointer(getInternalJSONConns(v2.IPsConns))
}
if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) {
d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns))
}

View File

@@ -68,6 +68,7 @@ func TestSessionSCfgloadFromJsonCfgCase1(t *testing.T) {
Listen_bijson: utils.StringPointer("127.0.0.1:2018"),
Chargers_conns: &[]string{utils.MetaInternal, "*conn1"},
Resources_conns: &[]string{utils.MetaInternal, "*conn1"},
IPsConns: &[]string{utils.MetaInternal, "*conn1"},
Thresholds_conns: &[]string{utils.MetaInternal, "*conn1"},
Stats_conns: &[]string{utils.MetaInternal, "*conn1"},
Routes_conns: &[]string{utils.MetaInternal, "*conn1"},
@@ -104,6 +105,7 @@ func TestSessionSCfgloadFromJsonCfgCase1(t *testing.T) {
ListenBijson: "127.0.0.1:2018",
ChargerSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers), "*conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "*conn1"},
IPsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaIPs), "*conn1"},
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"},
RouteSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRoutes), "*conn1"},
@@ -139,6 +141,7 @@ func TestSessionSCfgloadFromJsonCfgCase1(t *testing.T) {
CDRs: []*DynamicBoolOpt{{}},
Chargers: []*DynamicBoolOpt{{}},
Resources: []*DynamicBoolOpt{{}},
IPs: []*DynamicBoolOpt{{}},
Routes: []*DynamicBoolOpt{{}},
Stats: []*DynamicBoolOpt{{}},
Thresholds: []*DynamicBoolOpt{{}},
@@ -153,6 +156,9 @@ func TestSessionSCfgloadFromJsonCfgCase1(t *testing.T) {
ResourcesAllocate: []*DynamicBoolOpt{{}},
ResourcesRelease: []*DynamicBoolOpt{{}},
ResourcesDerivedReply: []*DynamicBoolOpt{{}},
IPsAuthorize: []*DynamicBoolOpt{{}},
IPsAllocate: []*DynamicBoolOpt{{}},
IPsRelease: []*DynamicBoolOpt{{}},
RoutesDerivedReply: []*DynamicBoolOpt{{}},
StatsDerivedReply: []*DynamicBoolOpt{{}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{}},
@@ -338,6 +344,7 @@ func TestSessionSCfgloadFromJsonCfgCase10(t *testing.T) {
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{},
ResourceSConns: []string{},
IPsConns: []string{},
ThresholdSConns: []string{},
StatSConns: []string{},
RouteSConns: []string{},
@@ -373,6 +380,7 @@ func TestSessionSCfgloadFromJsonCfgCase10(t *testing.T) {
CDRs: []*DynamicBoolOpt{{}},
Chargers: []*DynamicBoolOpt{{}},
Resources: []*DynamicBoolOpt{{}},
IPs: []*DynamicBoolOpt{{}},
Routes: []*DynamicBoolOpt{{}},
Stats: []*DynamicBoolOpt{{}},
Thresholds: []*DynamicBoolOpt{{}},
@@ -387,6 +395,9 @@ func TestSessionSCfgloadFromJsonCfgCase10(t *testing.T) {
ResourcesAllocate: []*DynamicBoolOpt{{}},
ResourcesRelease: []*DynamicBoolOpt{{}},
ResourcesDerivedReply: []*DynamicBoolOpt{{}},
IPsAuthorize: []*DynamicBoolOpt{{}},
IPsAllocate: []*DynamicBoolOpt{{}},
IPsRelease: []*DynamicBoolOpt{{}},
RoutesDerivedReply: []*DynamicBoolOpt{{}},
StatsDerivedReply: []*DynamicBoolOpt{{}},
ThresholdsDerivedReply: []*DynamicBoolOpt{{}},
@@ -498,6 +509,7 @@ func TestSessionSCfgAsMapInterfaceCase1(t *testing.T) {
utils.ChargerSConnsCfg: []string{},
utils.CDRsConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.IPsConnsCfg: []string{},
utils.ThresholdSConnsCfg: []string{},
utils.StatSConnsCfg: []string{},
utils.RouteSConnsCfg: []string{},
@@ -532,6 +544,7 @@ func TestSessionSCfgAsMapInterfaceCase1(t *testing.T) {
utils.MetaCDRs: []*DynamicBoolOpt{{}},
utils.MetaChargers: []*DynamicBoolOpt{{}},
utils.MetaResources: []*DynamicBoolOpt{{}},
utils.MetaIPs: []*DynamicBoolOpt{{}},
utils.MetaRoutes: []*DynamicBoolOpt{{}},
utils.MetaStats: []*DynamicBoolOpt{{}},
utils.MetaThresholds: []*DynamicBoolOpt{{}},
@@ -546,6 +559,9 @@ func TestSessionSCfgAsMapInterfaceCase1(t *testing.T) {
utils.MetaResourcesAllocateCfg: []*DynamicBoolOpt{{}},
utils.MetaResourcesReleaseCfg: []*DynamicBoolOpt{{}},
utils.MetaResourcesDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsAuthorizeCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsAllocateCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsReleaseCfg: []*DynamicBoolOpt{{}},
utils.MetaRoutesDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaStatsDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaThresholdsDerivedReplyCfg: []*DynamicBoolOpt{{}},
@@ -577,6 +593,7 @@ func TestSessionSCfgAsMapInterfaceCase2(t *testing.T) {
"chargers_conns": ["*internal:*chargers", "*conn1"],
"cdrs_conns": ["*internal:*cdrs", "*conn1"],
"resources_conns": ["*internal:*resources", "*conn1"],
"ips_conns": ["*internal:*ips", "*conn1"],
"thresholds_conns": ["*internal:*thresholds", "*conn1"],
"stats_conns": ["*internal:*stats", "*conn1"],
"routes_conns": ["*internal:*routes", "*conn1"],
@@ -617,6 +634,7 @@ func TestSessionSCfgAsMapInterfaceCase2(t *testing.T) {
utils.ChargerSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.CDRsConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.ResourceSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.IPsConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.ThresholdSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.StatSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.RouteSConnsCfg: []string{utils.MetaInternal, "*conn1"},
@@ -651,6 +669,7 @@ func TestSessionSCfgAsMapInterfaceCase2(t *testing.T) {
utils.MetaCDRs: []*DynamicBoolOpt{{}},
utils.MetaChargers: []*DynamicBoolOpt{{}},
utils.MetaResources: []*DynamicBoolOpt{{}},
utils.MetaIPs: []*DynamicBoolOpt{{}},
utils.MetaRoutes: []*DynamicBoolOpt{{}},
utils.MetaStats: []*DynamicBoolOpt{{}},
utils.MetaThresholds: []*DynamicBoolOpt{{}},
@@ -665,6 +684,9 @@ func TestSessionSCfgAsMapInterfaceCase2(t *testing.T) {
utils.MetaResourcesAllocateCfg: []*DynamicBoolOpt{{}},
utils.MetaResourcesReleaseCfg: []*DynamicBoolOpt{{}},
utils.MetaResourcesDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsAuthorizeCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsAllocateCfg: []*DynamicBoolOpt{{}},
utils.MetaIPsReleaseCfg: []*DynamicBoolOpt{{}},
utils.MetaRoutesDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaStatsDerivedReplyCfg: []*DynamicBoolOpt{{}},
utils.MetaThresholdsDerivedReplyCfg: []*DynamicBoolOpt{{}},

View File

@@ -2144,6 +2144,7 @@ const (
ListenBijsonCfg = "listen_bijson"
ListenBigobCfg = "listen_bigob"
RouteSConnsCfg = "routes_conns"
IPsConnsCfg = "ips_conns"
ReplicationConnsCfg = "replication_conns"
RemoteConnsCfg = "remote_conns"
DebitIntervalCfg = "debit_interval"
@@ -2315,6 +2316,9 @@ const (
MetaResourcesAllocateCfg = "*resourcesAllocate"
MetaResourcesReleaseCfg = "*resourcesRelease"
MetaResourcesDerivedReplyCfg = "*resourcesDerivedReply"
MetaIPsAuthorizeCfg = "*ipsAuthorize"
MetaIPsAllocateCfg = "*ipsAllocate"
MetaIPsReleaseCfg = "*ipsRelease"
MetaRoutesDerivedReplyCfg = "*routesDerivedReply"
MetaStatsDerivedReplyCfg = "*statsDerivedReply"
MetaThresholdsDerivedReplyCfg = "*thresholdsDerivedReply"