Add Blockers field for RouteProfiles

This commit is contained in:
ionutboangiu
2022-04-21 18:59:19 +03:00
committed by Dan Christian Bogos
parent 729c5ca29b
commit 147cc8f8f0
23 changed files with 475 additions and 344 deletions

View File

@@ -302,17 +302,17 @@ cgrates.org,ResGroup22,*string:~*req.Account:dan,;10,3600s,2,premium_call,true,t
// Create and populate Routes.csv
if err := writeFile(utils.RoutesCsv, `
#Tenant[0],ID[1],FilterIDs[2],Weights[3],Sorting[4],SortingParameters[5],RouteID[6],RouteFilterIDs[7],RouteAccountIDs[8],RouteRateProfileIDs[9],RouteResourceIDs[10],RouteStatIDs[11],RouteWeights[12],RouteBlocker[13],RouteParameters[14]
cgrates.org,RoutePrf1,,,,,,,,,,,,,
cgrates.org,RoutePrf1,*string:~*req.Account:1001,;20,*lc,,,,,,,,,,
cgrates.org,RoutePrf1,,,,,route1,fltr1,Account1;Account2,RPL_1,ResGroup1,Stat1,,true,param1
cgrates.org,RoutePrf1,,,,,,,,,,,,,
cgrates.org,RoutePrf1,,,,,route1,,,RPL_2,ResGroup2,,;10,,
cgrates.org,RoutePrf1,,,,,route1,fltr2,,RPL_3,ResGroup3,Stat2,,,param2
cgrates.org,RoutePrf1,,,,,route1,,,,ResGroup4,Stat3,,,
cgrates.org,RoutePrf1,,,,,route2,fltr5,Account1,RPL_1,ResGroup1,Stat1,fltr1;10,true,param1
cgrates.org,RoutePrf2,,,,,,,,,,,,,
cgrates.org,RoutePrf2,*string:~*req.Account:1002,;20,*lc,,route1,fltr3,Account3;Account4,RPL_2,ResGroup2,Stat2,;10,true,param1
#Tenant[0],ID[1],FilterIDs[2],Weights[3],Sorting[4],SortingParameters[5],Blockers[6],RouteID[7],RouteFilterIDs[8],RouteAccountIDs[9],RouteRateProfileIDs[10],RouteResourceIDs[11],RouteStatIDs[12],RouteWeights[13],RouteBlocker[14],RouteParameters[15]
cgrates.org,RoutePrf1,,,,,,,,,,,,,,
cgrates.org,RoutePrf1,*string:~*req.Account:1001,;20,*lc,,;true,,,,,,,,,
cgrates.org,RoutePrf1,,,,,,route1,fltr1,Account1;Account2,RPL_1,ResGroup1,Stat1,,true,param1
cgrates.org,RoutePrf1,,,,,,,,,,,,,,
cgrates.org,RoutePrf1,,,,,,route1,,,RPL_2,ResGroup2,,;10,,
cgrates.org,RoutePrf1,,,,,,route1,fltr2,,RPL_3,ResGroup3,Stat2,,,param2
cgrates.org,RoutePrf1,,,,,,route1,,,,ResGroup4,Stat3,,,
cgrates.org,RoutePrf1,,,,,,route2,fltr5,Account1,RPL_1,ResGroup1,Stat1,fltr1;10,true,param1
cgrates.org,RoutePrf2,,,,,,,,,,,,,,
cgrates.org,RoutePrf2,*string:~*req.Account:1002,;20,*lc,,,route1,fltr3,Account3;Account4,RPL_2,ResGroup2,Stat2,;10,true,param1
`); err != nil {
t.Fatal(err)
}
@@ -1046,6 +1046,11 @@ func testLoadersGetRouteProfiles(t *testing.T) {
ID: "RoutePrf1",
FilterIDs: []string{"*string:~*req.Account:1001"},
Sorting: utils.MetaLC,
Blockers: utils.Blockers{
{
Blocker: true,
},
},
Routes: []*engine.Route{
{
ID: "route1",

View File

@@ -44,7 +44,7 @@ func (adms *AdminSv1) GetRouteProfile(ctx *context.Context, arg *utils.TenantIDW
}
// GetRouteProfileIDs returns list of routeProfile IDs registered for a tenant
func (adms *AdminSv1) GetRouteProfileIDs(ctx *context.Context, args *utils.ArgsItemIDs, sppPrfIDs *[]string) (err error) {
func (adms *AdminSv1) GetRouteProfileIDs(ctx *context.Context, args *utils.ArgsItemIDs, routeProfileIDs *[]string) (err error) {
tnt := args.Tenant
if tnt == utils.EmptyString {
tnt = adms.cfg.GeneralCfg().DefaultTenant
@@ -67,7 +67,7 @@ func (adms *AdminSv1) GetRouteProfileIDs(ctx *context.Context, args *utils.ArgsI
if limit, offset, maxItems, err = utils.GetPaginateOpts(args.APIOpts); err != nil {
return
}
*sppPrfIDs, err = utils.Paginate(retIDs, limit, offset, maxItems)
*routeProfileIDs, err = utils.Paginate(retIDs, limit, offset, maxItems)
return
}

View File

@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package apis
import (
"fmt"
"path"
"reflect"
"sort"
@@ -54,6 +55,11 @@ var (
testRouteSSetRoute3,
testFilterSGetRoutes,
testFilterSGetRoutesWithPrefix,
testRouteSRemoveRouteProfiles,
// Blocker behaviour test
testRouteSSetRouteProfiles,
testRouteSGetRouteProfilesForEvent,
testRouteSKillEngine,
}
)
@@ -467,6 +473,168 @@ func testFilterSGetRoutesWithPrefix(t *testing.T) {
}
}
func testRouteSRemoveRouteProfiles(t *testing.T) {
args := &utils.ArgsItemIDs{
Tenant: "cgrates.org",
}
expected := []string{"PrefixROUTE_ACNT_1002", "PrefixROUTE_ACNT_1003", "ROUTE_ACNT_1001"}
var routeProfileIDs []string
if err := roRPC.Call(context.Background(), utils.AdminSv1GetRouteProfileIDs, args, &routeProfileIDs); err != nil {
t.Fatal(err)
} else {
sort.Strings(routeProfileIDs)
if !utils.SliceStringEqual(routeProfileIDs, expected) {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", expected, routeProfileIDs)
}
}
var reply string
for _, routeProfileID := range routeProfileIDs {
argsRem := utils.TenantIDWithAPIOpts{
TenantID: &utils.TenantID{
Tenant: "cgrates.org",
ID: routeProfileID,
},
}
if err := roRPC.Call(context.Background(), utils.AdminSv1RemoveRouteProfile, argsRem, &reply); err != nil {
t.Fatal(err)
}
}
if err := roRPC.Call(context.Background(), utils.AdminSv1GetRouteProfileIDs, args, &routeProfileIDs); err == nil ||
err.Error() != utils.ErrNotFound.Error() {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrNotFound, err)
}
}
func testRouteSSetRouteProfiles(t *testing.T) {
routeProfiles := []*engine.RouteProfileWithAPIOpts{
{
RouteProfile: &engine.RouteProfile{
ID: "ROUTE_TEST_1",
Tenant: "cgrates.org",
FilterIDs: []string{"*string:~*req.TestCase:BlockerBehaviour"},
Weights: utils.DynamicWeights{
{
Weight: 30,
},
},
Blockers: utils.Blockers{
{
Blocker: true,
},
},
Sorting: utils.MetaWeight,
SortingParameters: []string{},
Routes: []*engine.Route{
{
ID: "routeTest",
},
},
},
},
{
RouteProfile: &engine.RouteProfile{
ID: "ROUTE_TEST_2",
Tenant: "cgrates.org",
FilterIDs: []string{"*string:~*req.TestCase:BlockerBehaviour"},
Weights: utils.DynamicWeights{
{
Weight: 10,
},
},
Blockers: utils.Blockers{
{
Blocker: true,
},
},
Sorting: utils.MetaWeight,
SortingParameters: []string{},
Routes: []*engine.Route{
{
ID: "routeTest",
},
},
},
},
{
RouteProfile: &engine.RouteProfile{
ID: "ROUTE_TEST_3",
Tenant: "cgrates.org",
FilterIDs: []string{"*string:~*req.TestCase:BlockerBehaviour"},
Weights: utils.DynamicWeights{
{
Weight: 20,
},
},
Sorting: utils.MetaWeight,
SortingParameters: []string{},
Routes: []*engine.Route{
{
ID: "routeTest",
},
},
},
},
{
RouteProfile: &engine.RouteProfile{
ID: "ROUTE_TEST_4",
Tenant: "cgrates.org",
FilterIDs: []string{"*string:~*req.TestCase:BlockerBehaviour"},
Weights: utils.DynamicWeights{
{
Weight: 5,
},
},
Sorting: utils.MetaWeight,
SortingParameters: []string{},
Routes: []*engine.Route{
{
ID: "routeTest",
},
},
},
},
}
var reply string
for _, routeProfile := range routeProfiles {
if err := roRPC.Call(context.Background(), utils.AdminSv1SetRouteProfile,
routeProfile, &reply); err != nil {
t.Error(err)
} else if reply != utils.OK {
t.Error(err)
}
}
argsGet := &utils.TenantIDWithAPIOpts{
TenantID: &utils.TenantID{
Tenant: "cgrates.org",
ID: "ROUTE_TEST_1",
},
}
var result engine.RouteProfile
if err := roRPC.Call(context.Background(), utils.AdminSv1GetRouteProfile,
argsGet, &result); err != nil {
t.Error(err)
}
fmt.Println(utils.ToJSON(result))
}
func testRouteSGetRouteProfilesForEvent(t *testing.T) {
args := &utils.CGREvent{
Tenant: "cgrates.org",
ID: "EventGetRouteProfiles",
Event: map[string]interface{}{
"TestCase": "BlockerBehaviour",
},
APIOpts: map[string]interface{}{},
}
var reply []*engine.RouteProfile
if err := roRPC.Call(context.Background(), utils.RouteSv1GetRouteProfilesForEvent, args, &reply); err != nil {
t.Error(err)
}
fmt.Println(utils.ToJSON(reply))
}
//Kill the engine when it is about to be finished
func testRouteSKillEngine(t *testing.T) {
if err := engine.KillEngine(100); err != nil {

View File

@@ -1273,15 +1273,16 @@ const CGRATES_CFG_JSON = `
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
{"tag": "Sorting", "path": "Sorting", "type": "*variable", "value": "~*req.4"},
{"tag": "SortingParameters", "path": "SortingParameters", "type": "*variable", "value": "~*req.5"},
{"tag": "RouteID", "path": "Routes.ID", "type": "*variable", "value": "~*req.6","new_branch":true},
{"tag": "RouteFilterIDs", "path": "Routes.FilterIDs", "type": "*variable", "value": "~*req.7"},
{"tag": "RouteAccountIDs", "path": "Routes.AccountIDs", "type": "*variable", "value": "~*req.8"},
{"tag": "RouteRateProfileIDs", "path": "Routes.RateProfileIDs", "type": "*variable", "value": "~*req.9"},
{"tag": "RouteResourceIDs", "path": "Routes.ResourceIDs", "type": "*variable", "value": "~*req.10"},
{"tag": "RouteStatIDs", "path": "Routes.StatIDs", "type": "*variable", "value": "~*req.11"},
{"tag": "RouteWeights", "path": "Routes.Weights", "type": "*variable", "value": "~*req.12"},
{"tag": "RouteBlocker", "path": "Routes.Blocker", "type": "*variable", "value": "~*req.13"},
{"tag": "RouteParameters", "path": "Routes.RouteParameters", "type": "*variable", "value": "~*req.14"},
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.6"},
{"tag": "RouteID", "path": "Routes.ID", "type": "*variable", "value": "~*req.7","new_branch":true},
{"tag": "RouteFilterIDs", "path": "Routes.FilterIDs", "type": "*variable", "value": "~*req.8"},
{"tag": "RouteAccountIDs", "path": "Routes.AccountIDs", "type": "*variable", "value": "~*req.9"},
{"tag": "RouteRateProfileIDs", "path": "Routes.RateProfileIDs", "type": "*variable", "value": "~*req.10"},
{"tag": "RouteResourceIDs", "path": "Routes.ResourceIDs", "type": "*variable", "value": "~*req.11"},
{"tag": "RouteStatIDs", "path": "Routes.StatIDs", "type": "*variable", "value": "~*req.12"},
{"tag": "RouteWeights", "path": "Routes.Weights", "type": "*variable", "value": "~*req.13"},
{"tag": "RouteBlocker", "path": "Routes.Blocker", "type": "*variable", "value": "~*req.14"},
{"tag": "RouteParameters", "path": "Routes.RouteParameters", "type": "*variable", "value": "~*req.15"},
],
},
{

View File

@@ -357,51 +357,56 @@ func TestLoaderSCfgloadFromJsonCfgCase1(t *testing.T) {
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "Blockers",
Path: "Blockers",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteID",
Path: "Routes.ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.7", utils.InfieldSep),
NewBranch: true,
Layout: time.RFC3339},
{Tag: "RouteFilterIDs",
Path: "Routes.FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.8", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteAccountIDs",
Path: "Routes.AccountIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.9", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteRateProfileIDs",
Path: "Routes.RateProfileIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.10", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteResourceIDs",
Path: "Routes.ResourceIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.11", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteStatIDs",
Path: "Routes.StatIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.12", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteWeights",
Path: "Routes.Weights",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.13", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteBlocker",
Path: "Routes.Blocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.13", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.14", utils.InfieldSep),
Layout: time.RFC3339},
{Tag: "RouteParameters",
Path: "Routes.RouteParameters",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.14", utils.InfieldSep),
Value: NewRSRParsersMustCompile("~*req.15", utils.InfieldSep),
Layout: time.RFC3339},
},
},
@@ -1455,60 +1460,66 @@ func TestLoaderCfgAsMapInterfaceCase1(t *testing.T) {
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.5",
},
{
utils.TagCfg: "Blockers",
utils.PathCfg: "Blockers",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.6",
},
{
utils.NewBranchCfg: true,
utils.TagCfg: "RouteID",
utils.PathCfg: "Routes.ID",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.6",
utils.ValueCfg: "~*req.7",
},
{
utils.TagCfg: "RouteFilterIDs",
utils.PathCfg: "Routes.FilterIDs",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.7",
utils.ValueCfg: "~*req.8",
},
{
utils.TagCfg: "RouteAccountIDs",
utils.PathCfg: "Routes.AccountIDs",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.8",
utils.ValueCfg: "~*req.9",
},
{
utils.TagCfg: "RouteRateProfileIDs",
utils.PathCfg: "Routes.RateProfileIDs",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.9",
utils.ValueCfg: "~*req.10",
},
{
utils.TagCfg: "RouteResourceIDs",
utils.PathCfg: "Routes.ResourceIDs",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.10",
utils.ValueCfg: "~*req.11",
},
{
utils.TagCfg: "RouteStatIDs",
utils.PathCfg: "Routes.StatIDs",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.11",
utils.ValueCfg: "~*req.12",
},
{
utils.TagCfg: "RouteWeights",
utils.PathCfg: "Routes.Weights",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.12",
utils.ValueCfg: "~*req.13",
},
{
utils.TagCfg: "RouteBlocker",
utils.PathCfg: "Routes.Blocker",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.13",
utils.ValueCfg: "~*req.14",
},
{
utils.TagCfg: "RouteParameters",
utils.PathCfg: "Routes.RouteParameters",
utils.TypeCfg: "*variable",
utils.ValueCfg: "~*req.14",
utils.ValueCfg: "~*req.15",
},
},
},

View File

@@ -1250,15 +1250,16 @@
// {"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
// {"tag": "Sorting", "path": "Sorting", "type": "*variable", "value": "~*req.4"},
// {"tag": "SortingParameters", "path": "SortingParameters", "type": "*variable", "value": "~*req.5"},
// {"tag": "RouteID", "path": "Routes.ID", "type": "*variable", "value": "~*req.6","new_branch":true},
// {"tag": "RouteFilterIDs", "path": "Routes.FilterIDs", "type": "*variable", "value": "~*req.7"},
// {"tag": "RouteAccountIDs", "path": "Routes.AccountIDs", "type": "*variable", "value": "~*req.8"},
// {"tag": "RouteRateProfileIDs", "path": "Routes.RateProfileIDs", "type": "*variable", "value": "~*req.9"},
// {"tag": "RouteResourceIDs", "path": "Routes.ResourceIDs", "type": "*variable", "value": "~*req.10"},
// {"tag": "RouteStatIDs", "path": "Routes.StatIDs", "type": "*variable", "value": "~*req.11"},
// {"tag": "RouteWeights", "path": "Routes.Weights", "type": "*variable", "value": "~*req.12"},
// {"tag": "RouteBlocker", "path": "Routes.Blocker", "type": "*variable", "value": "~*req.13"},
// {"tag": "RouteParameters", "path": "Routes.RouteParameters", "type": "*variable", "value": "~*req.14"},
// {"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.6"},
// {"tag": "RouteID", "path": "Routes.ID", "type": "*variable", "value": "~*req.7","new_branch":true},
// {"tag": "RouteFilterIDs", "path": "Routes.FilterIDs", "type": "*variable", "value": "~*req.8"},
// {"tag": "RouteAccountIDs", "path": "Routes.AccountIDs", "type": "*variable", "value": "~*req.9"},
// {"tag": "RouteRateProfileIDs", "path": "Routes.RateProfileIDs", "type": "*variable", "value": "~*req.10"},
// {"tag": "RouteResourceIDs", "path": "Routes.ResourceIDs", "type": "*variable", "value": "~*req.11"},
// {"tag": "RouteStatIDs", "path": "Routes.StatIDs", "type": "*variable", "value": "~*req.12"},
// {"tag": "RouteWeights", "path": "Routes.Weights", "type": "*variable", "value": "~*req.13"},
// {"tag": "RouteBlocker", "path": "Routes.Blocker", "type": "*variable", "value": "~*req.14"},
// {"tag": "RouteParameters", "path": "Routes.RouteParameters", "type": "*variable", "value": "~*req.15"},
// ],
// },
// {

View File

@@ -1,118 +1,31 @@
{
// CGRateS Configuration file
//
"general": {
"log_level": 7,
"reply_timeout": "50s"
},
"general": {
"log_level": 7,
"reply_timeout": "50s",
},
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080"
},
"data_db": {
"db_type": "redis",
"db_port": 6379,
"db_name": "10"
},
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080",
},
"routes": {
"enabled": true
},
"data_db": { // database used to store runtime data (eg: accounts, cdr stats)
"db_type": "redis", // data_db type: <redis|mongo>
"db_port": 6379, // data_db port to reach the database
"db_name": "10", // data_db database name to connect to
},
"cdrs": {
"enabled": true,
"chargers_conns":["*internal"],
},
"attributes": {
"enabled": true,
"stats_conns": ["*localhost"],
"resources_conns": ["*localhost"],
"accounts_conns": ["*localhost"]
},
"chargers": {
"enabled": true,
"attributes_conns": ["*internal"],
},
"resources": {
"enabled": true,
"store_interval": "1s",
"thresholds_conns": ["*internal"]
},
"stats": {
"enabled": true,
"store_interval": "1s",
"thresholds_conns": ["*internal"],
},
"thresholds": {
"enabled": true,
"store_interval": "1s",
},
"routes": {
"enabled": true,
"prefix_indexed_fields":["*req.Destination"],
"stats_conns": ["*internal"],
"resources_conns": ["*internal"],
"rates_conns": ["*internal"],
},
"sessions": {
"enabled": true,
"routes_conns": ["*internal"],
"resources_conns": ["*internal"],
"attributes_conns": ["*internal"],
"rates_conns": ["*internal"],
"cdrs_conns": ["*internal"],
"chargers_conns": ["*internal"],
},
"migrator":{
"users_filters":["Account"],
},
"admins": {
"enabled": true,
},
"rates": {
"enabled": true
},
"actions": {
"enabled": true,
"accounts_conns": ["*localhost"]
},
"accounts": {
"enabled": true
},
"filters": {
"stats_conns": ["*internal"],
"resources_conns": ["*internal"],
"accounts_conns": ["*internal"],
},
"admins": {
"enabled": true,
"scheduler_conns": ["*internal"]
}
}

View File

@@ -1,4 +1,4 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_CLUELRN_INTER,*string:~*req.Account:9174269000;*string:~*req.LRNJurisdiction:INTER,;10,*lc,,LEVEL3,,,RP_LEVEL3_INTER,,,,false,
cgrates.org,ROUTE_CLUELRN_INTER,,,,,TMOBILE,,,RP_TMOBILE_INTER,,,,false,
cgrates.org,ROUTE_CLUELRN_INTER,,,,,COMCAST,,,RP_COMCAST_INTER,,,,false,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_CLUELRN_INTER,*string:~*req.Account:9174269000;*string:~*req.LRNJurisdiction:INTER,;10,*lc,,,LEVEL3,,,RP_LEVEL3_INTER,,,,false,
cgrates.org,ROUTE_CLUELRN_INTER,,,,,,TMOBILE,,,RP_TMOBILE_INTER,,,,false,
cgrates.org,ROUTE_CLUELRN_INTER,,,,,,COMCAST,,,RP_COMCAST_INTER,,,,false,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_CLUELRN_INTER *string:~*req.Account:9174269000;*string:~*req.LRNJurisdiction:INTER ;10 *lc LEVEL3 RP_LEVEL3_INTER false
3 cgrates.org ROUTE_CLUELRN_INTER TMOBILE RP_TMOBILE_INTER false
4 cgrates.org ROUTE_CLUELRN_INTER COMCAST RP_COMCAST_INTER false

View File

@@ -1,4 +1,4 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,;10,*weight,,route1,,,,,,;10,,!^(.*)$!sip:\1@172.16.1.11!
cgrates.org,ROUTE_ACNT_1001,,;10,,,route2,,,,,,;5,,!^(.*)$!sip:\1@172.16.1.12!
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,;10,*weight,,,route1,,,,,,;10,,!^(.*)$!sip:\1@172.16.1.11!
cgrates.org,ROUTE_ACNT_1001,,;10,,,,route2,,,,,,;5,,!^(.*)$!sip:\1@172.16.1.12!
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_ACNT_1001 *string:~*req.Account:1001 ;10 *weight route1 ;10 !^(.*)$!sip:\1@172.16.1.11!
3 cgrates.org ROUTE_ACNT_1001 ;10 route2 ;5 !^(.*)$!sip:\1@172.16.1.12!
4

View File

@@ -1,33 +1,33 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,;10,*weight,,route1,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_SPP_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_HIGHESTCOST_1,FLTR_SPP_2,;20,*hc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_QOS_1,FLTR_SPP_3,;20,*qos,*acd;*tcd;*asr,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_1,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_1,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_2,FLTR_SPP_4,;20,*qos,*dcc,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_2,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_2,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_3,FLTR_SPP_5,;20,*qos,*pdd,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_3,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_3,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED,FLTR_SPP_6,;20,*qos,*pdd,route1,FLTR_QOS_SP1,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED,,,,,route2,FLTR_QOS_SP2,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED2,FLTR_SPP_QOS_2,;20,*qos,*acd;*tcd;*asr,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,route2,FLTR_QOS_SP2_2,,RP_RETAIL1,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_LCR,FLTR_TEST,;50,*lc,,route_1,,,RP_TEST_1,,,;10,,
cgrates.org,ROUTE_LCR,,,,,route_2,,,RP_TEST_2,,,,,
cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,;20,*load,route1:2;route2:7;*default:5,route1,,,,,Stat_Supplier1:*sum#~*req.LoadReq,;10,false,
cgrates.org,ROUTE_LOAD_DIST,,,,,route2,,,,,Stat_Supplier2:*sum#~*req.LoadReq,;20,,
cgrates.org,ROUTE_LOAD_DIST,,,,,route3,,,,,Stat_Supplier3:*sum#~*req.LoadReq,;35,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,;10,*weight,,,route1,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1001,,,,,,route2,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,,route3,FLTR_SPP_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_HIGHESTCOST_1,FLTR_SPP_2,;20,*hc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_QOS_1,FLTR_SPP_3,;20,*qos,*acd;*tcd;*asr,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_1,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_1,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_2,FLTR_SPP_4,;20,*qos,*dcc,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_2,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_2,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_3,FLTR_SPP_5,;20,*qos,*pdd,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_3,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_3,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED,FLTR_SPP_6,;20,*qos,*pdd,,route1,FLTR_QOS_SP1,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED,,,,,,route2,FLTR_QOS_SP2,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED2,FLTR_SPP_QOS_2,;20,*qos,*acd;*tcd;*asr,,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,,route2,FLTR_QOS_SP2_2,,RP_RETAIL1,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_LCR,FLTR_TEST,;50,*lc,,,route_1,,,RP_TEST_1,,,;10,,
cgrates.org,ROUTE_LCR,,,,,,route_2,,,RP_TEST_2,,,,,
cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,;20,*load,route1:2;route2:7;*default:5,,route1,,,,,Stat_Supplier1:*sum#~*req.LoadReq,;10,false,
cgrates.org,ROUTE_LOAD_DIST,,,,,,route2,,,,,Stat_Supplier2:*sum#~*req.LoadReq,;20,,
cgrates.org,ROUTE_LOAD_DIST,,,,,,route3,,,,,Stat_Supplier3:*sum#~*req.LoadReq,;35,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_ACNT_1001 FLTR_ACCOUNT_1001 ;10 *weight route1 ;20
3 cgrates.org ROUTE_ACNT_1001 route2 ;10
4 cgrates.org ROUTE_WEIGHT_2 ;5 *weight route1 ;10
5 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE;FLTR_ACNT_1007 ;10 *weight route1 ;10
6 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE route2 ;20
7 cgrates.org ROUTE_WEIGHT_1 FLTR_ACNT_1007 route3 FLTR_SPP_ACNT_dan ;15
8 cgrates.org ROUTE_LEASTCOST_1 FLTR_1 ;10 *lc route1 RP_SPECIAL_1002 ;10 false
9 cgrates.org ROUTE_LEASTCOST_1 route2 RP_RETAIL1 ;20
10 cgrates.org ROUTE_LEASTCOST_1 route3 RP_SPECIAL_1002 ;15
11 cgrates.org ROUTE_HIGHESTCOST_1 FLTR_SPP_2 ;20 *hc route1 RP_SPECIAL_1002 ;10 false
12 cgrates.org ROUTE_HIGHESTCOST_1 route2 RP_RETAIL1 ;20
13 cgrates.org ROUTE_HIGHESTCOST_1 route3 RP_SPECIAL_1002 ;15
14 cgrates.org ROUTE_QOS_1 FLTR_SPP_3 ;20 *qos *acd;*tcd;*asr route1 Stat_1;Stat_1_1 ;10 false
15 cgrates.org ROUTE_QOS_1 route2 Stat_2 ;20
16 cgrates.org ROUTE_QOS_1 route3 Stat_3 ;35
17 cgrates.org ROUTE_QOS_2 FLTR_SPP_4 ;20 *qos *dcc route1 Stat_1;Stat_1_1 ;10 false
18 cgrates.org ROUTE_QOS_2 route2 Stat_2 ;20
19 cgrates.org ROUTE_QOS_2 route3 Stat_3 ;35
20 cgrates.org ROUTE_QOS_3 FLTR_SPP_5 ;20 *qos *pdd route1 Stat_1;Stat_1_1 ;10 false
21 cgrates.org ROUTE_QOS_3 route2 Stat_2 ;20
22 cgrates.org ROUTE_QOS_3 route3 Stat_3 ;35
23 cgrates.org ROUTE_QOS_FILTRED FLTR_SPP_6 ;20 *qos *pdd route1 FLTR_QOS_SP1 Stat_1;Stat_1_1 ;10 false
24 cgrates.org ROUTE_QOS_FILTRED route2 FLTR_QOS_SP2 Stat_2 ;20
25 cgrates.org ROUTE_QOS_FILTRED route3 Stat_3 ;35
26 cgrates.org ROUTE_QOS_FILTRED2 FLTR_SPP_QOS_2 ;20 *qos *acd;*tcd;*asr route1 FLTR_QOS_SP1_2 RP_SPECIAL_1002 Stat_1;Stat_1_1 ;10 false
27 cgrates.org ROUTE_QOS_FILTRED2 route2 FLTR_QOS_SP2_2 RP_RETAIL1 Stat_2 ;20
28 cgrates.org ROUTE_QOS_FILTRED2 route3 Stat_3 ;35
29 cgrates.org ROUTE_LCR FLTR_TEST ;50 *lc route_1 RP_TEST_1 ;10
30 cgrates.org ROUTE_LCR route_2 RP_TEST_2
31 cgrates.org ROUTE_LOAD_DIST FLTR_SPP_LOAD_DIST ;20 *load route1:2;route2:7;*default:5 route1 Stat_Supplier1:*sum#~*req.LoadReq ;10 false
32 cgrates.org ROUTE_LOAD_DIST route2 Stat_Supplier2:*sum#~*req.LoadReq ;20
33 cgrates.org ROUTE_LOAD_DIST route3 Stat_Supplier3:*sum#~*req.LoadReq ;35

View File

@@ -1,8 +1,8 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,,route3,FLTR_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_WEIGHT_2 ;5 *weight route1 ;10
3 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE;FLTR_ACNT_1007 ;10 *weight route1 ;10
4 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE route2 ;20
5 cgrates.org ROUTE_WEIGHT_1 FLTR_ACNT_1007 route3 FLTR_ACNT_dan ;15
6 cgrates.org ROUTE_LEASTCOST_1 FLTR_1 ;10 *lc route1 RP_SPECIAL_1002 ;10 false
7 cgrates.org ROUTE_LEASTCOST_1 route2 RP_RETAIL1 ;20
8 cgrates.org ROUTE_LEASTCOST_1 route3 RP_SPECIAL_1002 ;15

View File

@@ -1,8 +1,8 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,,route3,FLTR_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_WEIGHT_2 ;5 *weight route1 ;10
3 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE;FLTR_ACNT_1007 ;10 *weight route1 ;10
4 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE route2 ;20
5 cgrates.org ROUTE_WEIGHT_1 FLTR_ACNT_1007 route3 FLTR_ACNT_dan ;15
6 cgrates.org ROUTE_LEASTCOST_1 FLTR_1 ;10 *lc route1 RP_SPECIAL_1002 ;10 false
7 cgrates.org ROUTE_LEASTCOST_1 route2 RP_RETAIL1 ;20
8 cgrates.org ROUTE_LEASTCOST_1 route3 RP_SPECIAL_1002 ;15

View File

@@ -1,8 +1,8 @@
#Tenant,ID,FilterIDs,Weight,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters
#Tenant,ID,FilterIDs,Weight,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters
cgrates.org,LC1,,,*lc,,,,,,,,,,
cgrates.org,LC1,,,,,supplier1,,ACNT_VOL1,,,,,,
cgrates.org,LC1,,,,,supplier2,,,RP_SUPPLIER2,,,,,
cgrates.org,LC1,,,,,supplier3,,,RP_SUPPLIER3,,,,,
cgrates.org,LC1,,,,,supplier4,,,RP_SUPPLIER4,,,,,
cgrates.org,LC1,,,*lc,,,,,,,,,,,
cgrates.org,LC1,,,,,,supplier1,,ACNT_VOL1,,,,,,
cgrates.org,LC1,,,,,,supplier2,,,RP_SUPPLIER2,,,,,
cgrates.org,LC1,,,,,,supplier3,,,RP_SUPPLIER3,,,,,
cgrates.org,LC1,,,,,,supplier4,,,RP_SUPPLIER4,,,,,
1 #Tenant ID FilterIDs Weight Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeight RouteBlocker RouteParameters
2 cgrates.org LC1 *lc
3 cgrates.org LC1 supplier1 ACNT_VOL1
4 cgrates.org LC1 supplier2 RP_SUPPLIER2
5 cgrates.org LC1 supplier3 RP_SUPPLIER3
6 cgrates.org LC1 supplier4 RP_SUPPLIER4
7
8

View File

@@ -1,33 +1,33 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,;10,*weight,,route1,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_SPP_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_HIGHESTCOST_1,FLTR_SPP_2,;20,*hc,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_QOS_1,FLTR_SPP_3,;20,*qos,*acd;*tcd;*asr,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_1,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_1,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_2,FLTR_SPP_4,;20,*qos,*dcc,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_2,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_2,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_3,FLTR_SPP_5,;20,*qos,*pdd,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_3,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_3,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED,FLTR_SPP_6,;20,*qos,*pdd,route1,FLTR_QOS_SP1,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED,,,,,route2,FLTR_QOS_SP2,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED2,FLTR_SPP_QOS_2,;20,*qos,*acd;*tcd;*asr,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,route2,FLTR_QOS_SP2_2,,RP_RETAIL1,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_LCR,FLTR_TEST,;50,*lc,,route_1,,,RP_TEST_1,,,;10,,
cgrates.org,ROUTE_LCR,,,,,route_2,,,RP_TEST_2,,,,,
cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,;20,*load,route1:2;route2:7;*default:5,route1,,,,,Stat_Supplier1:*sum#~*req.LoadReq,;10,false,
cgrates.org,ROUTE_LOAD_DIST,,,,,route2,,,,,Stat_Supplier2:*sum#~*req.LoadReq,;20,,
cgrates.org,ROUTE_LOAD_DIST,,,,,route3,,,,,Stat_Supplier3:*sum#~*req.LoadReq,;35,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,;10,*weight,,,route1,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1001,,,,,,route2,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_2,,;5,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,,route3,FLTR_SPP_ACNT_dan,,,,,;15,,
cgrates.org,ROUTE_LEASTCOST_1,FLTR_1,;10,*lc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_LEASTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_HIGHESTCOST_1,FLTR_SPP_2,;20,*hc,,,route1,,,RP_SPECIAL_1002,,,;10,false,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,,route2,,,RP_RETAIL1,,,;20,,
cgrates.org,ROUTE_HIGHESTCOST_1,,,,,,route3,,,RP_SPECIAL_1002,,,;15,,
cgrates.org,ROUTE_QOS_1,FLTR_SPP_3,;20,*qos,*acd;*tcd;*asr,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_1,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_1,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_2,FLTR_SPP_4,;20,*qos,*dcc,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_2,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_2,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_3,FLTR_SPP_5,;20,*qos,*pdd,,route1,,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_3,,,,,,route2,,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_3,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED,FLTR_SPP_6,;20,*qos,*pdd,,route1,FLTR_QOS_SP1,,,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED,,,,,,route2,FLTR_QOS_SP2,,,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_QOS_FILTRED2,FLTR_SPP_QOS_2,;20,*qos,*acd;*tcd;*asr,,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,Stat_1;Stat_1_1,;10,false,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,,route2,FLTR_QOS_SP2_2,,RP_RETAIL1,,Stat_2,;20,,
cgrates.org,ROUTE_QOS_FILTRED2,,,,,,route3,,,,,Stat_3,;35,,
cgrates.org,ROUTE_LCR,FLTR_TEST,;50,*lc,,,route_1,,,RP_TEST_1,,,;10,,
cgrates.org,ROUTE_LCR,,,,,,route_2,,,RP_TEST_2,,,,,
cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,;20,*load,route1:2;route2:7;*default:5,,route1,,,,,Stat_Supplier1:*sum#~*req.LoadReq,;10,false,
cgrates.org,ROUTE_LOAD_DIST,,,,,,route2,,,,,Stat_Supplier2:*sum#~*req.LoadReq,;20,,
cgrates.org,ROUTE_LOAD_DIST,,,,,,route3,,,,,Stat_Supplier3:*sum#~*req.LoadReq,;35,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_ACNT_1001 FLTR_ACCOUNT_1001 ;10 *weight route1 ;20
3 cgrates.org ROUTE_ACNT_1001 route2 ;10
4 cgrates.org ROUTE_WEIGHT_2 ;5 *weight route1 ;10
5 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE;FLTR_ACNT_1007 ;10 *weight route1 ;10
6 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE route2 ;20
7 cgrates.org ROUTE_WEIGHT_1 FLTR_ACNT_1007 route3 FLTR_SPP_ACNT_dan ;15
8 cgrates.org ROUTE_LEASTCOST_1 FLTR_1 ;10 *lc route1 RP_SPECIAL_1002 ;10 false
9 cgrates.org ROUTE_LEASTCOST_1 route2 RP_RETAIL1 ;20
10 cgrates.org ROUTE_LEASTCOST_1 route3 RP_SPECIAL_1002 ;15
11 cgrates.org ROUTE_HIGHESTCOST_1 FLTR_SPP_2 ;20 *hc route1 RP_SPECIAL_1002 ;10 false
12 cgrates.org ROUTE_HIGHESTCOST_1 route2 RP_RETAIL1 ;20
13 cgrates.org ROUTE_HIGHESTCOST_1 route3 RP_SPECIAL_1002 ;15
14 cgrates.org ROUTE_QOS_1 FLTR_SPP_3 ;20 *qos *acd;*tcd;*asr route1 Stat_1;Stat_1_1 ;10 false
15 cgrates.org ROUTE_QOS_1 route2 Stat_2 ;20
16 cgrates.org ROUTE_QOS_1 route3 Stat_3 ;35
17 cgrates.org ROUTE_QOS_2 FLTR_SPP_4 ;20 *qos *dcc route1 Stat_1;Stat_1_1 ;10 false
18 cgrates.org ROUTE_QOS_2 route2 Stat_2 ;20
19 cgrates.org ROUTE_QOS_2 route3 Stat_3 ;35
20 cgrates.org ROUTE_QOS_3 FLTR_SPP_5 ;20 *qos *pdd route1 Stat_1;Stat_1_1 ;10 false
21 cgrates.org ROUTE_QOS_3 route2 Stat_2 ;20
22 cgrates.org ROUTE_QOS_3 route3 Stat_3 ;35
23 cgrates.org ROUTE_QOS_FILTRED FLTR_SPP_6 ;20 *qos *pdd route1 FLTR_QOS_SP1 Stat_1;Stat_1_1 ;10 false
24 cgrates.org ROUTE_QOS_FILTRED route2 FLTR_QOS_SP2 Stat_2 ;20
25 cgrates.org ROUTE_QOS_FILTRED route3 Stat_3 ;35
26 cgrates.org ROUTE_QOS_FILTRED2 FLTR_SPP_QOS_2 ;20 *qos *acd;*tcd;*asr route1 FLTR_QOS_SP1_2 RP_SPECIAL_1002 Stat_1;Stat_1_1 ;10 false
27 cgrates.org ROUTE_QOS_FILTRED2 route2 FLTR_QOS_SP2_2 RP_RETAIL1 Stat_2 ;20
28 cgrates.org ROUTE_QOS_FILTRED2 route3 Stat_3 ;35
29 cgrates.org ROUTE_LCR FLTR_TEST ;50 *lc route_1 RP_TEST_1 ;10
30 cgrates.org ROUTE_LCR route_2 RP_TEST_2
31 cgrates.org ROUTE_LOAD_DIST FLTR_SPP_LOAD_DIST ;20 *load route1:2;route2:7;*default:5 route1 Stat_Supplier1:*sum#~*req.LoadReq ;10 false
32 cgrates.org ROUTE_LOAD_DIST route2 Stat_Supplier2:*sum#~*req.LoadReq ;20
33 cgrates.org ROUTE_LOAD_DIST route3 Stat_Supplier3:*sum#~*req.LoadReq ;35

View File

@@ -1,5 +1,5 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_1,FLTR_ACNT_dan;FLTR_DST_DE,;10,*lc,,route1,FLTR_ACNT_dan,,RPL_1,ResGroup1,Stat1,;10,false,SortingParameter1
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_ACNT_dan,,,,,;15,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_1,FLTR_ACNT_dan;FLTR_DST_DE,;10,*lc,,,route1,FLTR_ACNT_dan,,RPL_1,ResGroup1,Stat1,;10,false,SortingParameter1
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,,route3,FLTR_ACNT_dan,,,,,;15,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_1 FLTR_ACNT_dan;FLTR_DST_DE ;10 *lc route1 FLTR_ACNT_dan RPL_1 ResGroup1 Stat1 ;10 false SortingParameter1
3 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE;FLTR_ACNT_1007 ;10 *weight route1 ;10
4 cgrates.org ROUTE_WEIGHT_1 FLTR_DST_DE route2 ;20
5 cgrates.org ROUTE_WEIGHT_1 FLTR_ACNT_1007 route3 FLTR_ACNT_dan ;15

View File

@@ -1,7 +1,7 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,;20,*weight,,route1,,1001,RP_10CNT,,,;20,,cgrates.org
cgrates.org,ROUTE_ACNT_1001,,;10,,,route2,,1001,RP_20CNT,,,;10,,cgrates.net
cgrates.org,ROUTE_ACNT_1001,,;5,,,route3,,1001,RP_1CNT,,,;5,,cgrates.com
cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,;20,*weight,,route1,,1002,RP_10CNT,,,;20,,1003@192.168.56.203
cgrates.org,ROUTE_ACNT_1002,,;10,,,route2,,1002,RP_20CNT,,,;10,,1004@192.168.57.203
cgrates.org,ROUTE_ACNT_1002,,;5,,,route3,,1002,RP_1CNT,,,;5,,1005@192.168.58.203
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,;20,*weight,,,route1,,1001,RP_10CNT,,,;20,,cgrates.org
cgrates.org,ROUTE_ACNT_1001,,;10,,,,route2,,1001,RP_20CNT,,,;10,,cgrates.net
cgrates.org,ROUTE_ACNT_1001,,;5,,,,route3,,1001,RP_1CNT,,,;5,,cgrates.com
cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,;20,*weight,,,route1,,1002,RP_10CNT,,,;20,,1003@192.168.56.203
cgrates.org,ROUTE_ACNT_1002,,;10,,,,route2,,1002,RP_20CNT,,,;10,,1004@192.168.57.203
cgrates.org,ROUTE_ACNT_1002,,;5,,,,route3,,1002,RP_1CNT,,,;5,,1005@192.168.58.203
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_ACNT_1001 *string:~*req.Account:1001 ;20 *weight route1 1001 RP_10CNT ;20 cgrates.org
3 cgrates.org ROUTE_ACNT_1001 ;10 route2 1001 RP_20CNT ;10 cgrates.net
4 cgrates.org ROUTE_ACNT_1001 ;5 route3 1001 RP_1CNT ;5 cgrates.com
5 cgrates.org ROUTE_ACNT_1002 *string:~*req.Account:1002 ;20 *weight route1 1002 RP_10CNT ;20 1003@192.168.56.203
6 cgrates.org ROUTE_ACNT_1002 ;10 route2 1002 RP_20CNT ;10 1004@192.168.57.203
7 cgrates.org ROUTE_ACNT_1002 ;5 route3 1002 RP_1CNT ;5 1005@192.168.58.203

View File

@@ -1,8 +1,8 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACNT_1001,;10,*weight,,route1,,,,,,;10,,
cgrates.org,ROUTE_ACNT_1001,,;20,,,route2,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1002,FLTR_ACNT_1002,;10,*lc,,route1,,,RP_1002_LOW,,,;10,false,
cgrates.org,ROUTE_ACNT_1002,,,,,route2,,,RP_1002,,,;20,,
cgrates.org,ROUTE_ACNT_1003,FLTR_ACNT_1003,;10,*qos,*tcc;*tcd,route1,,,,,Stats2,;10,false,
cgrates.org,ROUTE_ACNT_1003,,,,,route2,,,,,Stats2_1,;20,,
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,FLTR_ACNT_1001,;10,*weight,,,route1,,,,,,;10,,
cgrates.org,ROUTE_ACNT_1001,,;20,,,,route2,,,,,,;20,,
cgrates.org,ROUTE_ACNT_1002,FLTR_ACNT_1002,;10,*lc,,,route1,,,RP_1002_LOW,,,;10,false,
cgrates.org,ROUTE_ACNT_1002,,,,,,route2,,,RP_1002,,,;20,,
cgrates.org,ROUTE_ACNT_1003,FLTR_ACNT_1003,;10,*qos,*tcc;*tcd,,route1,,,,,Stats2,;10,false,
cgrates.org,ROUTE_ACNT_1003,,,,,,route2,,,,,Stats2_1,;20,,
1 #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org ROUTE_ACNT_1001 FLTR_ACNT_1001 ;10 *weight route1 ;10
3 cgrates.org ROUTE_ACNT_1001 ;20 route2 ;20
4 cgrates.org ROUTE_ACNT_1002 FLTR_ACNT_1002 ;10 *lc route1 RP_1002_LOW ;10 false
5 cgrates.org ROUTE_ACNT_1002 route2 RP_1002 ;20
6 cgrates.org ROUTE_ACNT_1003 FLTR_ACNT_1003 ;10 *qos *tcc;*tcd route1 Stats2 ;10 false
7 cgrates.org ROUTE_ACNT_1003 route2 Stats2_1 ;20
8

View File

@@ -1,39 +1,39 @@
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
#Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,Blockers,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,,*weight,,vendor1,FLTR_DEST_1003,,,,,;10,,,
cgrates.org,ROUTE_ACNT_1001,,,,,vendor2,*gte:~*accounts.1001.Balances[Concrete1].Units:10,,,,,;20,,,
cgrates.org,ROUTE_ACNT_1001,,,,,vendor3,FLTR_DEST_1003;*prefix:~*req.Account:10,,,,,;40,,,
cgrates.org,ROUTE_ACNT_1001,,,,,vendor4,,,,,,;35,,,
cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,,*weight,,,vendor1,FLTR_DEST_1003,,,,,;10,,
cgrates.org,ROUTE_ACNT_1001,,,,,,vendor2,*gte:~*accounts.1001.Balances[Concrete1].Units:10,,,,,;20,,
cgrates.org,ROUTE_ACNT_1001,,,,,,vendor3,FLTR_DEST_1003;*prefix:~*req.Account:10,,,,,;40,,
cgrates.org,ROUTE_ACNT_1001,,,,,,vendor4,,,,,,;35,,
cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,,*lc,,vendor1,*lte:~*resources.RES_GRP1.TotalUsage:5,,RP_VENDOR1,,,;0,,,
cgrates.org,ROUTE_ACNT_1002,,,,,vendor2,*gte:~*stats.STATS_VENDOR_2.*acd:1m,,RP_VENDOR2,,,;0,,,
cgrates.org,ROUTE_ACNT_1002,,,,,vendor3,,,RP_VENDOR2,,,;10,,,
cgrates.org,ROUTE_ACNT_1002,,,,,vendor4,*ai:~*opts.*startTime:2013-06-01T00:00:00Z|2013-06-01T10:00:00Z,,RP_STANDARD,,,;30,,,
cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,,*lc,,,vendor1,*lte:~*resources.RES_GRP1.TotalUsage:5,,RP_VENDOR1,,,;0,,
cgrates.org,ROUTE_ACNT_1002,,,,,,vendor2,*gte:~*stats.STATS_VENDOR_2.*acd:1m,,RP_VENDOR2,,,;0,,
cgrates.org,ROUTE_ACNT_1002,,,,,,vendor3,,,RP_VENDOR2,,,;10,,
cgrates.org,ROUTE_ACNT_1002,,,,,,vendor4,*ai:~*opts.*startTime:2013-06-01T00:00:00Z|2013-06-01T10:00:00Z,,RP_STANDARD,,,;30,,
cgrates.org,ROUTE_ACNT_1003,*string:~*req.Account:1003,,*qos,*acd;*tcc,vendor1,,,,,STATS_VENDOR_1,;0,,,
cgrates.org,ROUTE_ACNT_1003,,,,,vendor2,*prefix:~*req.Destination:10,,,,STATS_VENDOR_2,;0,,,
cgrates.org,ROUTE_ACNT_1003,,,,,vendor3,*gte:~*stats.STATS_VENDOR_1.*tcc:6,,,,STATS_VENDOR_1,;20,,,
cgrates.org,ROUTE_ACNT_1003,*string:~*req.Account:1003,,*qos,*acd;*tcc,,vendor1,,,,,STATS_VENDOR_1,;0,,
cgrates.org,ROUTE_ACNT_1003,,,,,,vendor2,*prefix:~*req.Destination:10,,,,STATS_VENDOR_2,;0,,
cgrates.org,ROUTE_ACNT_1003,,,,,,vendor3,*gte:~*stats.STATS_VENDOR_1.*tcc:6,,,,STATS_VENDOR_1,;20,,
cgrates.org,ROUTE_ACNT_1004,*string:~*req.Account:1004,,*reas,,vendor1,,,,RES_GRP1,,;0,,,
cgrates.org,ROUTE_ACNT_1004,,,,,vendor2,,,,RES_GRP2,,;0,,,
cgrates.org,ROUTE_ACNT_1004,,,,,vendor3,*gte:~*resources.RES_GRP1.TotalUsage:9,,,RES_GRP2,,;10,,,
cgrates.org,ROUTE_ACNT_1004,*string:~*req.Account:1004,,*reas,,,vendor1,,,,RES_GRP1,,;0,,
cgrates.org,ROUTE_ACNT_1004,,,,,,vendor2,,,,RES_GRP2,,;0,,
cgrates.org,ROUTE_ACNT_1004,,,,,,vendor3,*gte:~*resources.RES_GRP1.TotalUsage:9,,,RES_GRP2,,;10,,
cgrates.org,ROUTE_ACNT_1005,*string:~*req.Account:1005,,*load,vendor1:3;*default:2,vendor1,,,,,STATS_VENDOR_1:*sum#1,,,,
cgrates.org,ROUTE_ACNT_1005,,,,,vendor2,,,,,STATS_VENDOR_2:*sum#1,;10,,,
cgrates.org,ROUTE_ACNT_1005,,,,,vendor3,,,,,STATS_VENDOR_2:*distinct#~*opts.*usage,,,,
cgrates.org,ROUTE_ACNT_1005,*string:~*req.Account:1005,,*load,vendor1:3;*default:2,,vendor1,,,,,STATS_VENDOR_1:*sum#1,,,
cgrates.org,ROUTE_ACNT_1005,,,,,,vendor2,,,,,STATS_VENDOR_2:*sum#1,;10,,
cgrates.org,ROUTE_ACNT_1005,,,,,,vendor3,,,,,STATS_VENDOR_2:*distinct#~*opts.*usage,,,
cgrates.org,ROUTE_HC1,Fltr_tcc,,*hc,,route1,*gte:~*resources.RES_GRP2.Available:6,,RP_VENDOR2,RES_GRP2,,;20,,,
cgrates.org,ROUTE_HC1,,,,,route2,*gte:~*resources.RES_GRP1.TotalUsage:9,,RP_VENDOR1,RES_GRP1,,;20,,,
cgrates.org,ROUTE_HC1,,,,,route3,,,RP_VENDOR1,RES_GRP2,,;10,,,
cgrates.org,ROUTE_HC1,Fltr_tcc,,*hc,,,route1,*gte:~*resources.RES_GRP2.Available:6,,RP_VENDOR2,RES_GRP2,,;20,,
cgrates.org,ROUTE_HC1,,,,,,route2,*gte:~*resources.RES_GRP1.TotalUsage:9,,RP_VENDOR1,RES_GRP1,,;20,,
cgrates.org,ROUTE_HC1,,,,,,route3,,,RP_VENDOR1,RES_GRP2,,;10,,
cgrates.org,ROUTE_QOS_STATS,*prefix:~*req.Destination:+3342,,*qos,*asr;*acd,,,,,,,,,,
cgrates.org,ROUTE_QOS_STATS,,,,,route1,,,,,STATS_TOP1,;20,,,
cgrates.org,ROUTE_QOS_STATS,,,,,route2,,,,,STATS_TOP2,;50,,,
cgrates.org,ROUTE_QOS_STATS,,,,,,route1,,,,,STATS_TOP1,;20,,
cgrates.org,ROUTE_QOS_STATS,,,,,,route2,,,,,STATS_TOP2,;50,,
cgrates.org,ROUTE_LCR,*prefix:~*req.Destination:+2273,,*lc,,,,,,,,,,,
cgrates.org,ROUTE_LCR,,,,,route1,*gte:~*stats.STATS_TOP3.*acd:1m;*lte:~*stats.STATS_TOP2.*asr:50,,RP_VENDOR1,,,;20,,,
cgrates.org,ROUTE_LCR,,,,,route2,*eq:~*stats.STATS_TOP3.*asr:100,,RP_STANDARD,,,;15,,,
cgrates.org,ROUTE_LCR,,,,,route3,*gt:~*stats.STATS_TOP1.*acd:30s,,RP_VENDOR2,,,;10,,,
cgrates.org,ROUTE_LCR,,,,,,route1,*gte:~*stats.STATS_TOP3.*acd:1m;*lte:~*stats.STATS_TOP2.*asr:50,,RP_VENDOR1,,,;20,,
cgrates.org,ROUTE_LCR,,,,,,route2,*eq:~*stats.STATS_TOP3.*asr:100,,RP_STANDARD,,,;15,,
cgrates.org,ROUTE_LCR,,,,,,route3,*gt:~*stats.STATS_TOP1.*acd:30s,,RP_VENDOR2,,,;10,,
1 #Tenant,ID,FilterIDs,Weights,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeights,RouteBlocker,RouteParameters #Tenant ID FilterIDs Weights Sorting SortingParameters Blockers RouteID RouteFilterIDs RouteAccountIDs RouteRateProfileIDs RouteResourceIDs RouteStatIDs RouteWeights RouteBlocker RouteParameters
2 cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,,*weight,,vendor1,FLTR_DEST_1003,,,,,;10,,, cgrates.org ROUTE_ACNT_1001 *string:~*req.Account:1001 *weight vendor1 FLTR_DEST_1003 ;10
3 cgrates.org,ROUTE_ACNT_1001,,,,,vendor2,*gte:~*accounts.1001.Balances[Concrete1].Units:10,,,,,;20,,, cgrates.org ROUTE_ACNT_1001 vendor2 *gte:~*accounts.1001.Balances[Concrete1].Units:10 ;20
4 cgrates.org,ROUTE_ACNT_1001,,,,,vendor3,FLTR_DEST_1003;*prefix:~*req.Account:10,,,,,;40,,, cgrates.org ROUTE_ACNT_1001 vendor3 FLTR_DEST_1003;*prefix:~*req.Account:10 ;40
5 cgrates.org,ROUTE_ACNT_1001,,,,,vendor4,,,,,,;35,,, cgrates.org ROUTE_ACNT_1001 vendor4 ;35
6 cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,,*lc,,vendor1,*lte:~*resources.RES_GRP1.TotalUsage:5,,RP_VENDOR1,,,;0,,, cgrates.org ROUTE_ACNT_1002 *string:~*req.Account:1002 *lc vendor1 *lte:~*resources.RES_GRP1.TotalUsage:5 RP_VENDOR1 ;0
7 cgrates.org,ROUTE_ACNT_1002,,,,,vendor2,*gte:~*stats.STATS_VENDOR_2.*acd:1m,,RP_VENDOR2,,,;0,,, cgrates.org ROUTE_ACNT_1002 vendor2 *gte:~*stats.STATS_VENDOR_2.*acd:1m RP_VENDOR2 ;0
8 cgrates.org,ROUTE_ACNT_1002,,,,,vendor3,,,RP_VENDOR2,,,;10,,, cgrates.org ROUTE_ACNT_1002 vendor3 RP_VENDOR2 ;10
9 cgrates.org,ROUTE_ACNT_1002,,,,,vendor4,*ai:~*opts.*startTime:2013-06-01T00:00:00Z|2013-06-01T10:00:00Z,,RP_STANDARD,,,;30,,, cgrates.org ROUTE_ACNT_1002 vendor4 *ai:~*opts.*startTime:2013-06-01T00:00:00Z|2013-06-01T10:00:00Z RP_STANDARD ;30
10 cgrates.org,ROUTE_ACNT_1003,*string:~*req.Account:1003,,*qos,*acd;*tcc,vendor1,,,,,STATS_VENDOR_1,;0,,, cgrates.org ROUTE_ACNT_1003 *string:~*req.Account:1003 *qos *acd;*tcc vendor1 STATS_VENDOR_1 ;0
11 cgrates.org,ROUTE_ACNT_1003,,,,,vendor2,*prefix:~*req.Destination:10,,,,STATS_VENDOR_2,;0,,, cgrates.org ROUTE_ACNT_1003 vendor2 *prefix:~*req.Destination:10 STATS_VENDOR_2 ;0
12 cgrates.org,ROUTE_ACNT_1003,,,,,vendor3,*gte:~*stats.STATS_VENDOR_1.*tcc:6,,,,STATS_VENDOR_1,;20,,, cgrates.org ROUTE_ACNT_1003 vendor3 *gte:~*stats.STATS_VENDOR_1.*tcc:6 STATS_VENDOR_1 ;20
13 cgrates.org,ROUTE_ACNT_1004,*string:~*req.Account:1004,,*reas,,vendor1,,,,RES_GRP1,,;0,,, cgrates.org ROUTE_ACNT_1004 *string:~*req.Account:1004 *reas vendor1 RES_GRP1 ;0
14 cgrates.org,ROUTE_ACNT_1004,,,,,vendor2,,,,RES_GRP2,,;0,,, cgrates.org ROUTE_ACNT_1004 vendor2 RES_GRP2 ;0
15 cgrates.org,ROUTE_ACNT_1004,,,,,vendor3,*gte:~*resources.RES_GRP1.TotalUsage:9,,,RES_GRP2,,;10,,, cgrates.org ROUTE_ACNT_1004 vendor3 *gte:~*resources.RES_GRP1.TotalUsage:9 RES_GRP2 ;10
16 cgrates.org,ROUTE_ACNT_1005,*string:~*req.Account:1005,,*load,vendor1:3;*default:2,vendor1,,,,,STATS_VENDOR_1:*sum#1,,,, cgrates.org ROUTE_ACNT_1005 *string:~*req.Account:1005 *load vendor1:3;*default:2 vendor1 STATS_VENDOR_1:*sum#1
17 cgrates.org,ROUTE_ACNT_1005,,,,,vendor2,,,,,STATS_VENDOR_2:*sum#1,;10,,, cgrates.org ROUTE_ACNT_1005 vendor2 STATS_VENDOR_2:*sum#1 ;10
18 cgrates.org,ROUTE_ACNT_1005,,,,,vendor3,,,,,STATS_VENDOR_2:*distinct#~*opts.*usage,,,, cgrates.org ROUTE_ACNT_1005 vendor3 STATS_VENDOR_2:*distinct#~*opts.*usage
19 cgrates.org,ROUTE_HC1,Fltr_tcc,,*hc,,route1,*gte:~*resources.RES_GRP2.Available:6,,RP_VENDOR2,RES_GRP2,,;20,,, cgrates.org ROUTE_HC1 Fltr_tcc *hc route1 *gte:~*resources.RES_GRP2.Available:6 RP_VENDOR2 RES_GRP2 ;20
20 cgrates.org,ROUTE_HC1,,,,,route2,*gte:~*resources.RES_GRP1.TotalUsage:9,,RP_VENDOR1,RES_GRP1,,;20,,, cgrates.org ROUTE_HC1 route2 *gte:~*resources.RES_GRP1.TotalUsage:9 RP_VENDOR1 RES_GRP1 ;20
21 cgrates.org,ROUTE_HC1,,,,,route3,,,RP_VENDOR1,RES_GRP2,,;10,,, cgrates.org ROUTE_HC1 route3 RP_VENDOR1 RES_GRP2 ;10
22 cgrates.org,ROUTE_QOS_STATS,*prefix:~*req.Destination:+3342,,*qos,*asr;*acd,,,,,,,,,, cgrates.org ROUTE_QOS_STATS *prefix:~*req.Destination:+3342 *qos *asr;*acd
23 cgrates.org,ROUTE_QOS_STATS,,,,,route1,,,,,STATS_TOP1,;20,,, cgrates.org ROUTE_QOS_STATS route1 STATS_TOP1 ;20
24 cgrates.org,ROUTE_QOS_STATS,,,,,route2,,,,,STATS_TOP2,;50,,, cgrates.org ROUTE_QOS_STATS route2 STATS_TOP2 ;50
25 cgrates.org,ROUTE_LCR,*prefix:~*req.Destination:+2273,,*lc,,,,,,,,,,, cgrates.org ROUTE_LCR *prefix:~*req.Destination:+2273 *lc
26 cgrates.org,ROUTE_LCR,,,,,route1,*gte:~*stats.STATS_TOP3.*acd:1m;*lte:~*stats.STATS_TOP2.*asr:50,,RP_VENDOR1,,,;20,,, cgrates.org ROUTE_LCR route1 *gte:~*stats.STATS_TOP3.*acd:1m;*lte:~*stats.STATS_TOP2.*asr:50 RP_VENDOR1 ;20
27 cgrates.org,ROUTE_LCR,,,,,route2,*eq:~*stats.STATS_TOP3.*asr:100,,RP_STANDARD,,,;15,,, cgrates.org ROUTE_LCR route2 *eq:~*stats.STATS_TOP3.*asr:100 RP_STANDARD ;15
28 cgrates.org,ROUTE_LCR,,,,,route3,*gt:~*stats.STATS_TOP1.*acd:30s,,RP_VENDOR2,,,;10,,, cgrates.org ROUTE_LCR route3 *gt:~*stats.STATS_TOP1.*acd:30s RP_VENDOR2 ;10
29
30
31
32
33
34
35
36
37
38
39

View File

@@ -113,11 +113,11 @@ cgrates.org,FLTR_DST_DE,*destinations,~*req.Destination,DST_DE
cgrates.org,FLTR_DST_NL,*destinations,~*req.Destination,DST_NL
`
RoutesCSVContent = `
#Tenant[0],ID[1],FilterIDs[2],Weights[3],Sorting[4],SortingParameters[5],RouteID[6],RouteFilterIDs[7],RouteAccountIDs[8],RouteRateProfileIDs[9],RouteResourceIDs[10],RouteStatIDs[11],RouteWeights[12],RouteBlocker[13],RouteParameters[14]
cgrates.org,RoutePrf1,*string:~*req.Account:dan,;20,*lc,,route1,FLTR_ACNT_dan,Account1;Account1_1,RPL_1,ResGroup1,Stat1,;10,true,param1
cgrates.org,RoutePrf1,,,,,route1,,,RPL_2,ResGroup2,,;10,,
cgrates.org,RoutePrf1,,,,,route1,FLTR_DST_DE,Account2,RPL_3,ResGroup3,Stat2,;10,,
cgrates.org,RoutePrf1,,,,,route1,,,,ResGroup4,Stat3,;10,,
#Tenant[0],ID[1],FilterIDs[2],Weights[3],Sorting[4],SortingParameters[5],Blockers[6],RouteID[7],RouteFilterIDs[8],RouteAccountIDs[9],RouteRateProfileIDs[10],RouteResourceIDs[11],RouteStatIDs[12],RouteWeights[13],RouteBlocker[14],RouteParameters[15]
cgrates.org,RoutePrf1,*string:~*req.Account:dan,;20,*lc,,,route1,FLTR_ACNT_dan,Account1;Account1_1,RPL_1,ResGroup1,Stat1,;10,true,param1
cgrates.org,RoutePrf1,,,,,,route1,,,RPL_2,ResGroup2,,;10,,
cgrates.org,RoutePrf1,,,,,,route1,FLTR_DST_DE,Account2,RPL_3,ResGroup3,Stat2,;10,,
cgrates.org,RoutePrf1,,,,,,route1,,,,ResGroup4,Stat3,;10,,
`
AttributesCSVContent = `
#Tenant,ID,FilterIDs,Weights,Blockers,AttributeFilterIDs,Path,Type,Value,AttributeBlockers

View File

@@ -829,14 +829,14 @@ func (tps RouteMdls) CSVHeader() (result []string) {
func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) {
filterMap := make(map[string]utils.StringSet)
mst := make(map[string]*utils.TPRouteProfile)
tpRouteProfileMap := make(map[string]*utils.TPRouteProfile)
routeMap := make(map[string]map[string]*utils.TPRoute)
sortingParameterMap := make(map[string]utils.StringSet)
for _, tp := range tps {
tenID := (&utils.TenantID{Tenant: tp.Tenant, ID: tp.ID}).TenantID()
th, found := mst[tenID]
tpRouteProfile, found := tpRouteProfileMap[tenID]
if !found {
th = &utils.TPRouteProfile{
tpRouteProfile = &utils.TPRouteProfile{
TPid: tp.Tpid,
Tenant: tp.Tenant,
ID: tp.ID,
@@ -852,9 +852,9 @@ func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) {
routeID = utils.ConcatenatedKey(routeID,
utils.NewStringSet(strings.Split(tp.RouteFilterIDs, utils.InfieldSep)).Sha1())
}
sup, found := routeMap[tenID][routeID]
tpRoute, found := routeMap[tenID][routeID]
if !found {
sup = &utils.TPRoute{
tpRoute = &utils.TPRoute{
ID: tp.RouteID,
Weights: tp.RouteWeights,
Blocker: tp.RouteBlocker,
@@ -862,29 +862,29 @@ func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) {
}
}
if tp.RouteFilterIDs != utils.EmptyString {
supFilterSplit := strings.Split(tp.RouteFilterIDs, utils.InfieldSep)
sup.FilterIDs = append(sup.FilterIDs, supFilterSplit...)
routeFilterSplit := strings.Split(tp.RouteFilterIDs, utils.InfieldSep)
tpRoute.FilterIDs = append(tpRoute.FilterIDs, routeFilterSplit...)
}
if tp.RouteRateProfileIDs != utils.EmptyString {
ratingPlanSplit := strings.Split(tp.RouteRateProfileIDs, utils.InfieldSep)
sup.RateProfileIDs = append(sup.RateProfileIDs, ratingPlanSplit...)
tpRoute.RateProfileIDs = append(tpRoute.RateProfileIDs, ratingPlanSplit...)
}
if tp.RouteResourceIDs != utils.EmptyString {
resSplit := strings.Split(tp.RouteResourceIDs, utils.InfieldSep)
sup.ResourceIDs = append(sup.ResourceIDs, resSplit...)
tpRoute.ResourceIDs = append(tpRoute.ResourceIDs, resSplit...)
}
if tp.RouteStatIDs != utils.EmptyString {
statSplit := strings.Split(tp.RouteStatIDs, utils.InfieldSep)
sup.StatIDs = append(sup.StatIDs, statSplit...)
tpRoute.StatIDs = append(tpRoute.StatIDs, statSplit...)
}
if tp.RouteAccountIDs != utils.EmptyString {
accSplit := strings.Split(tp.RouteAccountIDs, utils.InfieldSep)
sup.AccountIDs = append(sup.AccountIDs, accSplit...)
tpRoute.AccountIDs = append(tpRoute.AccountIDs, accSplit...)
}
routeMap[tenID][routeID] = sup
routeMap[tenID][routeID] = tpRoute
}
if tp.Sorting != utils.EmptyString {
th.Sorting = tp.Sorting
tpRouteProfile.Sorting = tp.Sorting
}
if tp.SortingParameters != utils.EmptyString {
if _, has := sortingParameterMap[tenID]; !has {
@@ -893,7 +893,10 @@ func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) {
sortingParameterMap[tenID].AddSlice(strings.Split(tp.SortingParameters, utils.InfieldSep))
}
if tp.Weights != utils.EmptyString {
th.Weights = tp.Weights
tpRouteProfile.Weights = tp.Weights
}
if tp.Blockers != utils.EmptyString {
tpRouteProfile.Blockers = tp.Blockers
}
if tp.FilterIDs != utils.EmptyString {
if _, has := filterMap[tenID]; !has {
@@ -901,14 +904,14 @@ func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) {
}
filterMap[tenID].AddSlice(strings.Split(tp.FilterIDs, utils.InfieldSep))
}
mst[tenID] = th
tpRouteProfileMap[tenID] = tpRouteProfile
}
result = make([]*utils.TPRouteProfile, len(mst))
result = make([]*utils.TPRouteProfile, len(tpRouteProfileMap))
i := 0
for tntID, th := range mst {
result[i] = th
for _, supData := range routeMap[tntID] {
result[i].Routes = append(result[i].Routes, supData)
for tntID, tpRouteProfile := range tpRouteProfileMap {
result[i] = tpRouteProfile
for _, routeData := range routeMap[tntID] {
result[i].Routes = append(result[i].Routes, routeData)
}
result[i].FilterIDs = filterMap[tntID].AsSlice()
result[i].SortingParameters = sortingParameterMap[tntID].AsSlice()
@@ -921,7 +924,7 @@ func APItoModelTPRoutes(st *utils.TPRouteProfile) (mdls RouteMdls) {
if len(st.Routes) == 0 {
return
}
for i, supl := range st.Routes {
for i, route := range st.Routes {
mdl := &RouteMdl{
Tenant: st.Tenant,
Tpid: st.TPid,
@@ -930,6 +933,7 @@ func APItoModelTPRoutes(st *utils.TPRouteProfile) (mdls RouteMdls) {
if i == 0 {
mdl.Sorting = st.Sorting
mdl.Weights = st.Weights
mdl.Blockers = st.Blockers
for i, val := range st.FilterIDs {
if i != 0 {
mdl.FilterIDs += utils.InfieldSep
@@ -943,40 +947,40 @@ func APItoModelTPRoutes(st *utils.TPRouteProfile) (mdls RouteMdls) {
mdl.SortingParameters += val
}
}
mdl.RouteID = supl.ID
for i, val := range supl.AccountIDs {
mdl.RouteID = route.ID
for i, val := range route.AccountIDs {
if i != 0 {
mdl.RouteAccountIDs += utils.InfieldSep
}
mdl.RouteAccountIDs += val
}
for i, val := range supl.RateProfileIDs {
for i, val := range route.RateProfileIDs {
if i != 0 {
mdl.RouteRateProfileIDs += utils.InfieldSep
}
mdl.RouteRateProfileIDs += val
}
for i, val := range supl.FilterIDs {
for i, val := range route.FilterIDs {
if i != 0 {
mdl.RouteFilterIDs += utils.InfieldSep
}
mdl.RouteFilterIDs += val
}
for i, val := range supl.ResourceIDs {
for i, val := range route.ResourceIDs {
if i != 0 {
mdl.RouteResourceIDs += utils.InfieldSep
}
mdl.RouteResourceIDs += val
}
for i, val := range supl.StatIDs {
for i, val := range route.StatIDs {
if i != 0 {
mdl.RouteStatIDs += utils.InfieldSep
}
mdl.RouteStatIDs += val
}
mdl.RouteWeights = supl.Weights
mdl.RouteParameters = supl.RouteParameters
mdl.RouteBlocker = supl.Blocker
mdl.RouteWeights = route.Weights
mdl.RouteParameters = route.RouteParameters
mdl.RouteBlocker = route.Blocker
mdls = append(mdls, mdl)
}
return
@@ -992,11 +996,18 @@ func APItoRouteProfile(tpRp *utils.TPRouteProfile, timezone string) (rp *RoutePr
FilterIDs: make([]string, len(tpRp.FilterIDs)),
}
if tpRp.Weights != utils.EmptyString {
weight, err := utils.NewDynamicWeightsFromString(tpRp.Weights, utils.InfieldSep, utils.ANDSep)
weights, err := utils.NewDynamicWeightsFromString(tpRp.Weights, utils.InfieldSep, utils.ANDSep)
if err != nil {
return nil, err
}
rp.Weights = weight
rp.Weights = weights
}
if tpRp.Blockers != utils.EmptyString {
blockers, err := utils.NewBlockersFromString(tpRp.Blockers, utils.InfieldSep, utils.ANDSep)
if err != nil {
return nil, err
}
rp.Blockers = blockers
}
for i, stp := range tpRp.SortingParameters {
rp.SortingParameters[i] = stp
@@ -1035,6 +1046,7 @@ func RouteProfileToAPI(rp *RouteProfile) (tpRp *utils.TPRouteProfile) {
SortingParameters: make([]string, len(rp.SortingParameters)),
Routes: make([]*utils.TPRoute, len(rp.Routes)),
Weights: rp.Weights.String(utils.InfieldSep, utils.ANDSep),
Blockers: rp.Blockers.String(utils.InfieldSep, utils.ANDSep),
}
for i, route := range rp.Routes {

View File

@@ -199,15 +199,16 @@ type RouteMdl struct {
Weights string `index:"3" re:""`
Sorting string `index:"4" re:""`
SortingParameters string `index:"5" re:""`
RouteID string `index:"6" re:""`
RouteFilterIDs string `index:"7" re:""`
RouteAccountIDs string `index:"8" re:""`
RouteRateProfileIDs string `index:"9" re:""`
RouteResourceIDs string `index:"10" re:""`
RouteStatIDs string `index:"11" re:""`
RouteWeights string `index:"12" re:""`
RouteBlocker bool `index:"13" re:""`
RouteParameters string `index:"14" re:""`
Blockers string `index:"6" re:""`
RouteID string `index:"7" re:""`
RouteFilterIDs string `index:"8" re:""`
RouteAccountIDs string `index:"9" re:""`
RouteRateProfileIDs string `index:"10" re:""`
RouteResourceIDs string `index:"11" re:""`
RouteStatIDs string `index:"12" re:""`
RouteWeights string `index:"13" re:""`
RouteBlocker bool `index:"14" re:""`
RouteParameters string `index:"15" re:""`
CreatedAt time.Time
}

View File

@@ -50,6 +50,7 @@ type RouteProfile struct {
FilterIDs []string
Sorting string // Sorting strategy
SortingParameters []string
Blockers utils.Blockers
Routes []*Route
Weights utils.DynamicWeights
}
@@ -182,6 +183,16 @@ func (rpS *RouteS) matchingRouteProfilesForEvent(ctx *context.Context, tnt strin
return nil, utils.ErrNotFound
}
matchingRPrf.Sort()
for i, rp := range matchingRPrf {
var blocker bool
if blocker, err = BlockerFromDynamics(ctx, rp.Blockers, rpS.fltrS, ev.Tenant, evNm); err != nil {
return
}
if blocker {
matchingRPrf = matchingRPrf[0 : i+1]
break
}
}
return
}
@@ -496,6 +507,10 @@ func (rp *RouteProfile) Set(path []string, val interface{}, newBranch bool, _ st
if val != utils.EmptyString {
rp.Weights, err = utils.NewDynamicWeightsFromString(utils.IfaceAsString(val), utils.InfieldSep, utils.ANDSep)
}
case utils.BlockersField:
if val != utils.EmptyString {
rp.Blockers, err = utils.NewBlockersFromString(utils.IfaceAsString(val), utils.InfieldSep, utils.ANDSep)
}
}
case 2:
if val == utils.EmptyString {
@@ -569,6 +584,7 @@ func (rp *RouteProfile) Merge(v2 interface{}) {
equal = false
}
rp.Weights = append(rp.Weights, vi.Weights...)
rp.Blockers = append(rp.Blockers, vi.Blockers...)
if len(vi.Sorting) != 0 {
rp.Sorting = vi.Sorting
}
@@ -634,6 +650,8 @@ func (rp *RouteProfile) FieldAsInterface(fldPath []string) (_ interface{}, err e
return rp.SortingParameters, nil
case utils.Sorting:
return rp.Sorting, nil
case utils.BlockersField:
return rp.Blockers.String(utils.InfieldSep, utils.ANDSep), nil
case utils.Routes:
return rp.Routes, nil
}

View File

@@ -302,6 +302,7 @@ type TPRouteProfile struct {
SortingParameters []string
Routes []*TPRoute
Weights string
Blockers string
}
// TPAttribute is used in TPAttributeProfile