mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
Add Blockers field for RouteProfiles
This commit is contained in:
committed by
Dan Christian Bogos
parent
729c5ca29b
commit
147cc8f8f0
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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"},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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"},
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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,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,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,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,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,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,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,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,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,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,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,,
|
||||
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -302,6 +302,7 @@ type TPRouteProfile struct {
|
||||
SortingParameters []string
|
||||
Routes []*TPRoute
|
||||
Weights string
|
||||
Blockers string
|
||||
}
|
||||
|
||||
// TPAttribute is used in TPAttributeProfile
|
||||
|
||||
Reference in New Issue
Block a user