diff --git a/apier/v1/routes_with_rates_it_test.go b/apier/v1/routes_with_rates_it_test.go index 6d94c0a58..e69de29bb 100644 --- a/apier/v1/routes_with_rates_it_test.go +++ b/apier/v1/routes_with_rates_it_test.go @@ -1,467 +0,0 @@ -// +build integration - -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ -package v1 - -import ( - "path" - "reflect" - "testing" - "time" - - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) - -var ( - sTestsRouteSWithRateSV1 = []func(t *testing.T){ - testV1RouteSWithRateSLoadConfig, - testV1RouteSWithRateSInitDataDb, - testV1RouteSWithRateSResetStorDb, - testV1RouteSWithRateSStartEngine, - testV1RouteSWithRateSRpcConn, - testV1RouteSWithRateSFromFolder, - testV1RouteSWithRateSGetRoutes, - testV1RouteSWithRateSAccountWithRateProfile, - testV1RouteSWithRateSWithEmptyRateProfileIDs, - testV1RouteSWithRateSStopEngine, - } -) - -// Test start here -func TestRouteSWithRateSV1IT(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - routeSv1ConfDIR = "routes_with_rates_internal" - case utils.MetaMySQL: - routeSv1ConfDIR = "routes_with_rates_redis" - case utils.MetaMongo: - routeSv1ConfDIR = "routes_with_rates_mongo" - case utils.MetaPostgres: - t.SkipNow() - default: - t.Fatal("Unknown Database type") - } - for _, stest := range sTestsRouteSWithRateSV1 { - t.Run(routeSv1ConfDIR, stest) - } -} - -func testV1RouteSWithRateSLoadConfig(t *testing.T) { - var err error - routeSv1CfgPath = path.Join(*dataDir, "conf", "samples", routeSv1ConfDIR) - if routeSv1Cfg, err = config.NewCGRConfigFromPath(routeSv1CfgPath); err != nil { - t.Error(err) - } -} - -func testV1RouteSWithRateSInitDataDb(t *testing.T) { - if err := engine.InitDataDb(routeSv1Cfg); err != nil { - t.Fatal(err) - } -} - -// Wipe out the cdr database -func testV1RouteSWithRateSResetStorDb(t *testing.T) { - if err := engine.InitStorDb(routeSv1Cfg); err != nil { - t.Fatal(err) - } -} - -func testV1RouteSWithRateSStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(routeSv1CfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} - -func testV1RouteSWithRateSRpcConn(t *testing.T) { - var err error - routeSv1Rpc, err = newRPCClient(routeSv1Cfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} - -func testV1RouteSWithRateSFromFolder(t *testing.T) { - var reply string - attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "routes_with_rates")} - if err := routeSv1Rpc.Call(utils.APIerSv1LoadTariffPlanFromFolder, attrs, &reply); err != nil { - t.Error(err) - } - time.Sleep(100 * time.Millisecond) -} - -func testV1RouteSWithRateSGetRoutes(t *testing.T) { - ev := &engine.ArgsGetRoutes{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "testV1RouteSWithRateSGetRoutes", - Event: map[string]interface{}{ - utils.AccountField: "1003", - utils.Subject: "1003", - utils.Destination: "1002", - utils.SetupTime: time.Date(2017, 12, 1, 14, 25, 0, 0, time.UTC), - utils.Usage: "1m20s", - "EventName": "RouteWithRateS", - }, - }, - } - expRoutes := engine.SortedRoutes{ - ProfileID: "ROUTE_LC", - Sorting: utils.MetaLC, - Count: 3, - SortedRoutes: []*engine.SortedRoute{ - { - RouteID: "route3", - SortingData: map[string]interface{}{ - utils.Cost: 0.01333333333333334, - utils.RateProfileMatched: "RT_SPECIAL_1002", - utils.Weight: 15.0, - }, - }, - { - RouteID: "route1", - SortingData: map[string]interface{}{ - utils.Cost: 0.01333333333333334, - utils.RateProfileMatched: "RT_SPECIAL_1002", - utils.Weight: 10.0, - }, - }, - { - RouteID: "route2", - SortingData: map[string]interface{}{ - utils.Cost: 0.4666666666666667, - utils.RateProfileMatched: "RT_RETAIL1", - utils.Weight: 20.0, - }, - }, - }, - } - var routesReply engine.SortedRoutes - if err := routeSv1Rpc.Call(utils.RouteSv1GetRoutes, - ev, &routesReply); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expRoutes, routesReply) { - t.Errorf("Expecting: %s, \n received: %s", - utils.ToJSON(expRoutes), utils.ToJSON(routesReply)) - } -} - -func testV1RouteSWithRateSAccountWithRateProfile(t *testing.T) { - routePrf = &RouteWithCache{ - RouteProfile: &engine.RouteProfile{ - Tenant: "cgrates.org", - ID: "RouteWithAccAndRatePrf", - FilterIDs: []string{"*string:~*req.EventType:testV1RouteSWithRateSAccountWithRateProfile"}, - Sorting: utils.MetaLC, - Routes: []*engine.Route{ - { - ID: "RouteWithAccAndRatePrf", - AccountIDs: []string{"AccWithVoice"}, - RateProfileIDs: []string{"RT_ANY2CNT_SEC"}, - Weight: 20, - }, - { - ID: "RouteWithRP", - RateProfileIDs: []string{"RT_ANY1CNT_SEC"}, - Weight: 10, - }, - }, - Weight: 100, - }, - } - - var result string - if err := routeSv1Rpc.Call(utils.APIerSv1SetRouteProfile, routePrf, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } - - attrSetBalance := utils.AttrSetBalance{ - Tenant: "cgrates.org", - Account: "AccWithVoice", - BalanceType: utils.MetaVoice, - Value: 30 * float64(time.Second), - Balance: map[string]interface{}{ - utils.ID: "VoiceBalance", - }, - } - var reply string - if err := routeSv1Rpc.Call(utils.APIerSv2SetBalance, &attrSetBalance, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Received: %s", reply) - } - var acnt *engine.Account - attrAcc := &utils.AttrGetAccount{ - Tenant: "cgrates.org", - Account: "AccWithVoice", - } - if err := routeSv1Rpc.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil { - t.Error(err) - } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 30*float64(time.Second) { - t.Errorf("Unexpected balance received : %+v", acnt.BalanceMap[utils.MetaVoice].GetTotalValue()) - } - - // test for 30 seconds usage - // we expect that the route with account to have cost 0 - tNow := time.Now() - ev := &engine.ArgsGetRoutes{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - Time: &tNow, - ID: "testV1RouteAccountWithRatingPlan", - Event: map[string]interface{}{ - utils.AccountField: "RandomAccount", - utils.Destination: "+135876", - utils.SetupTime: utils.MetaNow, - utils.Usage: "30s", - "EventType": "testV1RouteSWithRateSAccountWithRateProfile", - }, - }, - } - eSpls := &engine.SortedRoutes{ - ProfileID: "RouteWithAccAndRatePrf", - Sorting: utils.MetaLC, - Count: 2, - SortedRoutes: []*engine.SortedRoute{ - { - RouteID: "RouteWithAccAndRatePrf", - SortingData: map[string]interface{}{ - utils.AccountField: "AccWithVoice", - utils.Cost: 0.0, - utils.CapMaxUsage: 30000000000.0, - utils.Weight: 20.0, - }, - }, - { - RouteID: "RouteWithRP", - SortingData: map[string]interface{}{ - utils.Cost: 0.3, - utils.RateProfileMatched: "RT_ANY1CNT_SEC", - utils.Weight: 10.0, - }, - }, - }, - } - if *encoding == utils.MetaGOB { - eSpls.SortedRoutes[0].SortingData[utils.CapMaxUsage] = 30 * time.Second - } - var suplsReply *engine.SortedRoutes - if err := routeSv1Rpc.Call(utils.RouteSv1GetRoutes, - ev, &suplsReply); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eSpls, suplsReply) { - t.Errorf("Expecting: %s \n received: %s", - utils.ToJSON(eSpls), utils.ToJSON(suplsReply)) - } - - // test for 60 seconds usage - // 30 seconds are covered by account and the remaining will be calculated - ev = &engine.ArgsGetRoutes{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - Time: &tNow, - ID: "testV1RouteAccountWithRatingPlan", - Event: map[string]interface{}{ - utils.AccountField: "RandomAccount", - utils.Destination: "+135876", - utils.SetupTime: utils.MetaNow, - utils.Usage: "60s", - "EventType": "testV1RouteSWithRateSAccountWithRateProfile", - }, - }, - } - eSpls = &engine.SortedRoutes{ - ProfileID: "RouteWithAccAndRatePrf", - Sorting: utils.MetaLC, - Count: 2, - SortedRoutes: []*engine.SortedRoute{ - { - RouteID: "RouteWithAccAndRatePrf", - SortingData: map[string]interface{}{ - utils.AccountField: "AccWithVoice", - utils.Cost: 0.6, - utils.CapMaxUsage: 30000000000.0, - utils.RateProfileMatched: "RT_ANY2CNT_SEC", - utils.Weight: 20.0, - }, - }, - { - RouteID: "RouteWithRP", - SortingData: map[string]interface{}{ - utils.Cost: 0.6, - utils.RateProfileMatched: "RT_ANY1CNT_SEC", - utils.Weight: 10.0, - }, - }, - }, - } - if *encoding == utils.MetaGOB { - eSpls.SortedRoutes[0].SortingData[utils.CapMaxUsage] = 30 * time.Second - } - var routeRply *engine.SortedRoutes - if err := routeSv1Rpc.Call(utils.RouteSv1GetRoutes, - ev, &routeRply); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eSpls, routeRply) { - t.Errorf("Expecting: %s \n received: %s", - utils.ToJSON(eSpls), utils.ToJSON(routeRply)) - } - - // test for 61 seconds usage - // 30 seconds are covered by account and the remaining will be calculated - ev = &engine.ArgsGetRoutes{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - Time: &tNow, - ID: "testV1RouteAccountWithRatingPlan", - Event: map[string]interface{}{ - utils.AccountField: "RandomAccount", - utils.Destination: "+135876", - utils.SetupTime: utils.MetaNow, - utils.Usage: "1m1s", - "EventType": "testV1RouteSWithRateSAccountWithRateProfile", - }, - }, - } - eSpls = &engine.SortedRoutes{ - ProfileID: "RouteWithAccAndRatePrf", - Sorting: utils.MetaLC, - Count: 2, - SortedRoutes: []*engine.SortedRoute{ - { - RouteID: "RouteWithRP", - SortingData: map[string]interface{}{ - utils.Cost: 0.61, - utils.RateProfileMatched: "RT_ANY1CNT_SEC", - utils.Weight: 10.0, - }, - }, - { - RouteID: "RouteWithAccAndRatePrf", - SortingData: map[string]interface{}{ - utils.AccountField: "AccWithVoice", - utils.Cost: 0.62, - utils.CapMaxUsage: 30000000000.0, - utils.RateProfileMatched: "RT_ANY2CNT_SEC", - utils.Weight: 20.0, - }, - }, - }, - } - if *encoding == utils.MetaGOB { - eSpls.SortedRoutes[1].SortingData[utils.CapMaxUsage] = 30 * time.Second - } - var routeRply2 *engine.SortedRoutes - if err := routeSv1Rpc.Call(utils.RouteSv1GetRoutes, - ev, &routeRply2); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eSpls, routeRply2) { - t.Errorf("Expecting: %s \n received: %s", - utils.ToJSON(eSpls), utils.ToJSON(routeRply2)) - } - -} - -func testV1RouteSWithRateSWithEmptyRateProfileIDs(t *testing.T) { - routePrf = &RouteWithCache{ - RouteProfile: &engine.RouteProfile{ - Tenant: "cgrates.org", - ID: "RouteWithEmptyRatePRofileIDs", - FilterIDs: []string{"*string:~*req.EventName:testV1RouteSWithRateSWithEmptyRateProfileIDs"}, - Sorting: utils.MetaLC, - Routes: []*engine.Route{ - { - ID: "Route1", - RateProfileIDs: []string{"RT_ANY2CNT_SEC"}, - Weight: 20, - }, - { - ID: "RouteWithEmptyRP", - RateProfileIDs: []string{}, // we send empty RateProfileIDs and expected to match RT_DEFAULT - Weight: 10, - }, - }, - Weight: 100, - }, - } - - var result string - if err := routeSv1Rpc.Call(utils.APIerSv1SetRouteProfile, routePrf, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } - - ev := &engine.ArgsGetRoutes{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "testV1RouteSWithRateSGetRoutes", - Event: map[string]interface{}{ - utils.AccountField: "1003", - utils.Subject: "1003", - utils.Destination: "1002", - utils.SetupTime: time.Date(2017, 12, 1, 14, 25, 0, 0, time.UTC), - utils.Usage: "1m20s", - "EventName": "testV1RouteSWithRateSWithEmptyRateProfileIDs", - }, - }, - } - - expRoutes := engine.SortedRoutes{ - ProfileID: "RouteWithEmptyRatePRofileIDs", - Sorting: utils.MetaLC, - Count: 2, - SortedRoutes: []*engine.SortedRoute{ - { - RouteID: "RouteWithEmptyRP", - SortingData: map[string]interface{}{ - utils.Cost: 0.1333333333333334, - utils.RateProfileMatched: "RT_DEFAULT", - utils.Weight: 10.0, - }, - }, - { - RouteID: "Route1", - SortingData: map[string]interface{}{ - utils.Cost: 1.6, - utils.RateProfileMatched: "RT_ANY2CNT_SEC", - utils.Weight: 20.0, - }, - }, - }, - } - var routesReply engine.SortedRoutes - if err := routeSv1Rpc.Call(utils.RouteSv1GetRoutes, - ev, &routesReply); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expRoutes, routesReply) { - t.Errorf("Expecting: %s, \n received: %s", - utils.ToJSON(expRoutes), utils.ToJSON(routesReply)) - } - -} -func testV1RouteSWithRateSStopEngine(t *testing.T) { - if err := engine.KillEngine(100); err != nil { - t.Error(err) - } -} diff --git a/config/config_defaults.go b/config/config_defaults.go index 84378ffd2..3d950b26c 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -629,7 +629,6 @@ const CGRATES_CFG_JSON = ` "resources_conns": [], // connections to ResourceS for *res sorting, empty to disable functionality: <""|*internal|$rpc_conns_id> "stats_conns": [], // connections to StatS for *stats sorting, empty to disable stats functionality: <""|*internal|$rpc_conns_id> "rals_conns": [], // connections to Rater for calculating cost, empty to disable stats functionality: <""|*internal|$rpc_conns_id> - "rates_conns": [], // connections to RateS for calculating cost, empty to disable stats functionality: <""|*internal|$rpc_conns_id> "default_ratio":1 // default ratio used in case of *load strategy }, diff --git a/config/config_it_test.go b/config/config_it_test.go index a2bf7c9d3..be5516b3a 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -299,7 +299,6 @@ func testCGRConfigReloadSupplierS(t *testing.T) { ResourceSConns: []string{}, StatSConns: []string{}, AttributeSConns: []string{}, - RateSConns: []string{}, RALsConns: []string{}, IndexedSelects: true, DefaultRatio: 1, diff --git a/config/config_json_test.go b/config/config_json_test.go index 4bd55a942..208d1605d 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -1071,7 +1071,6 @@ func TestDfRouteSJsonCfg(t *testing.T) { Resources_conns: &[]string{}, Stats_conns: &[]string{}, Rals_conns: &[]string{}, - Rates_conns: &[]string{}, Default_ratio: utils.IntPointer(1), Nested_fields: utils.BoolPointer(false), } diff --git a/config/config_test.go b/config/config_test.go index 28a584a25..d66ccbfd7 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -824,7 +824,6 @@ func TestCgrCfgJSONDefaultRouteSCfg(t *testing.T) { ResourceSConns: []string{}, StatSConns: []string{}, RALsConns: []string{}, - RateSConns: []string{}, DefaultRatio: 1, } if !reflect.DeepEqual(eSupplSCfg, cgrCfg.routeSCfg) { @@ -2142,7 +2141,6 @@ func TestRouteSConfig(t *testing.T) { ResourceSConns: []string{}, StatSConns: []string{}, RALsConns: []string{}, - RateSConns: []string{}, DefaultRatio: 1, NestedFields: false, } @@ -4486,7 +4484,6 @@ func TestV1GetConfigRoutes(t *testing.T) { utils.ResourceSConnsCfg: []string{}, utils.StatSConnsCfg: []string{}, utils.RALsConnsCfg: []string{}, - utils.RateSConnsCfg: []string{}, utils.DefaultRatioCfg: 1, }, } @@ -5303,7 +5300,7 @@ func TestV1GetConfigAsJSONThresholdS(t *testing.T) { func TestV1GetConfigAsJSONRouteS(t *testing.T) { var reply string - expected := `{"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rals_conns":[],"rates_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]}}` + expected := `{"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rals_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]}}` cgrCfg := NewDefaultCGRConfig() if err := cgrCfg.V1GetConfigAsJSON(&SectionWithOpts{Section: RouteSJson}, &reply); err != nil { t.Error(err) @@ -5574,7 +5571,7 @@ func TestV1GetConfigAsJSONAllConfig(t *testing.T) { } }` var reply string - expected := `{"accounts":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rates_conns":[],"suffix_indexed_fields":[],"thresholds_conns":[]},"actions":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[],"tenants":[]},"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","enabled":false,"index_type":"*scorch","ttl":"24h0m0s"},"apiban":{"enabled":false,"keys":[]},"apiers":{"attributes_conns":[],"caches_conns":["*internal"],"ees_conns":[],"enabled":false,"scheduler_conns":[]},"asterisk_agent":{"asterisk_conns":[{"address":"127.0.0.1:8088","alias":"","connect_attempts":3,"password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*internal"]},"attributes":{"apiers_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"process_runs":1,"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*account_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*account_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*accounts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_triggers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*apiban":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*attribute_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*caps_events":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*cdr_ids":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*cdrs":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*charger_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*charger_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*closed_sessions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*diameter_messages":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_hosts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_loads":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_routes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatchers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*event_charges":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*filters":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*load_ids":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rating_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rating_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resource_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resource_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*reverse_destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*reverse_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*route_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*route_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rpc_connections":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rpc_responses":{"limit":0,"precache":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*session_costs":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*shared_groups":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*stat_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*statqueue_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*statqueues":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*stir":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*threshold_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*thresholds":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*timings":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_account_actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_account_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_triggers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_attributes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_chargers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_destination_rates":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_dispatcher_hosts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_dispatcher_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_filters":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rate_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rates":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rating_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rating_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_routes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_shared_groups":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_stats":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_thresholds":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_timings":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*uch":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*versions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""}},"replication_conns":[]},"cdrs":{"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":[],"rals_conns":[],"scheduler_conns":[],"session_cost_retries":5,"stats_conns":[],"store_cdrs":true,"thresholds_conns":[]},"chargers":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"configs":{"enabled":false,"root_dir":"/var/spool/cgrates/configs","url":"/configs/"},"cores":{"caps":0,"caps_stats_interval":"0","caps_strategy":"*busy","shutdown_timeout":"1s"},"data_db":{"db_host":"127.0.0.1","db_name":"10","db_password":"","db_port":6379,"db_type":"*redis","db_user":"cgrates","items":{"*account_action_plans":{"remote":false,"replicate":false},"*account_profiles":{"remote":false,"replicate":false},"*accounts":{"remote":false,"replicate":false},"*action_plans":{"remote":false,"replicate":false},"*action_profiles":{"remote":false,"replicate":false},"*action_triggers":{"remote":false,"replicate":false},"*actions":{"remote":false,"replicate":false},"*attribute_profiles":{"remote":false,"replicate":false},"*charger_profiles":{"remote":false,"replicate":false},"*destinations":{"remote":false,"replicate":false},"*dispatcher_hosts":{"remote":false,"replicate":false},"*dispatcher_profiles":{"remote":false,"replicate":false},"*filters":{"remote":false,"replicate":false},"*indexes":{"remote":false,"replicate":false},"*load_ids":{"remote":false,"replicate":false},"*rate_profiles":{"remote":false,"replicate":false},"*rating_plans":{"remote":false,"replicate":false},"*rating_profiles":{"remote":false,"replicate":false},"*resource_profiles":{"remote":false,"replicate":false},"*resources":{"remote":false,"replicate":false},"*reverse_destinations":{"remote":false,"replicate":false},"*route_profiles":{"remote":false,"replicate":false},"*shared_groups":{"remote":false,"replicate":false},"*statqueue_profiles":{"remote":false,"replicate":false},"*statqueues":{"remote":false,"replicate":false},"*threshold_profiles":{"remote":false,"replicate":false},"*thresholds":{"remote":false,"replicate":false},"*timings":{"remote":false,"replicate":false}},"opts":{"query_timeout":"10s","redis_ca_certificate":"","redis_client_certificate":"","redis_client_key":"","redis_cluster":false,"redis_cluster_ondown_delay":"0","redis_cluster_sync":"5s","redis_sentinel":"","redis_tls":false},"remote_conns":[],"replication_conns":[]},"diameter_agent":{"asr_template":"","concurrent_requests":-1,"dictionaries_path":"/usr/share/cgrates/diameter/dict/","enabled":false,"forced_disconnect":"*none","listen":"127.0.0.1:3868","listen_net":"tcp","origin_host":"CGR-DA","origin_realm":"cgrates.org","product_name":"CGRateS","rar_template":"","request_processors":[],"sessions_conns":["*internal"],"synced_conn_requests":false,"vendor_id":0},"dispatcherh":{"dispatchers_conns":[],"enabled":false,"hosts":{},"register_interval":"5m0s"},"dispatchers":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"dns_agent":{"enabled":false,"listen":"127.0.0.1:2053","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*file_csv":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"export_path":"/var/spool/cgrates/ees","field_separator":",","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"tenant":"","timezone":"","type":"*none"}]},"ers":{"enabled":false,"readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"failed_calls_prefix":"","field_separator":",","fields":[{"mandatory":true,"path":"*cgreq.ToR","tag":"ToR","type":"*variable","value":"~*req.2"},{"mandatory":true,"path":"*cgreq.OriginID","tag":"OriginID","type":"*variable","value":"~*req.3"},{"mandatory":true,"path":"*cgreq.RequestType","tag":"RequestType","type":"*variable","value":"~*req.4"},{"mandatory":true,"path":"*cgreq.Tenant","tag":"Tenant","type":"*variable","value":"~*req.6"},{"mandatory":true,"path":"*cgreq.Category","tag":"Category","type":"*variable","value":"~*req.7"},{"mandatory":true,"path":"*cgreq.Account","tag":"Account","type":"*variable","value":"~*req.8"},{"mandatory":true,"path":"*cgreq.Subject","tag":"Subject","type":"*variable","value":"~*req.9"},{"mandatory":true,"path":"*cgreq.Destination","tag":"Destination","type":"*variable","value":"~*req.10"},{"mandatory":true,"path":"*cgreq.SetupTime","tag":"SetupTime","type":"*variable","value":"~*req.11"},{"mandatory":true,"path":"*cgreq.AnswerTime","tag":"AnswerTime","type":"*variable","value":"~*req.12"},{"mandatory":true,"path":"*cgreq.Usage","tag":"Usage","type":"*variable","value":"~*req.13"}],"filters":[],"flags":[],"header_define_character":":","id":"*default","opts":{},"partial_cache_expiry_action":"","partial_record_cache":"0","processed_path":"/var/spool/cgrates/ers/out","row_length":0,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","tenant":"","timezone":"","type":"*none","xml_root_path":[""]}],"sessions_conns":["*internal"]},"filters":{"apiers_conns":[],"resources_conns":[],"stats_conns":[]},"freeswitch_agent":{"create_cdr":false,"empty_balance_ann_file":"","empty_balance_context":"","enabled":false,"event_socket_conns":[{"address":"127.0.0.1:8021","alias":"127.0.0.1:8021","password":"ClueCon","reconnects":5}],"extra_fields":"","low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*internal"],"subscribe_park":true},"general":{"connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","locking_timeout":"0","log_level":6,"logger":"*syslog","max_call_duration":"3h0m0s","max_parallel_conns":100,"min_call_duration":"0","node_id":"ENGINE1","poster_attempts":3,"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"},"http":{"auth_users":{},"client_opts":{"dialFallbackDelay":"300ms","dialKeepAlive":"30s","dialTimeout":"30s","disableCompression":false,"disableKeepAlives":false,"expectContinueTimeout":"0","forceAttemptHttp2":true,"idleConnTimeout":"90s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0","skipTlsVerify":false,"tlsHandshakeTimeout":"10s"},"dispatchers_registrar_url":"/dispatchers_registrar","freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","use_basic_auth":false,"ws_url":"/ws"},"http_agent":[],"kamailio_agent":{"create_cdr":false,"enabled":false,"evapi_conns":[{"address":"127.0.0.1:8448","alias":"","reconnects":5}],"sessions_conns":["*internal"],"timezone":""},"listen":{"http":"127.0.0.1:2080","http_tls":"127.0.0.1:2280","rpc_gob":"127.0.0.1:2013","rpc_gob_tls":"127.0.0.1:2023","rpc_json":"127.0.0.1:2012","rpc_json_tls":"127.0.0.1:2022"},"loader":{"caches_conns":["*localhost"],"data_path":"./","disable_reverse":false,"field_separator":",","gapi_credentials":".gapi/credentials.json","gapi_token":".gapi/token.json","scheduler_conns":["*localhost"],"tpid":""},"loaders":[{"caches_conns":["*internal"],"data":[{"fields":[{"mandatory":true,"path":"Tenant","tag":"TenantID","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ProfileID","type":"*variable","value":"~*req.1"},{"path":"Contexts","tag":"Contexts","type":"*variable","value":"~*req.2"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.3"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.4"},{"path":"AttributeFilterIDs","tag":"AttributeFilterIDs","type":"*variable","value":"~*req.5"},{"path":"Path","tag":"Path","type":"*variable","value":"~*req.6"},{"path":"Type","tag":"Type","type":"*variable","value":"~*req.7"},{"path":"Value","tag":"Value","type":"*variable","value":"~*req.8"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.9"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.10"}],"file_name":"Attributes.csv","flags":null,"type":"*attributes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Type","tag":"Type","type":"*variable","value":"~*req.2"},{"path":"Element","tag":"Element","type":"*variable","value":"~*req.3"},{"path":"Values","tag":"Values","type":"*variable","value":"~*req.4"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.5"}],"file_name":"Filters.csv","flags":null,"type":"*filters"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"UsageTTL","tag":"TTL","type":"*variable","value":"~*req.4"},{"path":"Limit","tag":"Limit","type":"*variable","value":"~*req.5"},{"path":"AllocationMessage","tag":"AllocationMessage","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.9"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.10"}],"file_name":"Resources.csv","flags":null,"type":"*resources"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.4"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.5"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.6"},{"path":"MetricIDs","tag":"MetricIDs","type":"*variable","value":"~*req.7"},{"path":"MetricFilterIDs","tag":"MetricFilterIDs","type":"*variable","value":"~*req.8"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.9"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.10"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.11"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.12"}],"file_name":"Stats.csv","flags":null,"type":"*stats"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"MaxHits","tag":"MaxHits","type":"*variable","value":"~*req.4"},{"path":"MinHits","tag":"MinHits","type":"*variable","value":"~*req.5"},{"path":"MinSleep","tag":"MinSleep","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.8"},{"path":"ActionIDs","tag":"ActionIDs","type":"*variable","value":"~*req.9"},{"path":"Async","tag":"Async","type":"*variable","value":"~*req.10"}],"file_name":"Thresholds.csv","flags":null,"type":"*thresholds"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.4"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.5"},{"path":"RouteID","tag":"RouteID","type":"*variable","value":"~*req.6"},{"path":"RouteFilterIDs","tag":"RouteFilterIDs","type":"*variable","value":"~*req.7"},{"path":"RouteAccountIDs","tag":"RouteAccountIDs","type":"*variable","value":"~*req.8"},{"path":"RouteRatingPlanIDs","tag":"RouteRatingPlanIDs","type":"*variable","value":"~*req.9"},{"path":"RouteResourceIDs","tag":"RouteResourceIDs","type":"*variable","value":"~*req.10"},{"path":"RouteStatIDs","tag":"RouteStatIDs","type":"*variable","value":"~*req.11"},{"path":"RouteWeight","tag":"RouteWeight","type":"*variable","value":"~*req.12"},{"path":"RouteBlocker","tag":"RouteBlocker","type":"*variable","value":"~*req.13"},{"path":"RouteParameters","tag":"RouteParameters","type":"*variable","value":"~*req.14"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.15"}],"file_name":"Routes.csv","flags":null,"type":"*routes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"RunID","tag":"RunID","type":"*variable","value":"~*req.4"},{"path":"AttributeIDs","tag":"AttributeIDs","type":"*variable","value":"~*req.5"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.6"}],"file_name":"Chargers.csv","flags":null,"type":"*chargers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Contexts","tag":"Contexts","type":"*variable","value":"~*req.2"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.3"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.4"},{"path":"Strategy","tag":"Strategy","type":"*variable","value":"~*req.5"},{"path":"StrategyParameters","tag":"StrategyParameters","type":"*variable","value":"~*req.6"},{"path":"ConnID","tag":"ConnID","type":"*variable","value":"~*req.7"},{"path":"ConnFilterIDs","tag":"ConnFilterIDs","type":"*variable","value":"~*req.8"},{"path":"ConnWeight","tag":"ConnWeight","type":"*variable","value":"~*req.9"},{"path":"ConnBlocker","tag":"ConnBlocker","type":"*variable","value":"~*req.10"},{"path":"ConnParameters","tag":"ConnParameters","type":"*variable","value":"~*req.11"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.12"}],"file_name":"DispatcherProfiles.csv","flags":null,"type":"*dispatchers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Address","tag":"Address","type":"*variable","value":"~*req.2"},{"path":"Transport","tag":"Transport","type":"*variable","value":"~*req.3"},{"path":"TLS","tag":"TLS","type":"*variable","value":"~*req.4"}],"file_name":"DispatcherHosts.csv","flags":null,"type":"*dispatcher_hosts"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"MinCost","tag":"MinCost","type":"*variable","value":"~*req.5"},{"path":"MaxCost","tag":"MaxCost","type":"*variable","value":"~*req.6"},{"path":"MaxCostStrategy","tag":"MaxCostStrategy","type":"*variable","value":"~*req.7"},{"path":"RateID","tag":"RateID","type":"*variable","value":"~*req.8"},{"path":"RateFilterIDs","tag":"RateFilterIDs","type":"*variable","value":"~*req.9"},{"path":"RateActivationTimes","tag":"RateActivationTimes","type":"*variable","value":"~*req.10"},{"path":"RateWeight","tag":"RateWeight","type":"*variable","value":"~*req.11"},{"path":"RateBlocker","tag":"RateBlocker","type":"*variable","value":"~*req.12"},{"path":"RateIntervalStart","tag":"RateIntervalStart","type":"*variable","value":"~*req.13"},{"path":"RateFixedFee","tag":"RateFixedFee","type":"*variable","value":"~*req.14"},{"path":"RateRecurrentFee","tag":"RateRecurrentFee","type":"*variable","value":"~*req.15"},{"path":"RateUnit","tag":"RateUnit","type":"*variable","value":"~*req.16"},{"path":"RateIncrement","tag":"RateIncrement","type":"*variable","value":"~*req.17"}],"file_name":"RateProfiles.csv","flags":null,"type":"*rate_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.5"},{"path":"TargetType","tag":"TargetType","type":"*variable","value":"~*req.6"},{"path":"TargetIDs","tag":"TargetIDs","type":"*variable","value":"~*req.7"},{"path":"ActionID","tag":"ActionID","type":"*variable","value":"~*req.8"},{"path":"ActionFilterIDs","tag":"ActionFilterIDs","type":"*variable","value":"~*req.9"},{"path":"ActionBlocker","tag":"ActionBlocker","type":"*variable","value":"~*req.10"},{"path":"ActionTTL","tag":"ActionTTL","type":"*variable","value":"~*req.11"},{"path":"ActionType","tag":"ActionType","type":"*variable","value":"~*req.12"},{"path":"ActionOpts","tag":"ActionOpts","type":"*variable","value":"~*req.13"},{"path":"ActionPath","tag":"ActionPath","type":"*variable","value":"~*req.14"},{"path":"ActionValue","tag":"ActionValue","type":"*variable","value":"~*req.15"}],"file_name":"ActionProfiles.csv","flags":null,"type":"*action_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"BalanceID","tag":"BalanceID","type":"*variable","value":"~*req.5"},{"path":"BalanceFilterIDs","tag":"BalanceFilterIDs","type":"*variable","value":"~*req.6"},{"path":"BalanceWeight","tag":"BalanceWeight","type":"*variable","value":"~*req.7"},{"path":"BalanceBlocker","tag":"BalanceBlocker","type":"*variable","value":"~*req.8"},{"path":"BalanceType","tag":"BalanceType","type":"*variable","value":"~*req.9"},{"path":"BalanceOpts","tag":"BalanceOpts","type":"*variable","value":"~*req.10"},{"path":"BalanceCostIncrements","tag":"BalanceCostIncrements","type":"*variable","value":"~*req.11"},{"path":"BalanceCostAttributes","tag":"BalanceCostAttributes","type":"*variable","value":"~*req.12"},{"path":"BalanceUnitFactors","tag":"BalanceUnitFactors","type":"*variable","value":"~*req.13"},{"path":"BalanceUnits","tag":"BalanceUnits","type":"*variable","value":"~*req.14"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.15"}],"file_name":"AccountProfiles.csv","flags":null,"type":"*account_profiles"}],"dry_run":false,"enabled":false,"field_separator":",","id":"*default","lock_filename":".cgr.lck","run_delay":"0","tenant":"","tp_in_dir":"/var/spool/cgrates/loader/in","tp_out_dir":"/var/spool/cgrates/loader/out"}],"mailer":{"auth_password":"CGRateS.org","auth_user":"cgrates","from_address":"cgr-mailer@localhost.localdomain","server":"localhost"},"migrator":{"out_datadb_encoding":"msgpack","out_datadb_host":"127.0.0.1","out_datadb_name":"10","out_datadb_opts":{"redis_ca_certificate":"","redis_client_certificate":"","redis_client_key":"","redis_cluster":false,"redis_cluster_ondown_delay":"0","redis_cluster_sync":"5s","redis_sentinel":"","redis_tls":false},"out_datadb_password":"","out_datadb_port":"6379","out_datadb_type":"redis","out_datadb_user":"cgrates","out_stordb_host":"127.0.0.1","out_stordb_name":"cgrates","out_stordb_opts":{},"out_stordb_password":"","out_stordb_port":"3306","out_stordb_type":"mysql","out_stordb_user":"cgrates","users_filters":[]},"radius_agent":{"client_dictionaries":{"*default":"/usr/share/cgrates/radius/dict/"},"client_secrets":{"*default":"CGRateS.org"},"enabled":false,"listen_acct":"127.0.0.1:1813","listen_auth":"127.0.0.1:1812","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"]},"rals":{"balance_rating_subject":{"*any":"*zero1ns","*voice":"*zero1s"},"caches_conns":["*internal"],"dynaprepaid_actionplans":[],"enabled":false,"max_computed_usage":{"*any":"189h0m0s","*data":"107374182400","*mms":"10000","*sms":"10000","*voice":"72h0m0s"},"max_increments":1000000,"remove_expired":true,"rp_subject_prefix_matching":false,"stats_conns":[],"thresholds_conns":[]},"rates":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rate_indexed_selects":true,"rate_nested_fields":false,"rate_prefix_indexed_fields":[],"rate_suffix_indexed_fields":[],"suffix_indexed_fields":[],"verbosity":1000},"resources":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rals_conns":[],"rates_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*internal":{"conns":[{"TLS":false,"address":"*internal","synchronous":false,"transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"TLS":false,"address":"127.0.0.1:2012","synchronous":false,"transport":"*json"}],"poolSize":0,"strategy":"*first"}},"schedulers":{"cdrs_conns":[],"enabled":false,"filters":[],"stats_conns":[],"thresholds_conns":[]},"sessions":{"alterable_fields":[],"attributes_conns":[],"cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":1,"debit_interval":"0","enabled":false,"listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","rals_conns":[],"replication_conns":[],"resources_conns":[],"routes_conns":[],"scheduler_conns":[],"session_indexes":[],"session_ttl":"0","stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]},"sip_agent":{"enabled":false,"listen":"127.0.0.1:5060","listen_net":"udp","request_processors":[],"retransmission_timer":1000000000,"sessions_conns":["*internal"],"timezone":""},"stats":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","store_uncompressed_limit":0,"suffix_indexed_fields":[],"thresholds_conns":[]},"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"remote":false,"replicate":false},"*session_costs":{"remote":false,"replicate":false},"*tp_account_actions":{"remote":false,"replicate":false},"*tp_account_profiles":{"remote":false,"replicate":false},"*tp_action_plans":{"remote":false,"replicate":false},"*tp_action_profiles":{"remote":false,"replicate":false},"*tp_action_triggers":{"remote":false,"replicate":false},"*tp_actions":{"remote":false,"replicate":false},"*tp_attributes":{"remote":false,"replicate":false},"*tp_chargers":{"remote":false,"replicate":false},"*tp_destination_rates":{"remote":false,"replicate":false},"*tp_destinations":{"remote":false,"replicate":false},"*tp_dispatcher_hosts":{"remote":false,"replicate":false},"*tp_dispatcher_profiles":{"remote":false,"replicate":false},"*tp_filters":{"remote":false,"replicate":false},"*tp_rate_profiles":{"remote":false,"replicate":false},"*tp_rates":{"remote":false,"replicate":false},"*tp_rating_plans":{"remote":false,"replicate":false},"*tp_rating_profiles":{"remote":false,"replicate":false},"*tp_resources":{"remote":false,"replicate":false},"*tp_routes":{"remote":false,"replicate":false},"*tp_shared_groups":{"remote":false,"replicate":false},"*tp_stats":{"remote":false,"replicate":false},"*tp_thresholds":{"remote":false,"replicate":false},"*tp_timings":{"remote":false,"replicate":false},"*versions":{"remote":false,"replicate":false}},"opts":{"conn_max_lifetime":0,"max_idle_conns":10,"max_open_conns":100,"query_timeout":"10s","sslmode":"disable"},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]},"suretax":{"bill_to_number":"","business_unit":"","client_number":"","client_tracking":"~*req.CGRID","customer_number":"~*req.Subject","include_local_cost":false,"orig_number":"~*req.Subject","p2pplus4":"","p2pzipcode":"","plus4":"","regulatory_code":"03","response_group":"03","response_type":"D4","return_file_code":"0","sales_type_code":"R","tax_exemption_code_list":"","tax_included":"0","tax_situs_rule":"04","term_number":"~*req.Destination","timezone":"UTC","trans_type_code":"010101","unit_type":"00","units":"1","url":"","validation_key":"","zipcode":""},"templates":{"*asr":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"}],"*cca":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"path":"*rep.Result-Code","tag":"ResultCode","type":"*constant","value":"2001"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"},{"mandatory":true,"path":"*rep.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"mandatory":true,"path":"*rep.CC-Request-Type","tag":"CCRequestType","type":"*variable","value":"~*req.CC-Request-Type"},{"mandatory":true,"path":"*rep.CC-Request-Number","tag":"CCRequestNumber","type":"*variable","value":"~*req.CC-Request-Number"}],"*err":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"}],"*errSip":[{"mandatory":true,"path":"*rep.Request","tag":"Request","type":"*constant","value":"SIP/2.0 500 Internal Server Error"}],"*rar":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"path":"*diamreq.Re-Auth-Request-Type","tag":"ReAuthRequestType","type":"*constant","value":"0"}]},"thresholds":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[]},"tls":{"ca_certificate":"","client_certificate":"","client_key":"","server_certificate":"","server_key":"","server_name":"","server_policy":4}}` + expected := `{"accounts":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rates_conns":[],"suffix_indexed_fields":[],"thresholds_conns":[]},"actions":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[],"tenants":[]},"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","enabled":false,"index_type":"*scorch","ttl":"24h0m0s"},"apiban":{"enabled":false,"keys":[]},"apiers":{"attributes_conns":[],"caches_conns":["*internal"],"ees_conns":[],"enabled":false,"scheduler_conns":[]},"asterisk_agent":{"asterisk_conns":[{"address":"127.0.0.1:8088","alias":"","connect_attempts":3,"password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*internal"]},"attributes":{"apiers_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"process_runs":1,"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*account_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*account_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*accounts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*action_triggers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*apiban":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*attribute_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*caps_events":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*cdr_ids":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*cdrs":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*charger_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*charger_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*closed_sessions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*diameter_messages":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_hosts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_loads":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatcher_routes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*dispatchers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*event_charges":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*filters":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*load_ids":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_profile_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rate_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rating_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rating_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resource_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resource_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*reverse_destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*reverse_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*route_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*route_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rpc_connections":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*rpc_responses":{"limit":0,"precache":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*session_costs":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*shared_groups":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*stat_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*statqueue_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*statqueues":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*stir":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*threshold_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*thresholds":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*timings":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_account_actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_account_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_action_triggers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_actions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_attributes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_chargers":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_destination_rates":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_destinations":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_dispatcher_hosts":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_dispatcher_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_filters":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rate_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rates":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rating_plans":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_rating_profiles":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_resources":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_routes":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_shared_groups":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_stats":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_thresholds":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*tp_timings":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""},"*uch":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*versions":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":""}},"replication_conns":[]},"cdrs":{"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":[],"rals_conns":[],"scheduler_conns":[],"session_cost_retries":5,"stats_conns":[],"store_cdrs":true,"thresholds_conns":[]},"chargers":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"configs":{"enabled":false,"root_dir":"/var/spool/cgrates/configs","url":"/configs/"},"cores":{"caps":0,"caps_stats_interval":"0","caps_strategy":"*busy","shutdown_timeout":"1s"},"data_db":{"db_host":"127.0.0.1","db_name":"10","db_password":"","db_port":6379,"db_type":"*redis","db_user":"cgrates","items":{"*account_action_plans":{"remote":false,"replicate":false},"*account_profiles":{"remote":false,"replicate":false},"*accounts":{"remote":false,"replicate":false},"*action_plans":{"remote":false,"replicate":false},"*action_profiles":{"remote":false,"replicate":false},"*action_triggers":{"remote":false,"replicate":false},"*actions":{"remote":false,"replicate":false},"*attribute_profiles":{"remote":false,"replicate":false},"*charger_profiles":{"remote":false,"replicate":false},"*destinations":{"remote":false,"replicate":false},"*dispatcher_hosts":{"remote":false,"replicate":false},"*dispatcher_profiles":{"remote":false,"replicate":false},"*filters":{"remote":false,"replicate":false},"*indexes":{"remote":false,"replicate":false},"*load_ids":{"remote":false,"replicate":false},"*rate_profiles":{"remote":false,"replicate":false},"*rating_plans":{"remote":false,"replicate":false},"*rating_profiles":{"remote":false,"replicate":false},"*resource_profiles":{"remote":false,"replicate":false},"*resources":{"remote":false,"replicate":false},"*reverse_destinations":{"remote":false,"replicate":false},"*route_profiles":{"remote":false,"replicate":false},"*shared_groups":{"remote":false,"replicate":false},"*statqueue_profiles":{"remote":false,"replicate":false},"*statqueues":{"remote":false,"replicate":false},"*threshold_profiles":{"remote":false,"replicate":false},"*thresholds":{"remote":false,"replicate":false},"*timings":{"remote":false,"replicate":false}},"opts":{"query_timeout":"10s","redis_ca_certificate":"","redis_client_certificate":"","redis_client_key":"","redis_cluster":false,"redis_cluster_ondown_delay":"0","redis_cluster_sync":"5s","redis_sentinel":"","redis_tls":false},"remote_conns":[],"replication_conns":[]},"diameter_agent":{"asr_template":"","concurrent_requests":-1,"dictionaries_path":"/usr/share/cgrates/diameter/dict/","enabled":false,"forced_disconnect":"*none","listen":"127.0.0.1:3868","listen_net":"tcp","origin_host":"CGR-DA","origin_realm":"cgrates.org","product_name":"CGRateS","rar_template":"","request_processors":[],"sessions_conns":["*internal"],"synced_conn_requests":false,"vendor_id":0},"dispatcherh":{"dispatchers_conns":[],"enabled":false,"hosts":{},"register_interval":"5m0s"},"dispatchers":{"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"dns_agent":{"enabled":false,"listen":"127.0.0.1:2053","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*file_csv":{"limit":-1,"precache":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"export_path":"/var/spool/cgrates/ees","field_separator":",","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"tenant":"","timezone":"","type":"*none"}]},"ers":{"enabled":false,"readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"failed_calls_prefix":"","field_separator":",","fields":[{"mandatory":true,"path":"*cgreq.ToR","tag":"ToR","type":"*variable","value":"~*req.2"},{"mandatory":true,"path":"*cgreq.OriginID","tag":"OriginID","type":"*variable","value":"~*req.3"},{"mandatory":true,"path":"*cgreq.RequestType","tag":"RequestType","type":"*variable","value":"~*req.4"},{"mandatory":true,"path":"*cgreq.Tenant","tag":"Tenant","type":"*variable","value":"~*req.6"},{"mandatory":true,"path":"*cgreq.Category","tag":"Category","type":"*variable","value":"~*req.7"},{"mandatory":true,"path":"*cgreq.Account","tag":"Account","type":"*variable","value":"~*req.8"},{"mandatory":true,"path":"*cgreq.Subject","tag":"Subject","type":"*variable","value":"~*req.9"},{"mandatory":true,"path":"*cgreq.Destination","tag":"Destination","type":"*variable","value":"~*req.10"},{"mandatory":true,"path":"*cgreq.SetupTime","tag":"SetupTime","type":"*variable","value":"~*req.11"},{"mandatory":true,"path":"*cgreq.AnswerTime","tag":"AnswerTime","type":"*variable","value":"~*req.12"},{"mandatory":true,"path":"*cgreq.Usage","tag":"Usage","type":"*variable","value":"~*req.13"}],"filters":[],"flags":[],"header_define_character":":","id":"*default","opts":{},"partial_cache_expiry_action":"","partial_record_cache":"0","processed_path":"/var/spool/cgrates/ers/out","row_length":0,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","tenant":"","timezone":"","type":"*none","xml_root_path":[""]}],"sessions_conns":["*internal"]},"filters":{"apiers_conns":[],"resources_conns":[],"stats_conns":[]},"freeswitch_agent":{"create_cdr":false,"empty_balance_ann_file":"","empty_balance_context":"","enabled":false,"event_socket_conns":[{"address":"127.0.0.1:8021","alias":"127.0.0.1:8021","password":"ClueCon","reconnects":5}],"extra_fields":"","low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*internal"],"subscribe_park":true},"general":{"connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","locking_timeout":"0","log_level":6,"logger":"*syslog","max_call_duration":"3h0m0s","max_parallel_conns":100,"min_call_duration":"0","node_id":"ENGINE1","poster_attempts":3,"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"},"http":{"auth_users":{},"client_opts":{"dialFallbackDelay":"300ms","dialKeepAlive":"30s","dialTimeout":"30s","disableCompression":false,"disableKeepAlives":false,"expectContinueTimeout":"0","forceAttemptHttp2":true,"idleConnTimeout":"90s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0","skipTlsVerify":false,"tlsHandshakeTimeout":"10s"},"dispatchers_registrar_url":"/dispatchers_registrar","freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","use_basic_auth":false,"ws_url":"/ws"},"http_agent":[],"kamailio_agent":{"create_cdr":false,"enabled":false,"evapi_conns":[{"address":"127.0.0.1:8448","alias":"","reconnects":5}],"sessions_conns":["*internal"],"timezone":""},"listen":{"http":"127.0.0.1:2080","http_tls":"127.0.0.1:2280","rpc_gob":"127.0.0.1:2013","rpc_gob_tls":"127.0.0.1:2023","rpc_json":"127.0.0.1:2012","rpc_json_tls":"127.0.0.1:2022"},"loader":{"caches_conns":["*localhost"],"data_path":"./","disable_reverse":false,"field_separator":",","gapi_credentials":".gapi/credentials.json","gapi_token":".gapi/token.json","scheduler_conns":["*localhost"],"tpid":""},"loaders":[{"caches_conns":["*internal"],"data":[{"fields":[{"mandatory":true,"path":"Tenant","tag":"TenantID","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ProfileID","type":"*variable","value":"~*req.1"},{"path":"Contexts","tag":"Contexts","type":"*variable","value":"~*req.2"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.3"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.4"},{"path":"AttributeFilterIDs","tag":"AttributeFilterIDs","type":"*variable","value":"~*req.5"},{"path":"Path","tag":"Path","type":"*variable","value":"~*req.6"},{"path":"Type","tag":"Type","type":"*variable","value":"~*req.7"},{"path":"Value","tag":"Value","type":"*variable","value":"~*req.8"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.9"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.10"}],"file_name":"Attributes.csv","flags":null,"type":"*attributes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Type","tag":"Type","type":"*variable","value":"~*req.2"},{"path":"Element","tag":"Element","type":"*variable","value":"~*req.3"},{"path":"Values","tag":"Values","type":"*variable","value":"~*req.4"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.5"}],"file_name":"Filters.csv","flags":null,"type":"*filters"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"UsageTTL","tag":"TTL","type":"*variable","value":"~*req.4"},{"path":"Limit","tag":"Limit","type":"*variable","value":"~*req.5"},{"path":"AllocationMessage","tag":"AllocationMessage","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.9"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.10"}],"file_name":"Resources.csv","flags":null,"type":"*resources"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.4"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.5"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.6"},{"path":"MetricIDs","tag":"MetricIDs","type":"*variable","value":"~*req.7"},{"path":"MetricFilterIDs","tag":"MetricFilterIDs","type":"*variable","value":"~*req.8"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.9"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.10"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.11"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.12"}],"file_name":"Stats.csv","flags":null,"type":"*stats"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"MaxHits","tag":"MaxHits","type":"*variable","value":"~*req.4"},{"path":"MinHits","tag":"MinHits","type":"*variable","value":"~*req.5"},{"path":"MinSleep","tag":"MinSleep","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.8"},{"path":"ActionIDs","tag":"ActionIDs","type":"*variable","value":"~*req.9"},{"path":"Async","tag":"Async","type":"*variable","value":"~*req.10"}],"file_name":"Thresholds.csv","flags":null,"type":"*thresholds"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.4"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.5"},{"path":"RouteID","tag":"RouteID","type":"*variable","value":"~*req.6"},{"path":"RouteFilterIDs","tag":"RouteFilterIDs","type":"*variable","value":"~*req.7"},{"path":"RouteAccountIDs","tag":"RouteAccountIDs","type":"*variable","value":"~*req.8"},{"path":"RouteRatingPlanIDs","tag":"RouteRatingPlanIDs","type":"*variable","value":"~*req.9"},{"path":"RouteResourceIDs","tag":"RouteResourceIDs","type":"*variable","value":"~*req.10"},{"path":"RouteStatIDs","tag":"RouteStatIDs","type":"*variable","value":"~*req.11"},{"path":"RouteWeight","tag":"RouteWeight","type":"*variable","value":"~*req.12"},{"path":"RouteBlocker","tag":"RouteBlocker","type":"*variable","value":"~*req.13"},{"path":"RouteParameters","tag":"RouteParameters","type":"*variable","value":"~*req.14"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.15"}],"file_name":"Routes.csv","flags":null,"type":"*routes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"RunID","tag":"RunID","type":"*variable","value":"~*req.4"},{"path":"AttributeIDs","tag":"AttributeIDs","type":"*variable","value":"~*req.5"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.6"}],"file_name":"Chargers.csv","flags":null,"type":"*chargers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Contexts","tag":"Contexts","type":"*variable","value":"~*req.2"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.3"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.4"},{"path":"Strategy","tag":"Strategy","type":"*variable","value":"~*req.5"},{"path":"StrategyParameters","tag":"StrategyParameters","type":"*variable","value":"~*req.6"},{"path":"ConnID","tag":"ConnID","type":"*variable","value":"~*req.7"},{"path":"ConnFilterIDs","tag":"ConnFilterIDs","type":"*variable","value":"~*req.8"},{"path":"ConnWeight","tag":"ConnWeight","type":"*variable","value":"~*req.9"},{"path":"ConnBlocker","tag":"ConnBlocker","type":"*variable","value":"~*req.10"},{"path":"ConnParameters","tag":"ConnParameters","type":"*variable","value":"~*req.11"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.12"}],"file_name":"DispatcherProfiles.csv","flags":null,"type":"*dispatchers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Address","tag":"Address","type":"*variable","value":"~*req.2"},{"path":"Transport","tag":"Transport","type":"*variable","value":"~*req.3"},{"path":"TLS","tag":"TLS","type":"*variable","value":"~*req.4"}],"file_name":"DispatcherHosts.csv","flags":null,"type":"*dispatcher_hosts"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"MinCost","tag":"MinCost","type":"*variable","value":"~*req.5"},{"path":"MaxCost","tag":"MaxCost","type":"*variable","value":"~*req.6"},{"path":"MaxCostStrategy","tag":"MaxCostStrategy","type":"*variable","value":"~*req.7"},{"path":"RateID","tag":"RateID","type":"*variable","value":"~*req.8"},{"path":"RateFilterIDs","tag":"RateFilterIDs","type":"*variable","value":"~*req.9"},{"path":"RateActivationTimes","tag":"RateActivationTimes","type":"*variable","value":"~*req.10"},{"path":"RateWeight","tag":"RateWeight","type":"*variable","value":"~*req.11"},{"path":"RateBlocker","tag":"RateBlocker","type":"*variable","value":"~*req.12"},{"path":"RateIntervalStart","tag":"RateIntervalStart","type":"*variable","value":"~*req.13"},{"path":"RateFixedFee","tag":"RateFixedFee","type":"*variable","value":"~*req.14"},{"path":"RateRecurrentFee","tag":"RateRecurrentFee","type":"*variable","value":"~*req.15"},{"path":"RateUnit","tag":"RateUnit","type":"*variable","value":"~*req.16"},{"path":"RateIncrement","tag":"RateIncrement","type":"*variable","value":"~*req.17"}],"file_name":"RateProfiles.csv","flags":null,"type":"*rate_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.5"},{"path":"TargetType","tag":"TargetType","type":"*variable","value":"~*req.6"},{"path":"TargetIDs","tag":"TargetIDs","type":"*variable","value":"~*req.7"},{"path":"ActionID","tag":"ActionID","type":"*variable","value":"~*req.8"},{"path":"ActionFilterIDs","tag":"ActionFilterIDs","type":"*variable","value":"~*req.9"},{"path":"ActionBlocker","tag":"ActionBlocker","type":"*variable","value":"~*req.10"},{"path":"ActionTTL","tag":"ActionTTL","type":"*variable","value":"~*req.11"},{"path":"ActionType","tag":"ActionType","type":"*variable","value":"~*req.12"},{"path":"ActionOpts","tag":"ActionOpts","type":"*variable","value":"~*req.13"},{"path":"ActionPath","tag":"ActionPath","type":"*variable","value":"~*req.14"},{"path":"ActionValue","tag":"ActionValue","type":"*variable","value":"~*req.15"}],"file_name":"ActionProfiles.csv","flags":null,"type":"*action_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"ActivationInterval","tag":"ActivationInterval","type":"*variable","value":"~*req.3"},{"path":"Weight","tag":"Weight","type":"*variable","value":"~*req.4"},{"path":"BalanceID","tag":"BalanceID","type":"*variable","value":"~*req.5"},{"path":"BalanceFilterIDs","tag":"BalanceFilterIDs","type":"*variable","value":"~*req.6"},{"path":"BalanceWeight","tag":"BalanceWeight","type":"*variable","value":"~*req.7"},{"path":"BalanceBlocker","tag":"BalanceBlocker","type":"*variable","value":"~*req.8"},{"path":"BalanceType","tag":"BalanceType","type":"*variable","value":"~*req.9"},{"path":"BalanceOpts","tag":"BalanceOpts","type":"*variable","value":"~*req.10"},{"path":"BalanceCostIncrements","tag":"BalanceCostIncrements","type":"*variable","value":"~*req.11"},{"path":"BalanceCostAttributes","tag":"BalanceCostAttributes","type":"*variable","value":"~*req.12"},{"path":"BalanceUnitFactors","tag":"BalanceUnitFactors","type":"*variable","value":"~*req.13"},{"path":"BalanceUnits","tag":"BalanceUnits","type":"*variable","value":"~*req.14"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.15"}],"file_name":"AccountProfiles.csv","flags":null,"type":"*account_profiles"}],"dry_run":false,"enabled":false,"field_separator":",","id":"*default","lock_filename":".cgr.lck","run_delay":"0","tenant":"","tp_in_dir":"/var/spool/cgrates/loader/in","tp_out_dir":"/var/spool/cgrates/loader/out"}],"mailer":{"auth_password":"CGRateS.org","auth_user":"cgrates","from_address":"cgr-mailer@localhost.localdomain","server":"localhost"},"migrator":{"out_datadb_encoding":"msgpack","out_datadb_host":"127.0.0.1","out_datadb_name":"10","out_datadb_opts":{"redis_ca_certificate":"","redis_client_certificate":"","redis_client_key":"","redis_cluster":false,"redis_cluster_ondown_delay":"0","redis_cluster_sync":"5s","redis_sentinel":"","redis_tls":false},"out_datadb_password":"","out_datadb_port":"6379","out_datadb_type":"redis","out_datadb_user":"cgrates","out_stordb_host":"127.0.0.1","out_stordb_name":"cgrates","out_stordb_opts":{},"out_stordb_password":"","out_stordb_port":"3306","out_stordb_type":"mysql","out_stordb_user":"cgrates","users_filters":[]},"radius_agent":{"client_dictionaries":{"*default":"/usr/share/cgrates/radius/dict/"},"client_secrets":{"*default":"CGRateS.org"},"enabled":false,"listen_acct":"127.0.0.1:1813","listen_auth":"127.0.0.1:1812","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"]},"rals":{"balance_rating_subject":{"*any":"*zero1ns","*voice":"*zero1s"},"caches_conns":["*internal"],"dynaprepaid_actionplans":[],"enabled":false,"max_computed_usage":{"*any":"189h0m0s","*data":"107374182400","*mms":"10000","*sms":"10000","*voice":"72h0m0s"},"max_increments":1000000,"remove_expired":true,"rp_subject_prefix_matching":false,"stats_conns":[],"thresholds_conns":[]},"rates":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rate_indexed_selects":true,"rate_nested_fields":false,"rate_prefix_indexed_fields":[],"rate_suffix_indexed_fields":[],"suffix_indexed_fields":[],"verbosity":1000},"resources":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"rals_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*internal":{"conns":[{"TLS":false,"address":"*internal","synchronous":false,"transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"TLS":false,"address":"127.0.0.1:2012","synchronous":false,"transport":"*json"}],"poolSize":0,"strategy":"*first"}},"schedulers":{"cdrs_conns":[],"enabled":false,"filters":[],"stats_conns":[],"thresholds_conns":[]},"sessions":{"alterable_fields":[],"attributes_conns":[],"cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":1,"debit_interval":"0","enabled":false,"listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","rals_conns":[],"replication_conns":[],"resources_conns":[],"routes_conns":[],"scheduler_conns":[],"session_indexes":[],"session_ttl":"0","stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]},"sip_agent":{"enabled":false,"listen":"127.0.0.1:5060","listen_net":"udp","request_processors":[],"retransmission_timer":1000000000,"sessions_conns":["*internal"],"timezone":""},"stats":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","store_uncompressed_limit":0,"suffix_indexed_fields":[],"thresholds_conns":[]},"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"remote":false,"replicate":false},"*session_costs":{"remote":false,"replicate":false},"*tp_account_actions":{"remote":false,"replicate":false},"*tp_account_profiles":{"remote":false,"replicate":false},"*tp_action_plans":{"remote":false,"replicate":false},"*tp_action_profiles":{"remote":false,"replicate":false},"*tp_action_triggers":{"remote":false,"replicate":false},"*tp_actions":{"remote":false,"replicate":false},"*tp_attributes":{"remote":false,"replicate":false},"*tp_chargers":{"remote":false,"replicate":false},"*tp_destination_rates":{"remote":false,"replicate":false},"*tp_destinations":{"remote":false,"replicate":false},"*tp_dispatcher_hosts":{"remote":false,"replicate":false},"*tp_dispatcher_profiles":{"remote":false,"replicate":false},"*tp_filters":{"remote":false,"replicate":false},"*tp_rate_profiles":{"remote":false,"replicate":false},"*tp_rates":{"remote":false,"replicate":false},"*tp_rating_plans":{"remote":false,"replicate":false},"*tp_rating_profiles":{"remote":false,"replicate":false},"*tp_resources":{"remote":false,"replicate":false},"*tp_routes":{"remote":false,"replicate":false},"*tp_shared_groups":{"remote":false,"replicate":false},"*tp_stats":{"remote":false,"replicate":false},"*tp_thresholds":{"remote":false,"replicate":false},"*tp_timings":{"remote":false,"replicate":false},"*versions":{"remote":false,"replicate":false}},"opts":{"conn_max_lifetime":0,"max_idle_conns":10,"max_open_conns":100,"query_timeout":"10s","sslmode":"disable"},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]},"suretax":{"bill_to_number":"","business_unit":"","client_number":"","client_tracking":"~*req.CGRID","customer_number":"~*req.Subject","include_local_cost":false,"orig_number":"~*req.Subject","p2pplus4":"","p2pzipcode":"","plus4":"","regulatory_code":"03","response_group":"03","response_type":"D4","return_file_code":"0","sales_type_code":"R","tax_exemption_code_list":"","tax_included":"0","tax_situs_rule":"04","term_number":"~*req.Destination","timezone":"UTC","trans_type_code":"010101","unit_type":"00","units":"1","url":"","validation_key":"","zipcode":""},"templates":{"*asr":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"}],"*cca":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"path":"*rep.Result-Code","tag":"ResultCode","type":"*constant","value":"2001"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"},{"mandatory":true,"path":"*rep.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"mandatory":true,"path":"*rep.CC-Request-Type","tag":"CCRequestType","type":"*variable","value":"~*req.CC-Request-Type"},{"mandatory":true,"path":"*rep.CC-Request-Number","tag":"CCRequestNumber","type":"*variable","value":"~*req.CC-Request-Number"}],"*err":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"}],"*errSip":[{"mandatory":true,"path":"*rep.Request","tag":"Request","type":"*constant","value":"SIP/2.0 500 Internal Server Error"}],"*rar":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"path":"*diamreq.Re-Auth-Request-Type","tag":"ReAuthRequestType","type":"*constant","value":"0"}]},"thresholds":{"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[]},"tls":{"ca_certificate":"","client_certificate":"","client_key":"","server_certificate":"","server_key":"","server_name":"","server_policy":4}}` cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSON) if err != nil { t.Fatal(err) diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 79712a187..b75d59d42 100644 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -462,7 +462,6 @@ type RouteSJsonCfg struct { Resources_conns *[]string Stats_conns *[]string Rals_conns *[]string - Rates_conns *[]string Default_ratio *int } diff --git a/config/routescfg.go b/config/routescfg.go index accab5e6c..4cf7636dc 100644 --- a/config/routescfg.go +++ b/config/routescfg.go @@ -33,7 +33,6 @@ type RouteSCfg struct { ResourceSConns []string StatSConns []string RALsConns []string - RateSConns []string DefaultRatio int NestedFields bool } @@ -109,16 +108,6 @@ func (rts *RouteSCfg) loadFromJSONCfg(jsnCfg *RouteSJsonCfg) (err error) { } } } - if jsnCfg.Rates_conns != nil { - rts.RateSConns = make([]string, len(*jsnCfg.Rates_conns)) - for idx, conn := range *jsnCfg.Rates_conns { - // if we have the connection internal we change the name so we can have internal rpc for each subsystem - rts.RateSConns[idx] = conn - if conn == utils.MetaInternal { - rts.RateSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS) - } - } - } if jsnCfg.Default_ratio != nil { rts.DefaultRatio = *jsnCfg.Default_ratio } @@ -197,16 +186,6 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { } initialMP[utils.StatSConnsCfg] = statSConns } - if rts.RateSConns != nil { - rateSConns := make([]string, len(rts.RateSConns)) - for i, item := range rts.RateSConns { - rateSConns[i] = item - if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS) { - rateSConns[i] = utils.MetaInternal - } - } - initialMP[utils.RateSConnsCfg] = rateSConns - } return } @@ -242,13 +221,6 @@ func (rts RouteSCfg) Clone() (cln *RouteSCfg) { cln.RALsConns[i] = con } } - if rts.RateSConns != nil { - cln.RateSConns = make([]string, len(rts.RateSConns)) - for i, con := range rts.RateSConns { - cln.RateSConns[i] = con - } - } - if rts.StringIndexedFields != nil { idx := make([]string, len(*rts.StringIndexedFields)) for i, dx := range *rts.StringIndexedFields { diff --git a/config/routescfg_test.go b/config/routescfg_test.go index 599f1f545..a829a4d9f 100644 --- a/config/routescfg_test.go +++ b/config/routescfg_test.go @@ -35,7 +35,6 @@ func TestRouteSCfgloadFromJsonCfg(t *testing.T) { Resources_conns: &[]string{utils.MetaInternal, "conn1"}, Stats_conns: &[]string{utils.MetaInternal, "conn1"}, Rals_conns: &[]string{utils.MetaInternal, "conn1"}, - Rates_conns: &[]string{utils.MetaInternal, "conn1"}, Default_ratio: utils.IntPointer(10), Nested_fields: utils.BoolPointer(true), } @@ -49,7 +48,6 @@ func TestRouteSCfgloadFromJsonCfg(t *testing.T) { ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"}, StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS), "conn1"}, RALsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder), "conn1"}, - RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS), "conn1"}, DefaultRatio: 10, NestedFields: true, } @@ -75,7 +73,6 @@ func TestRouteSCfgAsMapInterface(t *testing.T) { utils.ResourceSConnsCfg: []string{}, utils.StatSConnsCfg: []string{}, utils.RALsConnsCfg: []string{}, - utils.RateSConnsCfg: []string{}, utils.DefaultRatioCfg: 1, } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { @@ -98,7 +95,6 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) { "resources_conns": ["*internal:*resources", "conn1"], "stats_conns": ["*internal:*stats", "conn1"], "rals_conns": ["*internal:*responder", "conn1"], - "rates_conns": ["*internal:*rates", "conn1"], "default_ratio":2, }, }` @@ -113,7 +109,6 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) { utils.ResourceSConnsCfg: []string{utils.MetaInternal, "conn1"}, utils.StatSConnsCfg: []string{utils.MetaInternal, "conn1"}, utils.RALsConnsCfg: []string{utils.MetaInternal, "conn1"}, - utils.RateSConnsCfg: []string{utils.MetaInternal, "conn1"}, utils.DefaultRatioCfg: 2, } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { @@ -134,7 +129,6 @@ func TestRouteSCfgClone(t *testing.T) { ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"}, StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS), "conn1"}, RALsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder), "conn1"}, - RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS), "conn1"}, DefaultRatio: 10, NestedFields: true, } @@ -154,9 +148,6 @@ func TestRouteSCfgClone(t *testing.T) { if rcv.RALsConns[1] = ""; ban.RALsConns[1] != "conn1" { t.Errorf("Expected clone to not modify the cloned") } - if rcv.RateSConns[1] = ""; ban.RateSConns[1] != "conn1" { - t.Errorf("Expected clone to not modify the cloned") - } if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { t.Errorf("Expected clone to not modify the cloned") } diff --git a/data/conf/samples/routes_with_rates_internal/cgrates.json b/data/conf/samples/routes_with_rates_internal/cgrates.json deleted file mode 100644 index 3bc3381c8..000000000 --- a/data/conf/samples/routes_with_rates_internal/cgrates.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - - -"general": { - "log_level": 7, - "reply_timeout": "50s", -}, - - -"listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", -}, - - -"data_db": { - "db_type": "*internal", -}, - - -"stor_db": { - "db_type": "*internal", -}, - - -"rals": { - "enabled": true, - "max_increments":3000000, -}, - - -"schedulers": { - "enabled": true, -}, - - -"routes": { - "enabled": true, - "rals_conns": ["*internal"], - "rates_conns": ["*internal"], -}, - - -"apiers": { - "enabled": true, - "scheduler_conns": ["*internal"], -}, - - -"rates": { - "enabled": true -}, - - -} diff --git a/data/conf/samples/routes_with_rates_mongo/cgrates.json b/data/conf/samples/routes_with_rates_mongo/cgrates.json deleted file mode 100644 index 9f30d40c6..000000000 --- a/data/conf/samples/routes_with_rates_mongo/cgrates.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - - -"general": { - "log_level": 7, - "reply_timeout": "50s", -}, - - -"listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", -}, - - -"data_db": { - "db_type": "mongo", - "db_name": "10", - "db_port": 27017 -}, - - -"stor_db": { - "db_type": "*internal", -}, - - -"rals": { - "enabled": true, - "max_increments":3000000, -}, - - -"schedulers": { - "enabled": true, -}, - - -"routes": { - "enabled": true, - "rals_conns": ["*internal"], - "rates_conns": ["*internal"], -}, - - -"apiers": { - "enabled": true, - "scheduler_conns": ["*internal"], -}, - - -"rates": { - "enabled": true -}, - - -} diff --git a/data/conf/samples/routes_with_rates_redis/cgrates.json b/data/conf/samples/routes_with_rates_redis/cgrates.json deleted file mode 100644 index 815504c88..000000000 --- a/data/conf/samples/routes_with_rates_redis/cgrates.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - - -"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", -}, - - -"stor_db": { - "db_type": "*internal", -}, - - -"rals": { - "enabled": true, - "max_increments":3000000, -}, - - -"schedulers": { - "enabled": true, -}, - - -"routes": { - "enabled": true, - "rals_conns": ["*internal"], - "rates_conns": ["*internal"] -}, - - -"apiers": { - "enabled": true, - "scheduler_conns": ["*internal"], -}, - - -"rates": { - "enabled": true -}, - - -} diff --git a/data/storage/postgres/create_tariffplan_tables.sql b/data/storage/postgres/create_tariffplan_tables.sql index 1d8e1ade0..e096f39b1 100644 --- a/data/storage/postgres/create_tariffplan_tables.sql +++ b/data/storage/postgres/create_tariffplan_tables.sql @@ -350,7 +350,6 @@ CREATE TABLE tp_routes ( "route_filter_ids" varchar(64) NOT NULL, "route_account_ids" varchar(64) NOT NULL, "route_ratingplan_ids" varchar(64) NOT NULL, - "route_rate_profile_ids" varchar(64) NOT NULL, "route_resource_ids" varchar(64) NOT NULL, "route_stat_ids" varchar(64) NOT NULL, "route_weight" decimal(8,2) NOT NULL, diff --git a/data/tariffplans/cluelrn/Routes.csv b/data/tariffplans/cluelrn/Routes.csv index af71a4e25..c49901e19 100644 --- a/data/tariffplans/cluelrn/Routes.csv +++ b/data/tariffplans/cluelrn/Routes.csv @@ -1,4 +1,4 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_CLUELRN_INTER,*string:~*req.Account:9174269000;*string:~*req.LRNJurisdiction:INTER,2017-11-27T00:00:00Z,*lc,,LEVEL3,,,RP_LEVEL3_INTER,,,,,false,,10 -cgrates.org,ROUTE_CLUELRN_INTER,,,,,TMOBILE,,,RP_TMOBILE_INTER,,,,,false,, -cgrates.org,ROUTE_CLUELRN_INTER,,,,,COMCAST,,,RP_COMCAST_INTER,,,,,false,, +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_CLUELRN_INTER,*string:~*req.Account:9174269000;*string:~*req.LRNJurisdiction:INTER,2017-11-27T00:00:00Z,*lc,,LEVEL3,,,RP_LEVEL3_INTER,,,,false,,10 +cgrates.org,ROUTE_CLUELRN_INTER,,,,,TMOBILE,,,RP_TMOBILE_INTER,,,,false,, +cgrates.org,ROUTE_CLUELRN_INTER,,,,,COMCAST,,,RP_COMCAST_INTER,,,,false,, diff --git a/data/tariffplans/dnsagent/Routes.csv b/data/tariffplans/dnsagent/Routes.csv index 713fc1194..44bb1b648 100644 --- a/data/tariffplans/dnsagent/Routes.csv +++ b/data/tariffplans/dnsagent/Routes.csv @@ -1,4 +1,4 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,,*weight,,route1,,,,,,,10,,!^(.*)$!sip:\1@172.16.1.11!,10 -cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,,5,,!^(.*)$!sip:\1@172.16.1.12!,10 +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,,*weight,,route1,,,,,,10,,!^(.*)$!sip:\1@172.16.1.11!,10 +cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,5,,!^(.*)$!sip:\1@172.16.1.12!,10 diff --git a/data/tariffplans/oldtutorial/Routes.csv b/data/tariffplans/oldtutorial/Routes.csv index 59e98d782..0b52afdd4 100644 --- a/data/tariffplans/oldtutorial/Routes.csv +++ b/data/tariffplans/oldtutorial/Routes.csv @@ -1,8 +1,8 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,5 -cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,,10,false,,10 -cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,,20,,, -cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,,15,,, +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,5 +cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,10,false,,10 +cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,20,,, +cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,15,,, diff --git a/data/tariffplans/precache/Routes.csv b/data/tariffplans/precache/Routes.csv index 59e98d782..0b52afdd4 100644 --- a/data/tariffplans/precache/Routes.csv +++ b/data/tariffplans/precache/Routes.csv @@ -1,8 +1,8 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,5 -cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,,10,false,,10 -cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,,20,,, -cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,,15,,, +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,5 +cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,10,false,,10 +cgrates.org,ROUTE_LEASTCOST_1,,,,,route2,,,RP_RETAIL1,,,20,,, +cgrates.org,ROUTE_LEASTCOST_1,,,,,route3,,,RP_SPECIAL_1002,,,15,,, diff --git a/data/tariffplans/routes_with_rates/DestinationRates.csv b/data/tariffplans/routes_with_rates/DestinationRates.csv deleted file mode 100644 index ad8f0a539..000000000 --- a/data/tariffplans/routes_with_rates/DestinationRates.csv +++ /dev/null @@ -1,2 +0,0 @@ -#Id,DestinationId,RatesTag,RoundingMethod,RoundingDecimals,MaxCost,MaxCostStrategy -DR_ANY_1CNT,*any,RT_1CNT,*up,5,0, \ No newline at end of file diff --git a/data/tariffplans/routes_with_rates/RateProfiles.csv b/data/tariffplans/routes_with_rates/RateProfiles.csv deleted file mode 100644 index fe4288ea3..000000000 --- a/data/tariffplans/routes_with_rates/RateProfiles.csv +++ /dev/null @@ -1,8 +0,0 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Weight,MinCost,MaxCost,MaxCostStrategy,RateID,RateFilterIDs,RateActivationStart,RateWeight,RateBlocker,RateIntervalStart,RateFixedFee,RateRecurrentFee,RateUnit,RateIncrement -cgrates.org,RT_SPECIAL_1002,,,0,0,0,*free,RT_ALWAYS,,"* * * * *",0,false,0s,,0.01,1m,1s -cgrates.org,RT_RETAIL1,,,0,0,0,*free,RT_ALWAYS,,"* * * * *",0,false,0s,,0.4,1m,30s -cgrates.org,RT_RETAIL1,,,,,,,RT_ALWAYS,,"* * * * *",0,false,1m,,0.2,1m,10s -cgrates.org,RT_ANY2CNT_SEC,,,0,0,0,*free,RT_ALWAYS,,"* * * * *",0,false,0s,,0.02,1s,1s -cgrates.org,RT_ANY1CNT_SEC,,,0,0,0,*free,RT_ALWAYS,,"* * * * *",0,false,0s,,0.01,1s,1s -cgrates.org,RT_DEFAULT,,,20,0,0,*free,RT_ALWAYS,,"* * * * *",0,false,0s,,0.10,1m,10s - diff --git a/data/tariffplans/routes_with_rates/Rates.csv b/data/tariffplans/routes_with_rates/Rates.csv deleted file mode 100644 index 1e52c1789..000000000 --- a/data/tariffplans/routes_with_rates/Rates.csv +++ /dev/null @@ -1,2 +0,0 @@ -#Id,ConnectFee,Rate,RateUnit,RateIncrement,GroupIntervalStart -RT_1CNT,0,0.01,60s,1s,0s \ No newline at end of file diff --git a/data/tariffplans/routes_with_rates/RatingPlans.csv b/data/tariffplans/routes_with_rates/RatingPlans.csv deleted file mode 100644 index d84767576..000000000 --- a/data/tariffplans/routes_with_rates/RatingPlans.csv +++ /dev/null @@ -1,2 +0,0 @@ -#Id,DestinationRatesId,TimingTag,Weight -RP_TESTIT1,DR_ANY_1CNT,*any,10 \ No newline at end of file diff --git a/data/tariffplans/routes_with_rates/RatingProfiles.csv b/data/tariffplans/routes_with_rates/RatingProfiles.csv deleted file mode 100644 index cbf294394..000000000 --- a/data/tariffplans/routes_with_rates/RatingProfiles.csv +++ /dev/null @@ -1,2 +0,0 @@ -#Tenant,Category,Subject,ActivationTime,RatingPlanId,RatesFallbackSubject -cgrates.org,*routes,*any,2018-01-01T00:00:00Z,RP_TESTIT1, diff --git a/data/tariffplans/routes_with_rates/Routes.csv b/data/tariffplans/routes_with_rates/Routes.csv deleted file mode 100644 index 86a6045ff..000000000 --- a/data/tariffplans/routes_with_rates/Routes.csv +++ /dev/null @@ -1,4 +0,0 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_LC,*string:~*req.EventName:RouteWithRateS,2017-11-27T00:00:00Z,*lc,,route1,,,,RT_SPECIAL_1002,,,10,false,,10 -cgrates.org,ROUTE_LC,,,,,route2,,,,RT_RETAIL1,,,20,,, -cgrates.org,ROUTE_LC,,,,,route3,,,,RT_SPECIAL_1002,,,15,,, \ No newline at end of file diff --git a/data/tariffplans/testit/Routes.csv b/data/tariffplans/testit/Routes.csv index a6118107a..01ed5aad1 100644 --- a/data/tariffplans/testit/Routes.csv +++ b/data/tariffplans/testit/Routes.csv @@ -1,33 +1,33 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,,*weight,,route1,,,,,,,20,,,10 -cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,,10,,, -cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,5 -cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,,10,false,,10 -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,2017-11-27T00:00:00Z,*hc,,route1,,,RP_SPECIAL_1002,,,,10,false,,20 -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,2017-11-27T00:00:00Z,*qos,*acd;*tcd;*asr,route1,,,,,,Stat_1;Stat_1_1,10,false,,20 -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,2017-11-27T00:00:00Z,*qos,*dcc,route1,,,,,,Stat_1;Stat_1_1,10,false,,20 -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,2017-11-27T00:00:00Z,*qos,*pdd,route1,,,,,,Stat_1;Stat_1_1,10,false,,20 -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,2017-11-27T00:00:00Z,*qos,*pdd,route1,FLTR_QOS_SP1,,,,,Stat_1;Stat_1_1,10,false,,20 -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,2017-11-27T00:00:00Z,*qos,*acd;*tcd;*asr,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,,Stat_1;Stat_1_1,10,false,,20 -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,2017-11-27T00:00:00Z,*lc,,route_1,,,RP_TEST_1,,,,10,,,50 -cgrates.org,ROUTE_LCR,,,,,route_2,,,RP_TEST_2,,,,,,, -cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,,*load,route1:2;route2:7;*default:5,route1,,,,,,Stat_Supplier1:*sum#~*req.LoadReq,10,false,,20 -cgrates.org,ROUTE_LOAD_DIST,,,,,route2,,,,,,Stat_Supplier2:*sum#~*req.LoadReq,20,,, -cgrates.org,ROUTE_LOAD_DIST,,,,,route3,,,,,,Stat_Supplier3:*sum#~*req.LoadReq,35,,, \ No newline at end of file +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_ACNT_1001,FLTR_ACCOUNT_1001,,*weight,,route1,,,,,,20,,,10 +cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,10,,, +cgrates.org,ROUTE_WEIGHT_2,,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,5 +cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,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,2017-11-27T00:00:00Z,*lc,,route1,,,RP_SPECIAL_1002,,,10,false,,10 +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,2017-11-27T00:00:00Z,*hc,,route1,,,RP_SPECIAL_1002,,,10,false,,20 +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,2017-11-27T00:00:00Z,*qos,*acd;*tcd;*asr,route1,,,,,Stat_1;Stat_1_1,10,false,,20 +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,2017-11-27T00:00:00Z,*qos,*dcc,route1,,,,,Stat_1;Stat_1_1,10,false,,20 +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,2017-11-27T00:00:00Z,*qos,*pdd,route1,,,,,Stat_1;Stat_1_1,10,false,,20 +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,2017-11-27T00:00:00Z,*qos,*pdd,route1,FLTR_QOS_SP1,,,,Stat_1;Stat_1_1,10,false,,20 +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,2017-11-27T00:00:00Z,*qos,*acd;*tcd;*asr,route1,FLTR_QOS_SP1_2,,RP_SPECIAL_1002,,Stat_1;Stat_1_1,10,false,,20 +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,2017-11-27T00:00:00Z,*lc,,route_1,,,RP_TEST_1,,,10,,,50 +cgrates.org,ROUTE_LCR,,,,,route_2,,,RP_TEST_2,,,,,, +cgrates.org,ROUTE_LOAD_DIST,FLTR_SPP_LOAD_DIST,,*load,route1:2;route2:7;*default:5,route1,,,,,Stat_Supplier1:*sum#~*req.LoadReq,10,false,,20 +cgrates.org,ROUTE_LOAD_DIST,,,,,route2,,,,,Stat_Supplier2:*sum#~*req.LoadReq,20,,, +cgrates.org,ROUTE_LOAD_DIST,,,,,route3,,,,,Stat_Supplier3:*sum#~*req.LoadReq,35,,, \ No newline at end of file diff --git a/data/tariffplans/testtp/Routes.csv b/data/tariffplans/testtp/Routes.csv index aaed84de3..843b6f88c 100644 --- a/data/tariffplans/testtp/Routes.csv +++ b/data/tariffplans/testtp/Routes.csv @@ -1,5 +1,5 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_1,FLTR_ACNT_dan;FLTR_DST_DE,2017-07-29T15:00:00Z,*lc,,route1,FLTR_ACNT_dan,,RPL_1,,ResGroup1,Stat1,10,false,SortingParameter1,10 -cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,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,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_1,FLTR_ACNT_dan;FLTR_DST_DE,2017-07-29T15:00:00Z,*lc,,route1,FLTR_ACNT_dan,,RPL_1,ResGroup1,Stat1,10,false,SortingParameter1,10 +cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE;FLTR_ACNT_1007,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,10 +cgrates.org,ROUTE_WEIGHT_1,FLTR_DST_DE,,,,route2,,,,,,20,,, +cgrates.org,ROUTE_WEIGHT_1,FLTR_ACNT_1007,,,,route3,FLTR_ACNT_dan,,,,,15,,, diff --git a/data/tariffplans/tut_sip_redirect/Routes.csv b/data/tariffplans/tut_sip_redirect/Routes.csv index f8ecd888a..4d5c1ad50 100644 --- a/data/tariffplans/tut_sip_redirect/Routes.csv +++ b/data/tariffplans/tut_sip_redirect/Routes.csv @@ -1,7 +1,7 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,2017-11-27T00:00:00Z,*weight,,route1,,1001,RP_10CNT,,,,20,,cgrates.org,20 -cgrates.org,ROUTE_ACNT_1001,,,,,route2,,1001,RP_20CNT,,,,10,,cgrates.net,10 -cgrates.org,ROUTE_ACNT_1001,,,,,route3,,1001,RP_1CNT,,,,5,,cgrates.com,5 -cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,2017-11-27T00:00:00Z,*weight,,route1,,1002,RP_10CNT,,,,20,,1003@192.168.56.203,20 -cgrates.org,ROUTE_ACNT_1002,,,,,route2,,1002,RP_20CNT,,,,10,,1004@192.168.57.203,10 -cgrates.org,ROUTE_ACNT_1002,,,,,route3,,1002,RP_1CNT,,,,5,,1005@192.168.58.203,5 +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_ACNT_1001,*string:~*req.Account:1001,2017-11-27T00:00:00Z,*weight,,route1,,1001,RP_10CNT,,,20,,cgrates.org,20 +cgrates.org,ROUTE_ACNT_1001,,,,,route2,,1001,RP_20CNT,,,10,,cgrates.net,10 +cgrates.org,ROUTE_ACNT_1001,,,,,route3,,1001,RP_1CNT,,,5,,cgrates.com,5 +cgrates.org,ROUTE_ACNT_1002,*string:~*req.Account:1002,2017-11-27T00:00:00Z,*weight,,route1,,1002,RP_10CNT,,,20,,1003@192.168.56.203,20 +cgrates.org,ROUTE_ACNT_1002,,,,,route2,,1002,RP_20CNT,,,10,,1004@192.168.57.203,10 +cgrates.org,ROUTE_ACNT_1002,,,,,route3,,1002,RP_1CNT,,,5,,1005@192.168.58.203,5 diff --git a/data/tariffplans/tutorial/Routes.csv b/data/tariffplans/tutorial/Routes.csv index c6aa1e348..2946f3c39 100644 --- a/data/tariffplans/tutorial/Routes.csv +++ b/data/tariffplans/tutorial/Routes.csv @@ -1,8 +1,8 @@ -#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteRateProfileIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight -cgrates.org,ROUTE_ACNT_1001,FLTR_ACNT_1001,2017-11-27T00:00:00Z,*weight,,route1,,,,,,,10,,,10 -cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,,20,,,20 -cgrates.org,ROUTE_ACNT_1002,FLTR_ACNT_1002,2017-11-27T00:00:00Z,*lc,,route1,,,RP_1002_LOW,,,,10,false,,10 -cgrates.org,ROUTE_ACNT_1002,,,,,route2,,,RP_1002,,,,20,,, -cgrates.org,ROUTE_ACNT_1003,FLTR_ACNT_1003,2017-11-27T00:00:00Z,*qos,*tcc;*tcd,route1,,,,,,Stats2,10,false,,10 -cgrates.org,ROUTE_ACNT_1003,,,,,route2,,,,,,Stats2_1,20,,, +#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParameters,RouteID,RouteFilterIDs,RouteAccountIDs,RouteRatingPlanIDs,RouteResourceIDs,RouteStatIDs,RouteWeight,RouteBlocker,RouteParameters,Weight +cgrates.org,ROUTE_ACNT_1001,FLTR_ACNT_1001,2017-11-27T00:00:00Z,*weight,,route1,,,,,,10,,,10 +cgrates.org,ROUTE_ACNT_1001,,,,,route2,,,,,,20,,,20 +cgrates.org,ROUTE_ACNT_1002,FLTR_ACNT_1002,2017-11-27T00:00:00Z,*lc,,route1,,,RP_1002_LOW,,,10,false,,10 +cgrates.org,ROUTE_ACNT_1002,,,,,route2,,,RP_1002,,,20,,, +cgrates.org,ROUTE_ACNT_1003,FLTR_ACNT_1003,2017-11-27T00:00:00Z,*qos,*tcc;*tcd,route1,,,,,Stats2,10,false,,10 +cgrates.org,ROUTE_ACNT_1003,,,,,route2,,,,,Stats2_1,20,,, diff --git a/engine/libtest.go b/engine/libtest.go index 9b05dc51f..c063b05a8 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -257,11 +257,11 @@ cgrates.org,FLTR_DST_DE,*destinations,~*req.Destination,DST_DE,2014-07-29T15:00: cgrates.org,FLTR_DST_NL,*destinations,~*req.Destination,DST_NL,2014-07-29T15:00:00Z ` RoutesCSVContent = ` -#Tenant[0],ID[1],FilterIDs[2],ActivationInterval[3],Sorting[4],SortingParameters[5],RouteID[6],RouteFilterIDs[7],RouteAccountIDs[8],RouteRatingPlanIDs[9],RouteRateProfileIDs[10],RouteResourceIDs[11],RouteStatIDs[12],RouteWeight[13],RouteBlocker[14],RouteParameters[15],Weight[16] -cgrates.org,RoutePrf1,*string:~*req.Account:dan,2014-07-29T15:00:00Z,*lc,,route1,FLTR_ACNT_dan,Account1;Account1_1,RPL_1,,ResGroup1,Stat1,10,true,param1,20 -cgrates.org,RoutePrf1,,,,,route1,,,RPL_2,,ResGroup2,,10,,, -cgrates.org,RoutePrf1,,,,,route1,FLTR_DST_DE,Account2,RPL_3,RT_ALWAYS,ResGroup3,Stat2,10,,, -cgrates.org,RoutePrf1,,,,,route1,,,,,ResGroup4,Stat3,10,,, +#Tenant[0],ID[1],FilterIDs[2],ActivationInterval[3],Sorting[4],SortingParameters[5],RouteID[6],RouteFilterIDs[7],RouteAccountIDs[8],RouteRatingPlanIDs[9],RouteResourceIDs[10],RouteStatIDs[11],RouteWeight[12],RouteBlocker[13],RouteParameters[14],Weight[15] +cgrates.org,RoutePrf1,*string:~*req.Account:dan,2014-07-29T15:00:00Z,*lc,,route1,FLTR_ACNT_dan,Account1;Account1_1,RPL_1,ResGroup1,Stat1,10,true,param1,20 +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,Contexts,FilterIDs,ActivationInterval,AttributeFilterIDs,Path,Type,Value,Blocker,Weight diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 6a4f26260..537793969 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -1255,7 +1255,6 @@ func TestLoadRouteProfiles(t *testing.T) { FilterIDs: []string{"FLTR_DST_DE"}, AccountIDs: []string{"Account2"}, RatingPlanIDs: []string{"RPL_3"}, - RateProfileIDs: []string{"RT_ALWAYS"}, ResourceIDs: []string{"ResGroup3"}, StatIDs: []string{"Stat2"}, Weight: 10, diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 5753a458b..159f79cbd 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1885,10 +1885,6 @@ func (tps RouteMdls) AsTPRouteProfile() (result []*utils.TPRouteProfile) { ratingPlanSplit := strings.Split(tp.RouteRatingplanIDs, utils.InfieldSep) sup.RatingPlanIDs = append(sup.RatingPlanIDs, ratingPlanSplit...) } - if tp.RouteRateProfileIDs != utils.EmptyString { - rateProfileSplit := strings.Split(tp.RouteRateProfileIDs, utils.InfieldSep) - sup.RateProfileIDs = append(sup.RateProfileIDs, rateProfileSplit...) - } if tp.RouteResourceIDs != utils.EmptyString { resSplit := strings.Split(tp.RouteResourceIDs, utils.InfieldSep) sup.ResourceIDs = append(sup.ResourceIDs, resSplit...) @@ -1994,12 +1990,6 @@ func APItoModelTPRoutes(st *utils.TPRouteProfile) (mdls RouteMdls) { } mdl.RouteRatingplanIDs += val } - for i, val := range supl.RateProfileIDs { - if i != 0 { - mdl.RouteRateProfileIDs += utils.InfieldSep - } - mdl.RouteRateProfileIDs += val - } for i, val := range supl.FilterIDs { if i != 0 { mdl.RouteFilterIDs += utils.InfieldSep @@ -2053,7 +2043,6 @@ func APItoRouteProfile(tpRp *utils.TPRouteProfile, timezone string) (rp *RoutePr Weight: route.Weight, Blocker: route.Blocker, RatingPlanIDs: route.RatingPlanIDs, - RateProfileIDs: route.RateProfileIDs, AccountIDs: route.AccountIDs, FilterIDs: route.FilterIDs, ResourceIDs: route.ResourceIDs, @@ -2082,7 +2071,6 @@ func RouteProfileToAPI(rp *RouteProfile) (tpRp *utils.TPRouteProfile) { FilterIDs: route.FilterIDs, AccountIDs: route.AccountIDs, RatingPlanIDs: route.RatingPlanIDs, - RateProfileIDs: route.RateProfileIDs, ResourceIDs: route.ResourceIDs, StatIDs: route.StatIDs, Weight: route.Weight, diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 3e3534181..3657897dd 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -4869,7 +4869,6 @@ func TestAPItoModelTPRoutesCase2(t *testing.T) { FilterIDs: []string{"FLTR_1", "FLTR_2"}, AccountIDs: []string{"Acc1", "Acc2"}, RatingPlanIDs: []string{"RPL_1", "RPL_2"}, - RateProfileIDs: []string{"ID1", "ID2"}, ResourceIDs: []string{"ResGroup1", "ResGroup2"}, StatIDs: []string{"Stat1", "Stat2"}, Weight: 10, @@ -4880,24 +4879,23 @@ func TestAPItoModelTPRoutesCase2(t *testing.T) { Weight: 20, } expStructTest := RouteMdls{{ - Tpid: "TP1", - Tenant: "cgrates.org", - ID: "RoutePrf", - FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE", - ActivationInterval: "2014-07-29T15:00:00Z;2014-08-29T15:00:00Z", - Sorting: "*lc", - SortingParameters: "PARAM1;PARAM2", - RouteID: "route1", - RouteFilterIDs: "FLTR_1;FLTR_2", - RouteAccountIDs: "Acc1;Acc2", - RouteRatingplanIDs: "RPL_1;RPL_2", - RouteRateProfileIDs: "ID1;ID2", - RouteResourceIDs: "ResGroup1;ResGroup2", - RouteStatIDs: "Stat1;Stat2", - RouteWeight: 10, - RouteBlocker: false, - RouteParameters: "SortingParam1", - Weight: 20, + Tpid: "TP1", + Tenant: "cgrates.org", + ID: "RoutePrf", + FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE", + ActivationInterval: "2014-07-29T15:00:00Z;2014-08-29T15:00:00Z", + Sorting: "*lc", + SortingParameters: "PARAM1;PARAM2", + RouteID: "route1", + RouteFilterIDs: "FLTR_1;FLTR_2", + RouteAccountIDs: "Acc1;Acc2", + RouteRatingplanIDs: "RPL_1;RPL_2", + RouteResourceIDs: "ResGroup1;ResGroup2", + RouteStatIDs: "Stat1;Stat2", + RouteWeight: 10, + RouteBlocker: false, + RouteParameters: "SortingParam1", + Weight: 20, }, } sort.Strings(structTest.FilterIDs) diff --git a/engine/models.go b/engine/models.go index 835fbeff9..2a6fdfef8 100644 --- a/engine/models.go +++ b/engine/models.go @@ -409,26 +409,25 @@ func (t TBLVersion) TableName() string { } type RouteMdl struct { - PK uint `gorm:"primary_key"` - Tpid string - Tenant string `index:"0" re:""` - ID string `index:"1" re:""` - FilterIDs string `index:"2" re:""` - ActivationInterval 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:""` - RouteRatingplanIDs string `index:"9" re:""` - RouteRateProfileIDs string `index:"10" re:""` - RouteResourceIDs string `index:"11" re:""` - RouteStatIDs string `index:"12" re:""` - RouteWeight float64 `index:"13" re:"\d+\.?\d*"` - RouteBlocker bool `index:"14" re:""` - RouteParameters string `index:"15" re:""` - Weight float64 `index:"16" re:"\d+\.?\d*"` - CreatedAt time.Time + PK uint `gorm:"primary_key"` + Tpid string + Tenant string `index:"0" re:""` + ID string `index:"1" re:""` + FilterIDs string `index:"2" re:""` + ActivationInterval 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:""` + RouteRatingplanIDs string `index:"9" re:""` + RouteResourceIDs string `index:"10" re:""` + RouteStatIDs string `index:"11" re:""` + RouteWeight float64 `index:"12" re:"\d+\.?\d*"` + RouteBlocker bool `index:"13" re:""` + RouteParameters string `index:"14" re:""` + Weight float64 `index:"15" re:"\d+\.?\d*"` + CreatedAt time.Time } func (RouteMdl) TableName() string { diff --git a/engine/route_highestcost.go b/engine/route_highestcost.go index 1226dc6b8..0753aa69d 100755 --- a/engine/route_highestcost.go +++ b/engine/route_highestcost.go @@ -41,11 +41,11 @@ func (hcs *HightCostSorter) SortRoutes(prflID string, routes []*Route, Sorting: hcs.sorting, SortedRoutes: make([]*SortedRoute, 0)} for _, route := range routes { - if len(route.RatingPlanIDs) == 0 && len(route.AccountIDs) == 0 && len(hcs.rS.cgrcfg.RouteSCfg().RateSConns) == 0 { + if len(route.RatingPlanIDs) == 0 && len(route.AccountIDs) == 0 { utils.Logger.Warning( - fmt.Sprintf("<%s> supplier: <%s> - empty RatingPlanIDs or AccountIDs or no connection with rateS", + fmt.Sprintf("<%s> supplier: <%s> - empty RatingPlanIDs or AccountIDs", utils.RouteS, route.ID)) - return nil, utils.NewErrMandatoryIeMissing("RatingPlanIDs or AccountIDs or connection with rateS") + return nil, utils.NewErrMandatoryIeMissing("RatingPlanIDs or AccountIDs") } if srtSpl, pass, err := hcs.rS.populateSortingData(ev, route, extraOpts); err != nil { return nil, err diff --git a/engine/route_leastcost.go b/engine/route_leastcost.go index 44944595c..655088464 100644 --- a/engine/route_leastcost.go +++ b/engine/route_leastcost.go @@ -41,11 +41,11 @@ func (lcs *LeastCostSorter) SortRoutes(prflID string, routes []*Route, Sorting: lcs.sorting, SortedRoutes: make([]*SortedRoute, 0)} for _, s := range routes { - if len(s.RatingPlanIDs) == 0 && len(s.AccountIDs) == 0 && len(lcs.rS.cgrcfg.RouteSCfg().RateSConns) == 0 { + if len(s.RatingPlanIDs) == 0 && len(s.AccountIDs) == 0 { utils.Logger.Warning( - fmt.Sprintf("<%s> supplier: <%s> - empty RatingPlanIDs or AccountIDs or no connection with RateS", + fmt.Sprintf("<%s> supplier: <%s> - empty RatingPlanIDs or AccountIDs", utils.RouteS, s.ID)) - return nil, utils.NewErrMandatoryIeMissing("RatingPlanIDs or AccountIDs or connection with RateS") + return nil, utils.NewErrMandatoryIeMissing("RatingPlanIDs or AccountIDs") } if srtSpl, pass, err := lcs.rS.populateSortingData(ev, s, extraOpts); err != nil { return nil, err diff --git a/engine/routes.go b/engine/routes.go index 787562c5d..8d97065ec 100644 --- a/engine/routes.go +++ b/engine/routes.go @@ -35,7 +35,6 @@ type Route struct { FilterIDs []string AccountIDs []string RatingPlanIDs []string // used when computing price - RateProfileIDs []string // used when computing price ResourceIDs []string // queried in some strategies StatIDs []string // queried in some strategies Weight float64 @@ -209,7 +208,7 @@ func (rpS *RouteService) matchingRouteProfilesForEvent(tnt string, ev *utils.CGR // costForEvent will compute cost out of accounts and rating plans for event // returns map[string]interface{} with cost and relevant matching information inside func (rpS *RouteService) costForEvent(ev *utils.CGREvent, - acntIDs, rpIDs, rtPrfIDs []string) (costData map[string]interface{}, err error) { + acntIDs, rpIDs []string) (costData map[string]interface{}, err error) { costData = make(map[string]interface{}) if err = ev.CheckMandatoryFields([]string{utils.AccountField, utils.Destination, utils.SetupTime}); err != nil { @@ -262,8 +261,8 @@ func (rpS *RouteService) costForEvent(ev *utils.CGREvent, } if usage > accountMaxUsage { // remain usage needs to be covered by rating plans - if len(rpIDs) == 0 && len(rpS.cgrcfg.RouteSCfg().RateSConns) == 0 { - return nil, fmt.Errorf("no rating plans or no connection to RateS defined for remaining usage") + if len(rpIDs) == 0 { + return nil, fmt.Errorf("no rating plans defined for remaining usage") } // update the setup time and the usage sTime = sTime.Add(accountMaxUsage) @@ -277,39 +276,21 @@ func (rpS *RouteService) costForEvent(ev *utils.CGREvent, } if accountMaxUsage == 0 || accountMaxUsage < initialUsage { - var rateRply RateProfileCost - argsCostEv := &utils.ArgsCostForEvent{ - RateProfileIDs: rtPrfIDs, - CGREvent: ev, + var rpCost map[string]interface{} + if err := rpS.connMgr.Call(rpS.cgrcfg.RouteSCfg().RALsConns, nil, utils.ResponderGetCostOnRatingPlans, + &utils.GetCostOnRatingPlansArgs{ + Tenant: ev.Tenant, + Account: acnt, + Subject: subj, + Destination: dst, + SetupTime: sTime, + Usage: usage, + RatingPlanIDs: rpIDs, + }, &rpCost); err != nil { + return nil, err } - argsCostEv.CGREvent.Opts = map[string]interface{}{ // add the setup time and usage in opts - utils.OptsRatesStartTime: sTime, - utils.OptsRatesUsage: usage, - } - if len(rpS.cgrcfg.RouteSCfg().RateSConns) != 0 { - if err := rpS.connMgr.Call(rpS.cgrcfg.RouteSCfg().RateSConns, nil, utils.RateSv1CostForEvent, - argsCostEv, &rateRply); err != nil { - return nil, err - } - costData[utils.Cost] = rateRply.Cost - costData[utils.RateProfileMatched] = rateRply.ID - } else { - var rpCost map[string]interface{} - if err := rpS.connMgr.Call(rpS.cgrcfg.RouteSCfg().RALsConns, nil, utils.ResponderGetCostOnRatingPlans, - &utils.GetCostOnRatingPlansArgs{ - Tenant: ev.Tenant, - Account: acnt, - Subject: subj, - Destination: dst, - SetupTime: sTime, - Usage: usage, - RatingPlanIDs: rpIDs, - }, &rpCost); err != nil { - return nil, err - } - for k, v := range rpCost { // do not overwrite the return map - costData[k] = v - } + for k, v := range rpCost { // do not overwrite the return map + costData[k] = v } } return @@ -419,8 +400,8 @@ func (rpS *RouteService) populateSortingData(ev *utils.CGREvent, route *Route, RouteParameters: route.RouteParameters, } //calculate costData if we have fields - if len(route.AccountIDs) != 0 || len(route.RatingPlanIDs) != 0 || len(rpS.cgrcfg.RouteSCfg().RateSConns) != 0 { - costData, err := rpS.costForEvent(ev, route.AccountIDs, route.RatingPlanIDs, route.RateProfileIDs) + if len(route.AccountIDs) != 0 || len(route.RatingPlanIDs) != 0 { + costData, err := rpS.costForEvent(ev, route.AccountIDs, route.RatingPlanIDs) if err != nil { if extraOpts.ignoreErrors { utils.Logger.Warning( @@ -705,6 +686,8 @@ func (rpS *RouteService) V1GetRoutes(args *ArgsGetRoutes, reply *SortedRoutes) ( } } sSps, err := rpS.sortedRoutesForEvent(tnt, args) + utils.Logger.Debug(fmt.Sprintf("ADI %s", utils.ToJSON(sSps))) + utils.Logger.Debug(fmt.Sprintf("ADI %q", err)) if err != nil { if err != utils.ErrNotFound { err = utils.NewErrServerError(err) diff --git a/engine/z_stordb_it_test.go b/engine/z_stordb_it_test.go index 891f6a97a..797f3b4de 100644 --- a/engine/z_stordb_it_test.go +++ b/engine/z_stordb_it_test.go @@ -28,6 +28,8 @@ import ( "testing" "time" + "gorm.io/gorm/logger" + "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" ) @@ -87,6 +89,7 @@ func TestStorDBit(t *testing.T) { 100, 10, 0); err != nil { t.Fatal(err) } + storDB.(*SQLStorage).db.Config.Logger = logger.Default.LogMode(logger.Silent) case utils.MetaMongo: if cfg, err = config.NewCGRConfigFromPath(path.Join(*dataDir, "conf", "samples", "storage", "mongo")); err != nil { t.Fatal(err) @@ -109,6 +112,7 @@ func TestStorDBit(t *testing.T) { 100, 10, 0); err != nil { t.Fatal(err) } + storDB.(*SQLStorage).db.Config.Logger = logger.Default.LogMode(logger.Silent) default: t.Fatal("Unknown Database type") } diff --git a/loaders/loader_test.go b/loaders/loader_test.go index a75061249..aa0d90b04 100644 --- a/loaders/loader_test.go +++ b/loaders/loader_test.go @@ -874,34 +874,30 @@ func TestLoaderProcessRoutes(t *testing.T) { Path: "RouteRatingplanIDs", Type: utils.MetaComposed, Value: config.NewRSRParsersMustCompile("~*req.9", utils.InfieldSep)}, - {Tag: "RouteRateProfileIDs", - Path: "RouteRateProfileIDs", - Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.10", utils.InfieldSep)}, {Tag: "RouteResourceIDs", Path: "RouteResourceIDs", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.11", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.10", utils.InfieldSep)}, {Tag: "RouteStatIDs", Path: "RouteStatIDs", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.12", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.11", utils.InfieldSep)}, {Tag: "RouteWeight", Path: "RouteWeight", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.13", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.12", utils.InfieldSep)}, {Tag: "RouteBlocker", Path: "RouteBlocker", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.14", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.13", utils.InfieldSep)}, {Tag: "RouteParameters", Path: "RouteParameters", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.15", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.14", utils.InfieldSep)}, {Tag: "Weight", Path: "Weight", Type: utils.MetaComposed, - Value: config.NewRSRParsersMustCompile("~*req.16", utils.InfieldSep)}, + Value: config.NewRSRParsersMustCompile("~*req.15", utils.InfieldSep)}, }, } rdr := ioutil.NopCloser(strings.NewReader(engine.RoutesCSVContent)) @@ -945,7 +941,6 @@ func TestLoaderProcessRoutes(t *testing.T) { FilterIDs: []string{"FLTR_DST_DE"}, AccountIDs: []string{"Account2"}, RatingPlanIDs: []string{"RPL_3"}, - RateProfileIDs: []string{"RT_ALWAYS"}, ResourceIDs: []string{"ResGroup3"}, StatIDs: []string{"Stat2"}, Weight: 10, diff --git a/utils/apitpdata.go b/utils/apitpdata.go index fc3a517fc..d474827ea 100755 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -1048,7 +1048,6 @@ type TPRoute struct { FilterIDs []string AccountIDs []string RatingPlanIDs []string // used when computing price - RateProfileIDs []string // used when computing price ResourceIDs []string // queried in some strategies StatIDs []string // queried in some strategies Weight float64