diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 0592de918..7f216817a 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -1585,7 +1585,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp if len(arg.Items) == 0 { arg.Items = []string{utils.MetaAttributes, utils.MetaChargers, utils.MetaDispatchers, utils.MetaDispatcherHosts, utils.MetaFilters, utils.MetaResources, utils.MetaStats, - utils.MetaRoutes, utils.MetaThresholds, utils.MetaSags, utils.MetaTrends} + utils.MetaRoutes, utils.MetaThresholds, utils.MetaRankings, utils.MetaTrends} } if _, err := os.Stat(arg.Path); os.IsNotExist(err) { os.Mkdir(arg.Path, os.ModeDir) @@ -1856,8 +1856,8 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp } } csvWriter.Flush() - case utils.MetaSags: - prfx := utils.SagsProfilePrefix + case utils.MetaRankings: + prfx := utils.RankingsProfilePrefix keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) if err != nil { return err @@ -1865,7 +1865,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp if len(keys) == 0 { continue } - f, err := os.Create(path.Join(arg.Path, utils.SagsCsv)) + f, err := os.Create(path.Join(arg.Path, utils.RankingsCsv)) if err != nil { return err } @@ -1873,16 +1873,16 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter := csv.NewWriter(f) csvWriter.Comma = utils.CSVSep - if err := csvWriter.Write(engine.SagsMdls{}.CSVHeader()); err != nil { + if err := csvWriter.Write(engine.RankingsMdls{}.CSVHeader()); err != nil { return err } for _, key := range keys { tntID := strings.SplitN(key[len(prfx):], utils.InInFieldSep, 2) - sgsPrf, err := apierSv1.DataManager.GetSagProfile(tntID[0], tntID[1], true, false, utils.NonTransactional) + rgsPrf, err := apierSv1.DataManager.GetRankingProfile(tntID[0], tntID[1], true, false, utils.NonTransactional) if err != nil { return err } - mdl := engine.APItoModelSag(engine.SagProfileToAPI(sgsPrf)) + mdl := engine.APItoModelTPRanking(engine.RankingProfileToAPI(rgsPrf)) record, err := engine.CsvDump(mdl) if err != nil { return err diff --git a/apier/v1/apier_it_test.go b/apier/v1/apier_it_test.go index f2f2dd3cf..d731eea51 100644 --- a/apier/v1/apier_it_test.go +++ b/apier/v1/apier_it_test.go @@ -1715,7 +1715,7 @@ func testApierResetDataAfterLoadFromFolder(t *testing.T) { expStats[utils.CacheAttributeFilterIndexes].Groups = 1 expStats[utils.CacheReverseFilterIndexes].Items = 10 expStats[utils.CacheReverseFilterIndexes].Groups = 7 - expStats[utils.CacheSagProfiles].Items = 1 + expStats[utils.CacheRankingProfiles].Items = 1 if err := rater.Call(context.Background(), utils.CacheSv1GetCacheStats, new(utils.AttrCacheIDsWithAPIOpts), &rcvStats); err != nil { t.Error(err) diff --git a/apier/v1/caches_it_test.go b/apier/v1/caches_it_test.go index b85588e59..9f53694a3 100644 --- a/apier/v1/caches_it_test.go +++ b/apier/v1/caches_it_test.go @@ -177,7 +177,7 @@ func testCacheSAfterLoadFromFolder(t *testing.T) { expStats[utils.CacheAttributeFilterIndexes].Groups = 1 expStats[utils.CacheReverseFilterIndexes].Items = 10 expStats[utils.CacheReverseFilterIndexes].Groups = 7 - expStats[utils.CacheSagProfiles].Items = 1 + expStats[utils.CacheRankingProfiles].Items = 1 if err := chcRPC.Call(context.Background(), utils.CacheSv1GetCacheStats, &utils.AttrCacheIDsWithAPIOpts{}, &rcvStats); err != nil { t.Error(err) @@ -246,7 +246,7 @@ func testCacheSReload(t *testing.T) { expStats[utils.CacheAttributeFilterIndexes].Groups = 1 expStats[utils.CacheReverseFilterIndexes].Items = 10 expStats[utils.CacheReverseFilterIndexes].Groups = 7 - expStats[utils.CacheSagProfiles].Items = 1 + expStats[utils.CacheRankingProfiles].Items = 1 if err := chcRPC.Call(context.Background(), utils.CacheSv1GetCacheStats, &utils.AttrCacheIDsWithAPIOpts{}, &rcvStats); err != nil { t.Error(err) diff --git a/apier/v1/precache_it_test.go b/apier/v1/precache_it_test.go index d3ba08dc5..e00eb7733 100644 --- a/apier/v1/precache_it_test.go +++ b/apier/v1/precache_it_test.go @@ -228,7 +228,7 @@ func testPrecacheGetCacheStatsAfterRestart(t *testing.T) { utils.MetaAPIBan: {}, utils.CacheReplicationHosts: {}, utils.CacheRadiusPackets: {}, - utils.CacheSagProfiles: {}, + utils.CacheRankingProfiles: {}, } if *apiBan { (*expectedStats)[utils.MetaAPIBan] = <cache.CacheStats{Items: 254} diff --git a/apier/v1/sags.go b/apier/v1/rankings.go similarity index 62% rename from apier/v1/sags.go rename to apier/v1/rankings.go index 2ce73253a..8056882e9 100644 --- a/apier/v1/sags.go +++ b/apier/v1/rankings.go @@ -27,8 +27,8 @@ import ( "github.com/cgrates/cgrates/utils" ) -// GetSagProfile returns a StatAggregator profile -func (apierSv1 *APIerSv1) GetSagProfile(ctx *context.Context, arg *utils.TenantID, reply *engine.SagProfile) (err error) { +// GetRankingProfile returns a Ranking profile +func (apierSv1 *APIerSv1) GetRankingProfile(ctx *context.Context, arg *utils.TenantID, reply *engine.RankingProfile) (err error) { if missing := utils.MissingStructFields(arg, []string{utils.ID}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } @@ -36,7 +36,7 @@ func (apierSv1 *APIerSv1) GetSagProfile(ctx *context.Context, arg *utils.TenantI if tnt == utils.EmptyString { tnt = apierSv1.Config.GeneralCfg().DefaultTenant } - sg, err := apierSv1.DataManager.GetSagProfile(tnt, arg.ID, true, true, utils.NonTransactional) + sg, err := apierSv1.DataManager.GetRankingProfile(tnt, arg.ID, true, true, utils.NonTransactional) if err != nil { return utils.APIErrorHandler(err) } @@ -44,13 +44,13 @@ func (apierSv1 *APIerSv1) GetSagProfile(ctx *context.Context, arg *utils.TenantI return } -// GetSagProfileIDs returns list of sagProfile IDs registered for a tenant -func (apierSv1 *APIerSv1) GetSagProfileIDs(ctx *context.Context, args *utils.PaginatorWithTenant, sgPrfIDs *[]string) (err error) { +// GetRankingProfileIDs returns list of rankingProfile IDs registered for a tenant +func (apierSv1 *APIerSv1) GetRankingProfileIDs(ctx *context.Context, args *utils.PaginatorWithTenant, sgPrfIDs *[]string) (err error) { tnt := args.Tenant if tnt == utils.EmptyString { tnt = apierSv1.Config.GeneralCfg().DefaultTenant } - prfx := utils.SagsProfilePrefix + tnt + utils.ConcatenatedKeySep + prfx := utils.RankingsProfilePrefix + tnt + utils.ConcatenatedKeySep keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) if err != nil { return err @@ -66,20 +66,20 @@ func (apierSv1 *APIerSv1) GetSagProfileIDs(ctx *context.Context, args *utils.Pag return } -// SetSagProfile alters/creates a SagProfile -func (apierSv1 *APIerSv1) SetSagProfile(ctx *context.Context, arg *engine.SagProfileWithAPIOpts, reply *string) error { - if missing := utils.MissingStructFields(arg.SagProfile, []string{utils.ID}); len(missing) != 0 { +// SetRankingProfile alters/creates a RankingProfile +func (apierSv1 *APIerSv1) SetRankingProfile(ctx *context.Context, arg *engine.RankingProfileWithAPIOpts, reply *string) error { + if missing := utils.MissingStructFields(arg.RankingProfile, []string{utils.ID}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } if arg.Tenant == utils.EmptyString { arg.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant } - if err := apierSv1.DataManager.SetSagProfile(arg.SagProfile); err != nil { + if err := apierSv1.DataManager.SetRankingProfile(arg.RankingProfile); err != nil { return utils.APIErrorHandler(err) } - //generate a loadID for CacheSagProfiles and store it in database + //generate a loadID for CacheRankingProfiles and store it in database loadID := time.Now().UnixNano() - if err := apierSv1.DataManager.SetLoadIDs(map[string]int64{utils.CacheSagProfiles: loadID}); err != nil { + if err := apierSv1.DataManager.SetLoadIDs(map[string]int64{utils.CacheRankingProfiles: loadID}); err != nil { return utils.APIErrorHandler(err) } // delay if needed before cache call @@ -87,8 +87,8 @@ func (apierSv1 *APIerSv1) SetSagProfile(ctx *context.Context, arg *engine.SagPro utils.Logger.Info(fmt.Sprintf(" Delaying cache call for %v", apierSv1.Config.GeneralCfg().CachingDelay)) time.Sleep(apierSv1.Config.GeneralCfg().CachingDelay) } - //handle caching for SagProfile - if err := apierSv1.CallCache(utils.IfaceAsString(arg.APIOpts[utils.CacheOpt]), arg.Tenant, utils.CacheSagProfiles, + //handle caching for RankingProfile + if err := apierSv1.CallCache(utils.IfaceAsString(arg.APIOpts[utils.CacheOpt]), arg.Tenant, utils.CacheRankingProfiles, arg.TenantID(), utils.EmptyString, nil, nil, arg.APIOpts); err != nil { return utils.APIErrorHandler(err) } @@ -96,8 +96,8 @@ func (apierSv1 *APIerSv1) SetSagProfile(ctx *context.Context, arg *engine.SagPro return nil } -// RemoveSagProfile remove a specific sag configuration -func (apierSv1 *APIerSv1) RemoveSagProfile(ctx *context.Context, args *utils.TenantIDWithAPIOpts, reply *string) error { +// RemoveRankingProfile remove a specific ranking configuration +func (apierSv1 *APIerSv1) RemoveRankingProfile(ctx *context.Context, args *utils.TenantIDWithAPIOpts, reply *string) error { if missing := utils.MissingStructFields(args, []string{utils.ID}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } @@ -105,36 +105,36 @@ func (apierSv1 *APIerSv1) RemoveSagProfile(ctx *context.Context, args *utils.Ten if tnt == utils.EmptyString { tnt = apierSv1.Config.GeneralCfg().DefaultTenant } - if err := apierSv1.DataManager.RemoveSagProfile(tnt, args.ID); err != nil { + if err := apierSv1.DataManager.RemoveRankingProfile(tnt, args.ID); err != nil { return utils.APIErrorHandler(err) } // delay if needed before cache call if apierSv1.Config.GeneralCfg().CachingDelay != 0 { - utils.Logger.Info(fmt.Sprintf(" Delaying cache call for %v", apierSv1.Config.GeneralCfg().CachingDelay)) + utils.Logger.Info(fmt.Sprintf(" Delaying cache call for %v", apierSv1.Config.GeneralCfg().CachingDelay)) time.Sleep(apierSv1.Config.GeneralCfg().CachingDelay) } - //handle caching for SagProfile - if err := apierSv1.CallCache(utils.IfaceAsString(args.APIOpts[utils.CacheOpt]), tnt, utils.CacheSagProfiles, + //handle caching for RankingProfile + if err := apierSv1.CallCache(utils.IfaceAsString(args.APIOpts[utils.CacheOpt]), tnt, utils.CacheRankingProfiles, utils.ConcatenatedKey(tnt, args.ID), utils.EmptyString, nil, nil, args.APIOpts); err != nil { return utils.APIErrorHandler(err) } - //generate a loadID for CacheSagProfiles and store it in database + //generate a loadID for CacheRankingProfiles and store it in database loadID := time.Now().UnixNano() - if err := apierSv1.DataManager.SetLoadIDs(map[string]int64{utils.CacheSagProfiles: loadID}); err != nil { + if err := apierSv1.DataManager.SetLoadIDs(map[string]int64{utils.CacheRankingProfiles: loadID}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -// NewSagSv1 initializes SagSV1 -func NewSagSv1() *SagSv1 { - return &SagSv1{} +// NewRankingSv1 initializes RankingSV1 +func NewRankingSv1() *RankingSv1 { + return &RankingSv1{} } -type SagSv1 struct{} +type RankingSv1 struct{} -func (sa *SagSv1) Ping(ctx *context.Context, ign *utils.CGREvent, reply *string) error { +func (sa *RankingSv1) Ping(ctx *context.Context, ign *utils.CGREvent, reply *string) error { *reply = utils.Pong return nil } diff --git a/apier/v1/rankings_it_test.go b/apier/v1/rankings_it_test.go new file mode 100644 index 000000000..6cf3bb3ab --- /dev/null +++ b/apier/v1/rankings_it_test.go @@ -0,0 +1,272 @@ +//go:build integration +// +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" + "testing" + "time" + + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" +) + +var ( + rankingCfgPath string + rankingCfg *config.CGRConfig + rankingRPC *birpc.Client + rankingProfile *engine.RankingProfileWithAPIOpts + rankingConfigDIR string + + sTestsRanking = []func(t *testing.T){ + testRankingSInitCfg, + testRankingSInitDataDb, + testRankingSResetStorDb, + testRankingSStartEngine, + testRankingSRPCConn, + testRankingSLoadAdd, + testRankingSSetRankingProfile, + testRankingSGetRankingProfileIDs, + testRankingSUpdateRankingProfile, + testRankingSRemRankingProfile, + testRankingSKillEngine, + //cache test + testRankingSInitCfg, + testRankingSInitDataDb, + testRankingSResetStorDb, + testRankingSStartEngine, + testRankingSRPCConn, + testRankingSCacheTestGetNotFound, + testRankingSCacheTestSet, + testRankingSCacheReload, + testRankingSCacheTestGetFound, + testRankingSKillEngine, + } +) + +func TestRankingSIT(t *testing.T) { + + switch *utils.DBType { + case utils.MetaInternal: + rankingConfigDIR = "tutinternal" + case utils.MetaMySQL: + rankingConfigDIR = "tutmysql" + case utils.MetaMongo: + rankingConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") + } + for _, stest := range sTestsRanking { + t.Run(rankingConfigDIR, stest) + } +} + +func testRankingSInitCfg(t *testing.T) { + var err error + rankingCfgPath = path.Join(*utils.DataDir, "conf", "samples", rankingConfigDIR) + rankingCfg, err = config.NewCGRConfigFromPath(rankingCfgPath) + if err != nil { + t.Error(err) + } +} + +func testRankingSInitDataDb(t *testing.T) { + if err := engine.InitDataDb(rankingCfg); err != nil { + t.Fatal(err) + } +} + +// Wipe out the cdr database +func testRankingSResetStorDb(t *testing.T) { + if err := engine.InitStorDb(rankingCfg); err != nil { + t.Fatal(err) + } +} + +// Start CGR Engine +func testRankingSStartEngine(t *testing.T) { + if _, err := engine.StopStartEngine(rankingCfgPath, *utils.WaitRater); err != nil { + t.Fatal(err) + } +} + +// Connect rpc client to rater +func testRankingSRPCConn(t *testing.T) { + var err error + rankingRPC, err = newRPCClient(rankingCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed + if err != nil { + t.Fatal(err) + } +} +func testRankingSLoadAdd(t *testing.T) { + rankingProfile := &engine.RankingProfileWithAPIOpts{ + RankingProfile: &engine.RankingProfile{ + Tenant: "cgrates.org", + ID: "SG_Sum", + QueryInterval: 2 * time.Minute, + StatIDs: []string{"SQProfile1"}, + MetricIDs: []string{"*sum"}, + }, + } + + var result string + if err := rankingRPC.Call(context.Background(), utils.APIerSv1SetRankingProfile, rankingProfile, &result); err != nil { + t.Error(err) + } else if result != utils.OK { + t.Error("Unexpected reply returned", result) + } + +} + +func testRankingSSetRankingProfile(t *testing.T) { + var ( + reply *engine.RankingProfileWithAPIOpts + result string + ) + rankingProfile = &engine.RankingProfileWithAPIOpts{ + RankingProfile: &engine.RankingProfile{ + Tenant: "cgrates.org", + ID: "Ranking1", + QueryInterval: time.Second * 15, + StatIDs: []string{"SQ1", "SQ2"}, + MetricIDs: []string{"*acc", "*sum"}, + Sorting: "*asc", + ThresholdIDs: []string{"THD1", "THD2"}}, + } + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, + &utils.TenantID{Tenant: "cgrates.org", ID: "Ranking1"}, &reply); err == nil || + err.Error() != utils.ErrNotFound.Error() { + t.Fatal(err) + } + if err := rankingRPC.Call(context.Background(), utils.APIerSv1SetRankingProfile, rankingProfile, &result); err != nil { + t.Error(err) + } else if result != utils.OK { + t.Errorf("Expected: %v,Received: %v", utils.OK, result) + } + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "Ranking1"}, &reply); err != nil { + t.Error(err) + } else if diff := cmp.Diff(rankingProfile, reply, cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != utils.EmptyString { + t.Errorf("Unnexpected profile (-expected +got):\n%s", diff) + } +} +func testRankingSGetRankingProfileIDs(t *testing.T) { + expected := []string{"Ranking1", "SG_Sum"} + var result []string + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfileIDs, utils.PaginatorWithTenant{}, &result); err != nil { + t.Error(err) + } else if len(expected) != len(result) { + t.Errorf("Expecting : %+v, received: %+v", expected, result) + } +} + +func testRankingSUpdateRankingProfile(t *testing.T) { + rankingProfile.Sorting = "*desc" + var ( + reply *engine.RankingProfileWithAPIOpts + result string + ) + if err := rankingRPC.Call(context.Background(), utils.APIerSv1SetRankingProfile, rankingProfile, &result); err != nil { + t.Error(err) + } + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "Ranking1"}, &reply); err != nil { + t.Error(err) + } else if diff := cmp.Diff(rankingProfile, reply, cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != utils.EmptyString { + t.Errorf("Unnexpected profile (-expected +got):\n%s", diff) + } +} +func testRankingSRemRankingProfile(t *testing.T) { + var ( + resp string + reply *engine.RankingProfile + ) + if err := rankingRPC.Call(context.Background(), utils.APIerSv1RemoveRankingProfile, + &utils.TenantID{Tenant: "cgrates.org", ID: "Ranking1"}, &resp); err != nil { + t.Error(err) + } else if resp != utils.OK { + t.Error("Unexpected reply returned", resp) + } + + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, + &utils.TenantID{Tenant: "cgrates.org", ID: "Ranking1"}, + &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { + t.Error(err) + } +} + +func testRankingSKillEngine(t *testing.T) { + if err := engine.KillEngine(*utils.WaitRater); err != nil { + t.Error(err) + } +} + +func testRankingSCacheTestGetNotFound(t *testing.T) { + var reply *engine.RankingProfile + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, + &utils.TenantID{Tenant: "cgrates.org", ID: "RANKINGPRF_CACHE"}, &reply); err == nil || + err.Error() != utils.ErrNotFound.Error() { + t.Fatal(err) + } +} + +func testRankingSCacheTestGetFound(t *testing.T) { + var reply *engine.RankingProfile + if err := rankingRPC.Call(context.Background(), utils.APIerSv1GetRankingProfile, + &utils.TenantID{Tenant: "cgrates.org", ID: "RANKINGPRF_CACHE"}, &reply); err != nil { + t.Fatal(err) + } +} + +func testRankingSCacheTestSet(t *testing.T) { + rankingProfile = &engine.RankingProfileWithAPIOpts{ + RankingProfile: &engine.RankingProfile{ + Tenant: "cgrates.org", + ID: "RANKINGPRF_CACHE", + }, + APIOpts: map[string]any{ + utils.CacheOpt: utils.MetaNone, + }, + } + var reply string + if err := rankingRPC.Call(context.Background(), utils.APIerSv1SetRankingProfile, rankingProfile, &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Error("Unexpected reply returned", reply) + } +} + +func testRankingSCacheReload(t *testing.T) { + cache := &utils.AttrReloadCacheWithAPIOpts{ + RankingProfileIDs: []string{"cgrates.org:RANKINGPRF_CACHE"}, + } + var reply string + if err := rankingRPC.Call(context.Background(), utils.CacheSv1ReloadCache, cache, &reply); err != nil { + t.Error("Got error on CacheSv1.ReloadCache: ", err.Error()) + } else if reply != utils.OK { + t.Error("Calling CacheSv1.ReloadCache got reply: ", reply) + } +} diff --git a/apier/v1/replicator.go b/apier/v1/replicator.go index 27614d408..34254e1f5 100644 --- a/apier/v1/replicator.go +++ b/apier/v1/replicator.go @@ -136,10 +136,10 @@ func (rplSv1 *ReplicatorSv1) GetStatQueueProfile(ctx *context.Context, tntID *ut return nil } -// GetSagProfile is the remote method coresponding to the dataDb driver method -func (rplSv1 *ReplicatorSv1) GetSagProfile(ctx *context.Context, tntID *utils.TenantIDWithAPIOpts, reply *engine.SagProfile) error { - engine.UpdateReplicationFilters(utils.SagsProfilePrefix, tntID.TenantID.TenantID(), utils.IfaceAsString(tntID.APIOpts[utils.RemoteHostOpt])) - rcv, err := rplSv1.dm.DataDB().GetSagProfileDrv(tntID.Tenant, tntID.ID) +// GetRankingProfile is the remote method coresponding to the dataDb driver method +func (rplSv1 *ReplicatorSv1) GetRankingProfile(ctx *context.Context, tntID *utils.TenantIDWithAPIOpts, reply *engine.RankingProfile) error { + engine.UpdateReplicationFilters(utils.RankingsProfilePrefix, tntID.TenantID.TenantID(), utils.IfaceAsString(tntID.APIOpts[utils.RemoteHostOpt])) + rcv, err := rplSv1.dm.DataDB().GetRankingProfileDrv(tntID.Tenant, tntID.ID) if err != nil { return err } @@ -443,13 +443,13 @@ func (rplSv1 *ReplicatorSv1) SetStatQueueProfile(ctx *context.Context, sq *engin return } -// SetSagQueueProfile is the replication method coresponding to the dataDb driver method -func (rplSv1 *ReplicatorSv1) SetSagProfile(ctx *context.Context, sg *engine.SagProfileWithAPIOpts, reply *string) (err error) { - if err = rplSv1.dm.DataDB().SetSagProfileDrv(sg.SagProfile); err != nil { +// SetRankingQueueProfile is the replication method coresponding to the dataDb driver method +func (rplSv1 *ReplicatorSv1) SetRankingProfile(ctx *context.Context, sg *engine.RankingProfileWithAPIOpts, reply *string) (err error) { + if err = rplSv1.dm.DataDB().SetRankingProfileDrv(sg.RankingProfile); err != nil { return } if err = rplSv1.v1.CallCache(utils.IfaceAsString(sg.APIOpts[utils.CacheOpt]), - sg.Tenant, utils.CacheSagProfiles, sg.TenantID(), utils.EmptyString, nil, nil, sg.APIOpts); err != nil { + sg.Tenant, utils.CacheRankingProfiles, sg.TenantID(), utils.EmptyString, nil, nil, sg.APIOpts); err != nil { return } *reply = utils.OK @@ -866,14 +866,14 @@ func (rplSv1 *ReplicatorSv1) RemoveStatQueueProfile(ctx *context.Context, args * return } -// RemoveSagProfile is the replication method coresponding to the dataDb driver method -func (rplSv1 *ReplicatorSv1) RemoveSagProfile(ctx *context.Context, args *utils.TenantIDWithAPIOpts, reply *string) (err error) { - if err = rplSv1.dm.DataDB().RemSagProfileDrv(args.Tenant, args.ID); err != nil { +// RemoveRankingProfile is the replication method coresponding to the dataDb driver method +func (rplSv1 *ReplicatorSv1) RemoveRankingProfile(ctx *context.Context, args *utils.TenantIDWithAPIOpts, reply *string) (err error) { + if err = rplSv1.dm.DataDB().RemRankingProfileDrv(args.Tenant, args.ID); err != nil { return } if err = rplSv1.v1.CallCache(utils.IfaceAsString(args.APIOpts[utils.CacheOpt]), - args.Tenant, utils.CacheSagProfiles, args.TenantID.TenantID(), utils.EmptyString, nil, nil, args.APIOpts); err != nil { + args.Tenant, utils.CacheRankingProfiles, args.TenantID.TenantID(), utils.EmptyString, nil, nil, args.APIOpts); err != nil { return } *reply = utils.OK diff --git a/apier/v1/sags_it_test.go b/apier/v1/sags_it_test.go deleted file mode 100644 index 07415d448..000000000 --- a/apier/v1/sags_it_test.go +++ /dev/null @@ -1,272 +0,0 @@ -//go:build integration -// +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" - "testing" - "time" - - "github.com/cgrates/birpc" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" -) - -var ( - sagCfgPath string - sagCfg *config.CGRConfig - sagRPC *birpc.Client - sagProfile *engine.SagProfileWithAPIOpts - sagConfigDIR string - - sTestsSag = []func(t *testing.T){ - testSagSInitCfg, - testSagSInitDataDb, - testSagSResetStorDb, - testSagSStartEngine, - testSagSRPCConn, - testSagSLoadAdd, - testSagSSetSagProfile, - testSagSGetSagProfileIDs, - testSagSUpdateSagProfile, - testSagSRemSagProfile, - testSagSKillEngine, - //cache test - testSagSInitCfg, - testSagSInitDataDb, - testSagSResetStorDb, - testSagSStartEngine, - testSagSRPCConn, - testSagSCacheTestGetNotFound, - testSagSCacheTestSet, - testSagSCacheReload, - testSagSCacheTestGetFound, - testSagSKillEngine, - } -) - -func TestSagSIT(t *testing.T) { - - switch *utils.DBType { - case utils.MetaInternal: - sagConfigDIR = "tutinternal" - case utils.MetaMySQL: - sagConfigDIR = "tutmysql" - case utils.MetaMongo: - sagConfigDIR = "tutmongo" - case utils.MetaPostgres: - t.SkipNow() - default: - t.Fatal("Unknown Database type") - } - for _, stest := range sTestsSag { - t.Run(sagConfigDIR, stest) - } -} - -func testSagSInitCfg(t *testing.T) { - var err error - sagCfgPath = path.Join(*utils.DataDir, "conf", "samples", sagConfigDIR) - sagCfg, err = config.NewCGRConfigFromPath(sagCfgPath) - if err != nil { - t.Error(err) - } -} - -func testSagSInitDataDb(t *testing.T) { - if err := engine.InitDataDb(sagCfg); err != nil { - t.Fatal(err) - } -} - -// Wipe out the cdr database -func testSagSResetStorDb(t *testing.T) { - if err := engine.InitStorDb(sagCfg); err != nil { - t.Fatal(err) - } -} - -// Start CGR Engine -func testSagSStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(sagCfgPath, *utils.WaitRater); err != nil { - t.Fatal(err) - } -} - -// Connect rpc client to rater -func testSagSRPCConn(t *testing.T) { - var err error - sagRPC, err = newRPCClient(sagCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal(err) - } -} -func testSagSLoadAdd(t *testing.T) { - sagProfile := &engine.SagProfileWithAPIOpts{ - SagProfile: &engine.SagProfile{ - Tenant: "cgrates.org", - ID: "SG_Sum", - QueryInterval: 2 * time.Minute, - StatIDs: []string{"SQProfile1"}, - MetricIDs: []string{"*sum"}, - }, - } - - var result string - if err := sagRPC.Call(context.Background(), utils.APIerSv1SetSagProfile, sagProfile, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } - -} - -func testSagSSetSagProfile(t *testing.T) { - var ( - reply *engine.SagProfileWithAPIOpts - result string - ) - sagProfile = &engine.SagProfileWithAPIOpts{ - SagProfile: &engine.SagProfile{ - Tenant: "cgrates.org", - ID: "Sag1", - QueryInterval: time.Second * 15, - StatIDs: []string{"SQ1", "SQ2"}, - MetricIDs: []string{"*acc", "*sum"}, - Sorting: "*asc", - ThresholdIDs: []string{"THD1", "THD2"}}, - } - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, - &utils.TenantID{Tenant: "cgrates.org", ID: "Sag1"}, &reply); err == nil || - err.Error() != utils.ErrNotFound.Error() { - t.Fatal(err) - } - if err := sagRPC.Call(context.Background(), utils.APIerSv1SetSagProfile, sagProfile, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Errorf("Expected: %v,Received: %v", utils.OK, result) - } - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "Sag1"}, &reply); err != nil { - t.Error(err) - } else if diff := cmp.Diff(sagProfile, reply, cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != utils.EmptyString { - t.Errorf("Unnexpected profile (-expected +got):\n%s", diff) - } -} -func testSagSGetSagProfileIDs(t *testing.T) { - expected := []string{"Sag1", "SG_Sum"} - var result []string - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfileIDs, utils.PaginatorWithTenant{}, &result); err != nil { - t.Error(err) - } else if len(expected) != len(result) { - t.Errorf("Expecting : %+v, received: %+v", expected, result) - } -} - -func testSagSUpdateSagProfile(t *testing.T) { - sagProfile.Sorting = "*desc" - var ( - reply *engine.SagProfileWithAPIOpts - result string - ) - if err := sagRPC.Call(context.Background(), utils.APIerSv1SetSagProfile, sagProfile, &result); err != nil { - t.Error(err) - } - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "Sag1"}, &reply); err != nil { - t.Error(err) - } else if diff := cmp.Diff(sagProfile, reply, cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != utils.EmptyString { - t.Errorf("Unnexpected profile (-expected +got):\n%s", diff) - } -} -func testSagSRemSagProfile(t *testing.T) { - var ( - resp string - reply *engine.SagProfile - ) - if err := sagRPC.Call(context.Background(), utils.APIerSv1RemoveSagProfile, - &utils.TenantID{Tenant: "cgrates.org", ID: "Sag1"}, &resp); err != nil { - t.Error(err) - } else if resp != utils.OK { - t.Error("Unexpected reply returned", resp) - } - - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, - &utils.TenantID{Tenant: "cgrates.org", ID: "Sag1"}, - &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { - t.Error(err) - } -} - -func testSagSKillEngine(t *testing.T) { - if err := engine.KillEngine(*utils.WaitRater); err != nil { - t.Error(err) - } -} - -func testSagSCacheTestGetNotFound(t *testing.T) { - var reply *engine.SagProfile - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, - &utils.TenantID{Tenant: "cgrates.org", ID: "SAGS_CACHE"}, &reply); err == nil || - err.Error() != utils.ErrNotFound.Error() { - t.Fatal(err) - } -} - -func testSagSCacheTestGetFound(t *testing.T) { - var reply *engine.SagProfile - if err := sagRPC.Call(context.Background(), utils.APIerSv1GetSagProfile, - &utils.TenantID{Tenant: "cgrates.org", ID: "SAGS_CACHE"}, &reply); err != nil { - t.Fatal(err) - } -} - -func testSagSCacheTestSet(t *testing.T) { - sagProfile = &engine.SagProfileWithAPIOpts{ - SagProfile: &engine.SagProfile{ - Tenant: "cgrates.org", - ID: "SAGS_CACHE", - }, - APIOpts: map[string]any{ - utils.CacheOpt: utils.MetaNone, - }, - } - var reply string - if err := sagRPC.Call(context.Background(), utils.APIerSv1SetSagProfile, sagProfile, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Error("Unexpected reply returned", reply) - } -} - -func testSagSCacheReload(t *testing.T) { - cache := &utils.AttrReloadCacheWithAPIOpts{ - SagProfileIDs: []string{"cgrates.org:SAGS_CACHE"}, - } - var reply string - if err := sagRPC.Call(context.Background(), utils.CacheSv1ReloadCache, cache, &reply); err != nil { - t.Error("Got error on CacheSv1.ReloadCache: ", err.Error()) - } else if reply != utils.OK { - t.Error("Calling CacheSv1.ReloadCache got reply: ", reply) - } -} diff --git a/apier/v1/tpsags.go b/apier/v1/tprankings.go similarity index 66% rename from apier/v1/tpsags.go rename to apier/v1/tprankings.go index f2de6f947..e054f5509 100644 --- a/apier/v1/tpsags.go +++ b/apier/v1/tprankings.go @@ -23,30 +23,30 @@ import ( "github.com/cgrates/cgrates/utils" ) -// SetTPSags creates a new stataggregator within a tariff plan -func (apierSv1 *APIerSv1) SetTPSag(ctx *context.Context, sag *utils.TPSagsProfile, reply *string) error { +// SetTPRankings creates a new ranking within a tariff plan +func (apierSv1 *APIerSv1) SetTPRanking(ctx *context.Context, sag *utils.TPRankingProfile, reply *string) error { if missing := utils.MissingStructFields(sag, []string{utils.TPid, utils.ID}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } if sag.Tenant == utils.EmptyString { sag.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant } - if err := apierSv1.StorDb.SetTPSags([]*utils.TPSagsProfile{sag}); err != nil { + if err := apierSv1.StorDb.SetTPRankings([]*utils.TPRankingProfile{sag}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -// GetTPSag queries specific Sag on Tariff plan -func (apierSv1 *APIerSv1) GetTPSag(ctx *context.Context, sag *utils.TPTntID, reply *utils.TPSagsProfile) error { - if missing := utils.MissingStructFields(sag, []string{utils.TPid, utils.ID}); len(missing) != 0 { //Params missing +// GetTPRanking queries specific Ranking on Tariff plan +func (apierSv1 *APIerSv1) GetTPRanking(ctx *context.Context, ranking *utils.TPTntID, reply *utils.TPRankingProfile) error { + if missing := utils.MissingStructFields(ranking, []string{utils.TPid, utils.ID}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if sag.Tenant == utils.EmptyString { - sag.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant + if ranking.Tenant == utils.EmptyString { + ranking.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant } - sgs, err := apierSv1.StorDb.GetTPSags(sag.TPid, sag.Tenant, sag.ID) + sgs, err := apierSv1.StorDb.GetTPRankings(ranking.TPid, ranking.Tenant, ranking.ID) if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) @@ -57,21 +57,21 @@ func (apierSv1 *APIerSv1) GetTPSag(ctx *context.Context, sag *utils.TPTntID, rep return nil } -type AttrGetTPSagIds struct { +type AttrGetTPRankingIds struct { TPid string // Tariff plan id Tenant string utils.PaginatorWithSearch } -// GetTPSagIDs queries Sag identities on specific tariff plan. -func (apierSv1 *APIerSv1) GetTPSagIDs(ctx *context.Context, attrs *AttrGetTPSagIds, reply *[]string) error { +// GetTPRankingIDs queries Ranking identities on specific tariff plan. +func (apierSv1 *APIerSv1) GetTPRankingIDs(ctx *context.Context, attrs *AttrGetTPRankingIds, reply *[]string) error { if missing := utils.MissingStructFields(&attrs, []string{utils.TPid}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } if attrs.Tenant == utils.EmptyString { attrs.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant } - ids, err := apierSv1.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPSags, + ids, err := apierSv1.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPRankings, utils.TPDistinctIds{utils.TenantCfg, utils.IDCfg}, nil, &attrs.PaginatorWithSearch) if err != nil { if err.Error() != utils.ErrNotFound.Error() { @@ -83,15 +83,15 @@ func (apierSv1 *APIerSv1) GetTPSagIDs(ctx *context.Context, attrs *AttrGetTPSagI return nil } -// RemoveTPSag removes specific Sag on Tariff plan -func (apierSv1 *APIerSv1) RemoveTPSag(ctx *context.Context, sag *utils.TPTntID, reply *string) error { +// RemoveTPRanking removes specific Ranking on Tariff plan +func (apierSv1 *APIerSv1) RemoveTPRanking(ctx *context.Context, sag *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(sag, []string{utils.TPid, utils.ID}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } if sag.Tenant == utils.EmptyString { sag.Tenant = apierSv1.Config.GeneralCfg().DefaultTenant } - if err := apierSv1.StorDb.RemTpData(utils.TBLTPSags, sag.TPid, + if err := apierSv1.StorDb.RemTpData(utils.TBLTPRankings, sag.TPid, map[string]string{utils.TenantCfg: sag.Tenant, utils.IDCfg: sag.ID}); err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/tprankings_it_test.go b/apier/v1/tprankings_it_test.go new file mode 100644 index 000000000..b3554976c --- /dev/null +++ b/apier/v1/tprankings_it_test.go @@ -0,0 +1,202 @@ +//go:build offline +// +build offline + +/* +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" + "sort" + "testing" + + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" + "github.com/cgrates/birpc/jsonrpc" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +var ( + tpRankingCfgPath string + tpRankingCfg *config.CGRConfig + tpRankingRPC *birpc.Client + tpRanking *utils.TPRankingProfile + tpRankingDelay int + tpRankingConfigDIR string //run tests for specific configuration +) + +var sTestsTPRankings = []func(t *testing.T){ + testTPRankingsInitCfg, + testTPRankingsResetStorDb, + testTPRankingsStartEngine, + testTPRankingsRpcConn, + testTPRankingsGetTPRankingBeforeSet, + testTPRankingsSetTPRanking, + testTPRankingsGetTPRankingAfterSet, + testTPRankingsUpdateTPRanking, + testTPRankingsGetTPRankingAfterUpdate, + testTPRankingsRemoveTPRanking, + testTPRankingsGetTPRankingAfterRemove, + testTPRankingsKillEngine, +} + +// Test start here +func TestTPRankingIT(t *testing.T) { + switch *utils.DBType { + case utils.MetaInternal: + tpRankingConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpRankingConfigDIR = "tutmysql" + case utils.MetaMongo: + tpRankingConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpRankingConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") + } + for _, stest := range sTestsTPRankings { + t.Run(tpRankingConfigDIR, stest) + } +} + +func testTPRankingsInitCfg(t *testing.T) { + var err error + tpRankingCfgPath = path.Join(*utils.DataDir, "conf", "samples", tpRankingConfigDIR) + tpRankingCfg, err = config.NewCGRConfigFromPath(tpRankingCfgPath) + if err != nil { + t.Error(err) + } + tpRankingDelay = 1000 +} + +// Wipe out the cdr database +func testTPRankingsResetStorDb(t *testing.T) { + if err := engine.InitStorDb(tpRankingCfg); err != nil { + t.Fatal(err) + } +} + +// Start CGR Engine +func testTPRankingsStartEngine(t *testing.T) { + if _, err := engine.StopStartEngine(tpRankingCfgPath, tpRankingDelay); err != nil { + t.Fatal(err) + } +} + +// Connect rpc client to rater +func testTPRankingsRpcConn(t *testing.T) { + var err error + tpRankingRPC, err = jsonrpc.Dial(utils.TCP, tpRankingCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + if err != nil { + t.Fatal(err) + } +} + +func testTPRankingsGetTPRankingBeforeSet(t *testing.T) { + var reply *utils.TPRankingProfile + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1GetTPRanking, + &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Ranking1"}, + &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { + t.Error(err) + } +} + +func testTPRankingsSetTPRanking(t *testing.T) { + tpRanking = &utils.TPRankingProfile{ + Tenant: "cgrates.org", + TPid: "TPS1", + ID: "Ranking1", + QueryInterval: "1m", + Sorting: "*asc", + StatIDs: []string{"Stat1"}, + ThresholdIDs: []string{"ThreshValue", "ThreshValueTwo"}, + } + sort.Strings(tpRanking.ThresholdIDs) + var result string + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1SetTPRanking, tpRanking, &result); err != nil { + t.Error(err) + } else if result != utils.OK { + t.Error("Unexpected reply returned", result) + } +} + +func testTPRankingsGetTPRankingAfterSet(t *testing.T) { + var respond *utils.TPRankingProfile + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1GetTPRanking, + &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Ranking1"}, &respond); err != nil { + t.Fatal(err) + } + sort.Strings(respond.ThresholdIDs) + if !reflect.DeepEqual(tpRanking, respond) { + t.Errorf("Expecting: %+v, received: %+v", tpRanking, respond) + } +} + +func testTPRankingsUpdateTPRanking(t *testing.T) { + var result string + + tpRanking.MetricIDs = []string{"*sum", "*average"} + sort.Strings(tpRanking.MetricIDs) + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1SetTPRanking, tpRanking, &result); err != nil { + t.Error(err) + } else if result != utils.OK { + t.Error("Unexpected reply returned", result) + } +} + +func testTPRankingsGetTPRankingAfterUpdate(t *testing.T) { + var expectedTPS *utils.TPRankingProfile + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1GetTPRanking, + &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Ranking1"}, &expectedTPS); err != nil { + t.Fatal(err) + } + sort.Strings(expectedTPS.ThresholdIDs) + sort.Strings(expectedTPS.MetricIDs) + if !reflect.DeepEqual(tpRanking, expectedTPS) { + t.Errorf("Expecting: %+v, received: %+v", tpRanking, expectedTPS) + } +} + +func testTPRankingsRemoveTPRanking(t *testing.T) { + var resp string + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1RemoveTPRanking, + &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Ranking1"}, &resp); err != nil { + t.Error(err) + } else if resp != utils.OK { + t.Error("Unexpected reply returned", resp) + } +} + +func testTPRankingsGetTPRankingAfterRemove(t *testing.T) { + var respond *utils.TPRankingProfile + if err := tpRankingRPC.Call(context.Background(), utils.APIerSv1GetTPRanking, + &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Ranking1"}, + &respond); err == nil || err.Error() != utils.ErrNotFound.Error() { + t.Error(err) + } +} + +func testTPRankingsKillEngine(t *testing.T) { + if err := engine.KillEngine(tpRankingDelay); err != nil { + t.Error(err) + } +} diff --git a/apier/v1/tpsags_it_test.go b/apier/v1/tpsags_it_test.go deleted file mode 100644 index 816efa9ea..000000000 --- a/apier/v1/tpsags_it_test.go +++ /dev/null @@ -1,202 +0,0 @@ -//go:build offline -// +build offline - -/* -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" - "sort" - "testing" - - "github.com/cgrates/birpc" - "github.com/cgrates/birpc/context" - "github.com/cgrates/birpc/jsonrpc" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) - -var ( - tpSagCfgPath string - tpSagCfg *config.CGRConfig - tpSagRPC *birpc.Client - tpSag *utils.TPSagsProfile - tpSagDelay int - tpSagConfigDIR string //run tests for specific configuration -) - -var sTestsTPSags = []func(t *testing.T){ - testTPSagsInitCfg, - testTPSagsResetStorDb, - testTPSagsStartEngine, - testTPSagsRpcConn, - testTPSagsGetTPSagBeforeSet, - testTPSagsSetTPSag, - testTPSagsGetTPSagAfterSet, - testTPSagsUpdateTPSag, - testTPSagsGetTPSagAfterUpdate, - testTPSagsRemoveTPSag, - testTPSagsGetTPSagAfterRemove, - testTPSagsKillEngine, -} - -// Test start here -func TestTPSagIT(t *testing.T) { - switch *utils.DBType { - case utils.MetaInternal: - tpSagConfigDIR = "tutinternal" - case utils.MetaMySQL: - tpSagConfigDIR = "tutmysql" - case utils.MetaMongo: - tpSagConfigDIR = "tutmongo" - case utils.MetaPostgres: - tpSagConfigDIR = "tutpostgres" - default: - t.Fatal("Unknown Database type") - } - for _, stest := range sTestsTPSags { - t.Run(tpSagConfigDIR, stest) - } -} - -func testTPSagsInitCfg(t *testing.T) { - var err error - tpSagCfgPath = path.Join(*utils.DataDir, "conf", "samples", tpSagConfigDIR) - tpSagCfg, err = config.NewCGRConfigFromPath(tpSagCfgPath) - if err != nil { - t.Error(err) - } - tpSagDelay = 1000 -} - -// Wipe out the cdr database -func testTPSagsResetStorDb(t *testing.T) { - if err := engine.InitStorDb(tpSagCfg); err != nil { - t.Fatal(err) - } -} - -// Start CGR Engine -func testTPSagsStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(tpSagCfgPath, tpSagDelay); err != nil { - t.Fatal(err) - } -} - -// Connect rpc client to rater -func testTPSagsRpcConn(t *testing.T) { - var err error - tpSagRPC, err = jsonrpc.Dial(utils.TCP, tpSagCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal(err) - } -} - -func testTPSagsGetTPSagBeforeSet(t *testing.T) { - var reply *utils.TPSagsProfile - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1GetTPSag, - &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Sag1"}, - &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { - t.Error(err) - } -} - -func testTPSagsSetTPSag(t *testing.T) { - tpSag = &utils.TPSagsProfile{ - Tenant: "cgrates.org", - TPid: "TPS1", - ID: "Sag1", - QueryInterval: "1m", - Sorting: "*asc", - StatIDs: []string{"Stat1"}, - ThresholdIDs: []string{"ThreshValue", "ThreshValueTwo"}, - } - sort.Strings(tpSag.ThresholdIDs) - var result string - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1SetTPSag, tpSag, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } -} - -func testTPSagsGetTPSagAfterSet(t *testing.T) { - var respond *utils.TPSagsProfile - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1GetTPSag, - &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Sag1"}, &respond); err != nil { - t.Fatal(err) - } - sort.Strings(respond.ThresholdIDs) - if !reflect.DeepEqual(tpSag, respond) { - t.Errorf("Expecting: %+v, received: %+v", tpSag, respond) - } -} - -func testTPSagsUpdateTPSag(t *testing.T) { - var result string - - tpSag.MetricIDs = []string{"*sum", "*average"} - sort.Strings(tpSag.MetricIDs) - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1SetTPSag, tpSag, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } -} - -func testTPSagsGetTPSagAfterUpdate(t *testing.T) { - var expectedTPS *utils.TPSagsProfile - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1GetTPSag, - &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Sag1"}, &expectedTPS); err != nil { - t.Fatal(err) - } - sort.Strings(expectedTPS.ThresholdIDs) - sort.Strings(expectedTPS.MetricIDs) - if !reflect.DeepEqual(tpSag, expectedTPS) { - t.Errorf("Expecting: %+v, received: %+v", tpSag, expectedTPS) - } -} - -func testTPSagsRemoveTPSag(t *testing.T) { - var resp string - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1RemoveTPSag, - &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Sag1"}, &resp); err != nil { - t.Error(err) - } else if resp != utils.OK { - t.Error("Unexpected reply returned", resp) - } -} - -func testTPSagsGetTPSagAfterRemove(t *testing.T) { - var respond *utils.TPSagsProfile - if err := tpSagRPC.Call(context.Background(), utils.APIerSv1GetTPSag, - &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Sag1"}, - &respond); err == nil || err.Error() != utils.ErrNotFound.Error() { - t.Error(err) - } -} - -func testTPSagsKillEngine(t *testing.T) { - if err := engine.KillEngine(tpSagDelay); err != nil { - t.Error(err) - } -} diff --git a/apier/v1/tptrends_it_test.go b/apier/v1/tptrends_it_test.go index fc40ead00..aa8f61e9a 100644 --- a/apier/v1/tptrends_it_test.go +++ b/apier/v1/tptrends_it_test.go @@ -113,7 +113,7 @@ func testTPTrendsRpcConn(t *testing.T) { func testTPTrendsGetTPTrendBeforeSet(t *testing.T) { var reply *utils.TPTrendsProfile - if err := tpTrendRPC.Call(context.Background(), utils.APIerSv1GetTPSag, + if err := tpTrendRPC.Call(context.Background(), utils.APIerSv1GetTPRanking, &utils.TPTntID{TPid: "TPS1", Tenant: "cgrates.org", ID: "Trend1"}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 697514085..414241284 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -456,7 +456,7 @@ func main() { internalThresholdSChan := make(chan birpc.ClientConnector, 1) internalStatSChan := make(chan birpc.ClientConnector, 1) internalTrendSChan := make(chan birpc.ClientConnector, 1) - internalSagSChan := make(chan birpc.ClientConnector, 1) + internalRankingSChan := make(chan birpc.ClientConnector, 1) internalResourceSChan := make(chan birpc.ClientConnector, 1) internalRouteSChan := make(chan birpc.ClientConnector, 1) internalSchedulerSChan := make(chan birpc.ClientConnector, 1) @@ -486,7 +486,7 @@ func main() { utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats): internalStatSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRoutes): internalRouteSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaTrends): internalTrendSChan, - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSags): internalSagSChan, + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRankings): internalRankingSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): internalThresholdSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaServiceManager): internalServeManagerChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaConfig): internalConfigChan, @@ -529,7 +529,7 @@ func main() { utils.SIPAgent: new(sync.WaitGroup), utils.StatS: new(sync.WaitGroup), utils.TrendS: new(sync.WaitGroup), - utils.SagS: new(sync.WaitGroup), + utils.RankingS: new(sync.WaitGroup), utils.StorDB: new(sync.WaitGroup), utils.ThresholdS: new(sync.WaitGroup), utils.AccountS: new(sync.WaitGroup), @@ -613,8 +613,8 @@ func main() { internalStatSChan, connManager, anz, srvDep) srS := services.NewTrendService(cfg, dmService, cacheS, filterSChan, server, internalTrendSChan, connManager, anz, srvDep) - sgS := services.NewSagService(cfg, dmService, cacheS, filterSChan, server, - internalSagSChan, connManager, anz, srvDep) + sgS := services.NewRankingService(cfg, dmService, cacheS, filterSChan, server, + internalRankingSChan, connManager, anz, srvDep) reS := services.NewResourceService(cfg, dmService, cacheS, filterSChan, server, internalResourceSChan, connManager, anz, srvDep) routeS := services.NewRouteService(cfg, dmService, cacheS, filterSChan, server, diff --git a/config/config.go b/config/config.go index 90dda9cb6..3a4ac6f61 100644 --- a/config/config.go +++ b/config/config.go @@ -155,7 +155,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) { cfg.resourceSCfg = &ResourceSConfig{Opts: &ResourcesOpts{}} cfg.statsCfg = &StatSCfg{Opts: &StatsOpts{}} cfg.trendsCfg = new(TrendSCfg) - cfg.sagsCfg = new(SagSCfg) + cfg.rankingsCfg = new(RankingSCfg) cfg.thresholdSCfg = &ThresholdSCfg{Opts: &ThresholdsOpts{}} cfg.routeSCfg = &RouteSCfg{Opts: &RoutesOpts{}} cfg.sureTaxCfg = new(SureTaxCfg) @@ -316,7 +316,7 @@ type CGRConfig struct { resourceSCfg *ResourceSConfig // ResourceS config statsCfg *StatSCfg // StatS config trendsCfg *TrendSCfg // TrendS config - sagsCfg *SagSCfg // Sags config + rankingsCfg *RankingSCfg // Rankings config thresholdSCfg *ThresholdSCfg // ThresholdS config routeSCfg *RouteSCfg // RouteS config sureTaxCfg *SureTaxCfg // SureTax config @@ -368,7 +368,7 @@ func (cfg *CGRConfig) loadFromJSONCfg(jsnCfg *CgrJsonCfg) (err error) { cfg.loadAsteriskAgentCfg, cfg.loadDiameterAgentCfg, cfg.loadRadiusAgentCfg, cfg.loadDNSAgentCfg, cfg.loadHTTPAgentCfg, cfg.loadAttributeSCfg, cfg.loadChargerSCfg, cfg.loadResourceSCfg, cfg.loadStatSCfg, cfg.loadTrendSCfg, - cfg.loadSagSCfg, cfg.loadThresholdSCfg, cfg.loadRouteSCfg, cfg.loadLoaderSCfg, + cfg.loadRankingSCfg, cfg.loadThresholdSCfg, cfg.loadRouteSCfg, cfg.loadLoaderSCfg, cfg.loadMailerCfg, cfg.loadSureTaxCfg, cfg.loadDispatcherSCfg, cfg.loadLoaderCgrCfg, cfg.loadMigratorCgrCfg, cfg.loadTLSCgrCfg, cfg.loadAnalyzerCgrCfg, cfg.loadApierCfg, cfg.loadErsCfg, cfg.loadEesCfg, @@ -646,13 +646,13 @@ func (cfg *CGRConfig) loadTrendSCfg(jsnCfg *CgrJsonCfg) (err error) { return cfg.trendsCfg.loadFromJSONCfg(jsnTrendSCfg) } -// loadSagSCfg loads the SagS section of the configuration -func (cfg *CGRConfig) loadSagSCfg(jsnCfg *CgrJsonCfg) (err error) { - var jsnSagSCfg *SagsJsonCfg - if jsnSagSCfg, err = jsnCfg.SagsJsonCfg(); err != nil { +// loadRankingSCfg loads the RankingS section of the configuration +func (cfg *CGRConfig) loadRankingSCfg(jsnCfg *CgrJsonCfg) (err error) { + var jsnRankingSCfg *RankingsJsonCfg + if jsnRankingSCfg, err = jsnCfg.RankingsJsonCfg(); err != nil { return } - return cfg.sagsCfg.loadFromJSONCfg(jsnSagSCfg) + return cfg.rankingsCfg.loadFromJSONCfg(jsnRankingSCfg) } // loadThresholdSCfg loads the ThresholdS section of the configuration @@ -916,11 +916,11 @@ func (cfg *CGRConfig) TrendSCfg() *TrendSCfg { return cfg.trendsCfg } -// SagSCfg returns the config for SagS -func (cfg *CGRConfig) SagSCfg() *SagSCfg { - cfg.lks[SAGS_JSON].Lock() - defer cfg.lks[SAGS_JSON].Unlock() - return cfg.sagsCfg +// RankingSCfg returns the config for RankingS +func (cfg *CGRConfig) RankingSCfg() *RankingSCfg { + cfg.lks[RANKINGS_JSON].Lock() + defer cfg.lks[RANKINGS_JSON].Unlock() + return cfg.rankingsCfg } // ThresholdSCfg returns the config for ThresholdS @@ -1273,7 +1273,7 @@ func (cfg *CGRConfig) getLoadFunctions() map[string]func(*CgrJsonCfg) error { RESOURCES_JSON: cfg.loadResourceSCfg, STATS_JSON: cfg.loadStatSCfg, TRENDS_JSON: cfg.loadTrendSCfg, - SAGS_JSON: cfg.loadSagSCfg, + RANKINGS_JSON: cfg.loadRankingSCfg, THRESHOLDS_JSON: cfg.loadThresholdSCfg, RouteSJson: cfg.loadRouteSCfg, LoaderJson: cfg.loadLoaderSCfg, @@ -1526,8 +1526,8 @@ func (cfg *CGRConfig) reloadSections(sections ...string) { cfg.rldChans[STATS_JSON] <- struct{}{} case TRENDS_JSON: cfg.rldChans[TRENDS_JSON] <- struct{}{} - case SAGS_JSON: - cfg.rldChans[SAGS_JSON] <- struct{}{} + case RANKINGS_JSON: + cfg.rldChans[RANKINGS_JSON] <- struct{}{} case THRESHOLDS_JSON: cfg.rldChans[THRESHOLDS_JSON] <- struct{}{} case RouteSJson: @@ -1581,7 +1581,7 @@ func (cfg *CGRConfig) AsMapInterface(separator string) (mp map[string]any) { RESOURCES_JSON: cfg.resourceSCfg.AsMapInterface(), STATS_JSON: cfg.statsCfg.AsMapInterface(), TRENDS_JSON: cfg.trendsCfg.AsMapInterface(), - SAGS_JSON: cfg.sagsCfg.AsMapInterface(), + RANKINGS_JSON: cfg.rankingsCfg.AsMapInterface(), THRESHOLDS_JSON: cfg.thresholdSCfg.AsMapInterface(), RouteSJson: cfg.routeSCfg.AsMapInterface(), SURETAX_JSON: cfg.sureTaxCfg.AsMapInterface(separator), @@ -1722,8 +1722,8 @@ func (cfg *CGRConfig) V1GetConfig(ctx *context.Context, args *SectionWithAPIOpts mp = cfg.StatSCfg().AsMapInterface() case TRENDS_JSON: mp = cfg.TrendSCfg().AsMapInterface() - case SAGS_JSON: - mp = cfg.SagSCfg().AsMapInterface() + case RANKINGS_JSON: + mp = cfg.RankingSCfg().AsMapInterface() case THRESHOLDS_JSON: mp = cfg.ThresholdSCfg().AsMapInterface() case RouteSJson: @@ -1894,8 +1894,8 @@ func (cfg *CGRConfig) V1GetConfigAsJSON(ctx *context.Context, args *SectionWithA mp = cfg.StatSCfg().AsMapInterface() case TRENDS_JSON: mp = cfg.TrendSCfg().AsMapInterface() - case SAGS_JSON: - mp = cfg.SagSCfg().AsMapInterface() + case RANKINGS_JSON: + mp = cfg.RankingSCfg().AsMapInterface() case THRESHOLDS_JSON: mp = cfg.ThresholdSCfg().AsMapInterface() case RouteSJson: @@ -2020,7 +2020,7 @@ func (cfg *CGRConfig) Clone() (cln *CGRConfig) { resourceSCfg: cfg.resourceSCfg.Clone(), statsCfg: cfg.statsCfg.Clone(), trendsCfg: cfg.trendsCfg.Clone(), - sagsCfg: cfg.sagsCfg.Clone(), + rankingsCfg: cfg.rankingsCfg.Clone(), thresholdSCfg: cfg.thresholdSCfg.Clone(), routeSCfg: cfg.routeSCfg.Clone(), sureTaxCfg: cfg.sureTaxCfg.Clone(), diff --git a/config/config_defaults.go b/config/config_defaults.go index c9b1ed206..e68e09973 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -114,7 +114,7 @@ const CGRATES_CFG_JSON = ` "*resource_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*statqueue_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, - "*sag_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, + "*ranking_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*trend_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*statqueues": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*threshold_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, @@ -195,7 +195,7 @@ const CGRATES_CFG_JSON = ` "*tp_account_actions": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*tp_resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*tp_stats": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, - "*tp_sags": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, + "*tp_rankings": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*tp_trends": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*tp_thresholds": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*tp_filters": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, @@ -285,7 +285,7 @@ const CGRATES_CFG_JSON = ` "*resources": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control resources caching "*event_resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // matching resources to events "*statqueue_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // statqueue profiles - "*sag_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // stataggregator profiles + "*ranking_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // stataggregator profiles "*statqueues": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // statqueues with metrics "*threshold_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control threshold profiles caching "*thresholds": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control thresholds caching diff --git a/config/config_json.go b/config/config_json.go index b9978268d..9e78a3e06 100644 --- a/config/config_json.go +++ b/config/config_json.go @@ -45,7 +45,7 @@ const ( STATS_JSON = "stats" THRESHOLDS_JSON = "thresholds" TRENDS_JSON = "trends" - SAGS_JSON = "sags" + RANKINGS_JSON = "rankings" RouteSJson = "routes" LoaderJson = "loaders" MAILER_JSN = "mailer" @@ -74,7 +74,7 @@ const ( var ( sortedCfgSections = []string{GENERAL_JSN, RPCConnsJsonName, DATADB_JSN, STORDB_JSN, LISTEN_JSN, TlsCfgJson, HTTP_JSN, SCHEDULER_JSN, CACHE_JSN, FilterSjsn, RALS_JSN, CDRS_JSN, ERsJson, SessionSJson, AsteriskAgentJSN, FreeSWITCHAgentJSN, KamailioAgentJSN, - DA_JSN, RA_JSN, HttpAgentJson, DNSAgentJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, TRENDS_JSON, SAGS_JSON, + DA_JSN, RA_JSN, HttpAgentJson, DNSAgentJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, TRENDS_JSON, RANKINGS_JSON, THRESHOLDS_JSON, RouteSJson, LoaderJson, MAILER_JSN, SURETAX_JSON, CgrLoaderCfgJson, CgrMigratorCfgJson, DispatcherSJson, JanusAgentJson, AnalyzerCfgJson, ApierS, EEsJson, SIPAgentJson, RegistrarCJson, TemplatesJson, ConfigSJson, APIBanCfgJson, SentryPeerCfgJson, CoreSCfgJson} ) @@ -383,12 +383,12 @@ func (jsnCfg CgrJsonCfg) TrendsJsonCfg() (*TrendsJsonCfg, error) { return cfg, nil } -func (jsnCfg CgrJsonCfg) SagsJsonCfg() (*SagsJsonCfg, error) { - rawCfg, hasKey := jsnCfg[SAGS_JSON] +func (jsnCfg CgrJsonCfg) RankingsJsonCfg() (*RankingsJsonCfg, error) { + rawCfg, hasKey := jsnCfg[RANKINGS_JSON] if !hasKey { return nil, nil } - cfg := new(SagsJsonCfg) + cfg := new(RankingsJsonCfg) if err := json.Unmarshal(*rawCfg, cfg); err != nil { return nil, err } diff --git a/config/config_json_test.go b/config/config_json_test.go index c388a04eb..921819e13 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -129,7 +129,7 @@ func TestCacheJsonCfg(t *testing.T) { utils.CacheStatQueueProfiles: {Limit: utils.IntPointer(-1), Ttl: utils.StringPointer(""), Static_ttl: utils.BoolPointer(false), Precache: utils.BoolPointer(false), Remote: utils.BoolPointer(false), Replicate: utils.BoolPointer(false)}, - utils.CacheSagProfiles: {Limit: utils.IntPointer(-1), + utils.CacheRankingProfiles: {Limit: utils.IntPointer(-1), Ttl: utils.StringPointer(""), Static_ttl: utils.BoolPointer(false), Precache: utils.BoolPointer(false), Remote: utils.BoolPointer(false), Replicate: utils.BoolPointer(false)}, utils.CacheStatQueues: {Limit: utils.IntPointer(-1), @@ -410,7 +410,7 @@ func TestDfDataDbJsonCfg(t *testing.T) { Ttl: utils.StringPointer(utils.EmptyString), Static_ttl: utils.BoolPointer(false), }, - utils.MetaSagProfiles: { + utils.MetaRankingProfiles: { Replicate: utils.BoolPointer(false), Remote: utils.BoolPointer(false), Limit: utils.IntPointer(-1), @@ -684,7 +684,7 @@ func TestDfStorDBJsonCfg(t *testing.T) { Ttl: utils.StringPointer(utils.EmptyString), Static_ttl: utils.BoolPointer(false), }, - utils.CacheTBLTPSags: { + utils.CacheTBLTPRankings: { Replicate: utils.BoolPointer(false), Remote: utils.BoolPointer(false), Limit: utils.IntPointer(-1), diff --git a/config/config_test.go b/config/config_test.go index 360c0d39d..eca5b2505 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -559,7 +559,7 @@ func TestCgrCfgJSONDefaultsCacheCFG(t *testing.T) { TTL: 0, Remote: false, StaticTTL: false, Precache: false}, utils.CacheStatQueues: {Limit: -1, TTL: 0, Remote: false, StaticTTL: false, Precache: false}, - utils.CacheSagProfiles: {Limit: -1, + utils.CacheRankingProfiles: {Limit: -1, TTL: 0, Remote: false, StaticTTL: false, Precache: false}, utils.CacheThresholdProfiles: {Limit: -1, TTL: 0, Remote: false, StaticTTL: false, Precache: false}, @@ -4842,7 +4842,7 @@ func TestV1GetConfigAsJSONGeneral(t *testing.T) { func TestV1GetConfigAsJSONDataDB(t *testing.T) { var reply string - expected := `{"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":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sag_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sessions_backup":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false}}` + expected := `{"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":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sessions_backup":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false}}` cfgCgr := NewDefaultCGRConfig() if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Section: DATADB_JSN}, &reply); err != nil { t.Error(err) @@ -4853,7 +4853,7 @@ func TestV1GetConfigAsJSONDataDB(t *testing.T) { func TestV1GetConfigAsJSONStorDB(t *testing.T) { var reply string - expected := `{"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"CGRateS.org","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*session_costs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_account_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_attributes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_chargers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destination_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_routes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_sags":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_stats":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","pgSchema":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]}}` + expected := `{"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"CGRateS.org","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*session_costs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_account_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_attributes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_chargers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destination_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rankings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_routes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_stats":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","pgSchema":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]}}` cfgCgr := NewDefaultCGRConfig() if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Section: STORDB_JSN}, &reply); err != nil { t.Error(err) @@ -4875,7 +4875,7 @@ func TestV1GetConfigAsJSONTls(t *testing.T) { func TestV1GetConfigAsJSONTCache(t *testing.T) { var reply string - expected := `{"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*rating_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sag_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]}}` + expected := `{"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*ranking_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]}}` cfgCgr := NewDefaultCGRConfig() if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Section: CACHE_JSN}, &reply); err != nil { t.Error(err) @@ -5365,7 +5365,7 @@ func TestV1GetConfigAsJSONAllConfig(t *testing.T) { }` var reply string cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSON) - expected := `{"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","enabled":false,"index_type":"*scorch","ttl":"24h0m0s"},"apiban":{"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,"max_reconnect_interval":"0s","password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*birpc_internal"]},"attributes":{"any_context":true,"apiers_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*processRuns":1,"*profileIDs":[],"*profileIgnoreFilters":false,"*profileRuns":0},"prefix_indexed_fields":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*rating_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sag_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"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":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sag_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sessions_backup":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false},"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":["*birpc_internal"],"synced_conn_requests":false,"vendor_id":0},"dispatchers":{"any_subsystem":true,"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"prevent_loop":false,"suffix_indexed_fields":[]},"dns_agent":{"enabled":false,"listeners":[{"address":"127.0.0.1:53","network":"udp"}],"request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*file_csv":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"concurrent_requests":0,"export_path":"/var/spool/cgrates/ees","failed_posts_dir":"/var/spool/cgrates/failed_posts","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"timezone":"","type":"*none"}]},"ers":{"concurrent_events":1,"ees_conns":[],"enabled":false,"partial_cache_ttl":"1s","readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"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":[],"id":"*default","max_reconnect_interval":"5m0s","opts":{"csvFieldSeparator":",","csvHeaderDefineChar":":","csvRowLength":0,"natsSubject":"cgrates_cdrs","partialCacheAction":"*none","partialOrderField":"~*req.AnswerTime"},"partial_commit_fields":[],"processed_path":"/var/spool/cgrates/ers/out","reconnects":-1,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","tenant":"","timezone":"","type":"*none"}],"sessions_conns":["*internal"]},"filters":{"apiers_conns":[],"resources_conns":[],"stats_conns":[]},"freeswitch_agent":{"active_session_delimiter":",","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","max_reconnect_interval":"0s","password":"ClueCon","reconnects":5,"reply_timeout":"1m0s"}],"extra_fields":"","low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*birpc_internal"],"subscribe_park":true},"general":{"caching_delay":"0","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_parallel_conns":100,"max_reconnect_interval":"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":"0s","forceAttemptHttp2":true,"idleConnTimeout":"1m30s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0s","skipTlsVerify":false,"tlsHandshakeTimeout":"10s"},"freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","registrars_url":"/registrar","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":"","max_reconnect_interval":"0s","reconnects":5}],"sessions_conns":["*birpc_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":"ConnectAttempts","tag":"ConnectAttempts","type":"*variable","value":"~*req.4"},{"path":"Reconnects","tag":"Reconnects","type":"*variable","value":"~*req.5"},{"path":"MaxReconnectInterval","tag":"MaxReconnectInterval","type":"*variable","value":"~*req.6"},{"path":"ConnectTimeout","tag":"ConnectTimeout","type":"*variable","value":"~*req.7"},{"path":"ReplyTimeout","tag":"ReplyTimeout","type":"*variable","value":"~*req.8"},{"path":"TLS","tag":"TLS","type":"*variable","value":"~*req.9"},{"path":"ClientKey","tag":"ClientKey","type":"*variable","value":"~*req.10"},{"path":"ClientCertificate","tag":"ClientCertificate","type":"*variable","value":"~*req.11"},{"path":"CaCertificate","tag":"CaCertificate","type":"*variable","value":"~*req.12"}],"file_name":"DispatcherHosts.csv","flags":null,"type":"*dispatcher_hosts"}],"dry_run":false,"enabled":false,"field_separator":",","id":"*default","lockfile_path":".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":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"0s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"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":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"0s","mysqlDSNParams":null,"mysqlLocation":"","pgSSLMode":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":0,"sqlMaxOpenConns":0},"out_stordb_password":"","out_stordb_port":"3306","out_stordb_type":"*mysql","out_stordb_user":"cgrates","users_filters":null},"radius_agent":{"client_dictionaries":{"*default":["/usr/share/cgrates/radius/dict/"]},"client_secrets":{"*default":"CGRateS.org"},"coa_template":"*coa","dmr_template":"*dmr","enabled":false,"listeners":[{"acct_address":"127.0.0.1:1813","auth_address":"127.0.0.1:1812","network":"udp"}],"request_processors":[],"requests_cache_key":"","sessions_conns":["*internal"]},"rals":{"balance_rating_subject":{"*any":"*zero1ns","*voice":"*zero1s"},"enabled":false,"fallback_depth":3,"max_computed_usage":{"*any":"189h0m0s","*data":"107374182400","*mms":"10000","*sms":"10000","*voice":"72h0m0s"},"max_increments":1000000,"remove_expired":true,"rp_subject_prefix_matching":false,"sessions_conns":[],"stats_conns":[],"thresholds_conns":[]},"registrarc":{"dispatchers":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]},"rpc":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]}},"resources":{"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*units":1,"*usageID":""},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*context":"*routes","*ignoreErrors":false,"*maxCost":""},"prefix_indexed_fields":[],"rals_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*bijson_localhost":{"conns":[{"address":"127.0.0.1:2014","transport":"*birpc_json"}],"poolSize":0,"strategy":"*first"},"*birpc_internal":{"conns":[{"address":"*birpc_internal","transport":""}],"poolSize":0,"strategy":"*first"},"*internal":{"conns":[{"address":"*internal","transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"address":"127.0.0.1:2012","transport":"*json"}],"poolSize":0,"strategy":"*first"}},"sags":{"enabled":false},"schedulers":{"cdrs_conns":[],"dynaprepaid_actionplans":[],"enabled":false,"filters":[],"stats_conns":[],"thresholds_conns":[]},"sentrypeer":{"Audience":"https://sentrypeer.com/api","ClientID":"","ClientSecret":"","GrantType":"client_credentials","IpUrl":"https://sentrypeer.com/api/ip-addresses","NumberUrl":"https://sentrypeer.com/api/phone-numbers","TokenURL":"https://authz.sentrypeer.com/oauth/token"},"sessions":{"alterable_fields":[],"attributes_conns":[],"backup_interval":"0","cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":2,"debit_interval":"0","default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":false,"listen_bigob":"","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","stale_chan_max_extra_usage":"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,"opts":{"*profileIDs":[],"*profileIgnoreFilters":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":"CGRateS.org","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*session_costs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_account_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_attributes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_chargers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destination_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_routes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_sags":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_stats":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","pgSchema":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"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"}],"*cdrLog":[{"mandatory":true,"path":"*cdr.ToR","tag":"ToR","type":"*variable","value":"~*req.BalanceType"},{"mandatory":true,"path":"*cdr.OriginHost","tag":"OriginHost","type":"*constant","value":"127.0.0.1"},{"mandatory":true,"path":"*cdr.RequestType","tag":"RequestType","type":"*constant","value":"*none"},{"mandatory":true,"path":"*cdr.Tenant","tag":"Tenant","type":"*variable","value":"~*req.Tenant"},{"mandatory":true,"path":"*cdr.Account","tag":"Account","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Subject","tag":"Subject","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Cost","tag":"Cost","type":"*variable","value":"~*req.Cost"},{"mandatory":true,"path":"*cdr.Source","tag":"Source","type":"*constant","value":"*cdrLog"},{"mandatory":true,"path":"*cdr.Usage","tag":"Usage","type":"*constant","value":"1"},{"mandatory":true,"path":"*cdr.RunID","tag":"RunID","type":"*variable","value":"~*req.ActionType"},{"mandatory":true,"path":"*cdr.SetupTime","tag":"SetupTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.AnswerTime","tag":"AnswerTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.PreRated","tag":"PreRated","type":"*constant","value":"true"}],"*coa":[{"path":"*radDAReq.User-Name","tag":"User-Name","type":"*variable","value":"~*oreq.User-Name"},{"path":"*radDAReq.NAS-IP-Address","tag":"NAS-IP-Address","type":"*variable","value":"~*oreq.NAS-IP-Address"},{"path":"*radDAReq.Acct-Session-Id","tag":"Acct-Session-Id","type":"*variable","value":"~*oreq.Acct-Session-Id"},{"path":"*radDAReq.Filter-Id","tag":"Filter-Id","type":"*variable","value":"~*req.CustomFilter"}],"*dmr":[{"path":"*radDAReq.User-Name","tag":"User-Name","type":"*variable","value":"~*oreq.User-Name"},{"path":"*radDAReq.NAS-IP-Address","tag":"NAS-IP-Address","type":"*variable","value":"~*oreq.NAS-IP-Address"},{"path":"*radDAReq.Acct-Session-Id","tag":"Acct-Session-Id","type":"*variable","value":"~*oreq.Acct-Session-Id"},{"path":"*radDAReq.Reply-Message","tag":"Reply-Message","type":"*variable","value":"~*req.DisconnectCause"}],"*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,"opts":{"*profileIDs":[],"*profileIgnoreFilters":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},"trends":{"enabled":false,"stats_conns":[]}}` + expected := `{"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","enabled":false,"index_type":"*scorch","ttl":"24h0m0s"},"apiban":{"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,"max_reconnect_interval":"0s","password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*birpc_internal"]},"attributes":{"any_context":true,"apiers_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*processRuns":1,"*profileIDs":[],"*profileIgnoreFilters":false,"*profileRuns":0},"prefix_indexed_fields":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*ranking_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"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":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*sessions_backup":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false},"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":["*birpc_internal"],"synced_conn_requests":false,"vendor_id":0},"dispatchers":{"any_subsystem":true,"attributes_conns":[],"enabled":false,"indexed_selects":true,"nested_fields":false,"prefix_indexed_fields":[],"prevent_loop":false,"suffix_indexed_fields":[]},"dns_agent":{"enabled":false,"listeners":[{"address":"127.0.0.1:53","network":"udp"}],"request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*file_csv":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"concurrent_requests":0,"export_path":"/var/spool/cgrates/ees","failed_posts_dir":"/var/spool/cgrates/failed_posts","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"timezone":"","type":"*none"}]},"ers":{"concurrent_events":1,"ees_conns":[],"enabled":false,"partial_cache_ttl":"1s","readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"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":[],"id":"*default","max_reconnect_interval":"5m0s","opts":{"csvFieldSeparator":",","csvHeaderDefineChar":":","csvRowLength":0,"natsSubject":"cgrates_cdrs","partialCacheAction":"*none","partialOrderField":"~*req.AnswerTime"},"partial_commit_fields":[],"processed_path":"/var/spool/cgrates/ers/out","reconnects":-1,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","tenant":"","timezone":"","type":"*none"}],"sessions_conns":["*internal"]},"filters":{"apiers_conns":[],"resources_conns":[],"stats_conns":[]},"freeswitch_agent":{"active_session_delimiter":",","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","max_reconnect_interval":"0s","password":"ClueCon","reconnects":5,"reply_timeout":"1m0s"}],"extra_fields":"","low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*birpc_internal"],"subscribe_park":true},"general":{"caching_delay":"0","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_parallel_conns":100,"max_reconnect_interval":"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":"0s","forceAttemptHttp2":true,"idleConnTimeout":"1m30s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0s","skipTlsVerify":false,"tlsHandshakeTimeout":"10s"},"freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","registrars_url":"/registrar","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":"","max_reconnect_interval":"0s","reconnects":5}],"sessions_conns":["*birpc_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":"ConnectAttempts","tag":"ConnectAttempts","type":"*variable","value":"~*req.4"},{"path":"Reconnects","tag":"Reconnects","type":"*variable","value":"~*req.5"},{"path":"MaxReconnectInterval","tag":"MaxReconnectInterval","type":"*variable","value":"~*req.6"},{"path":"ConnectTimeout","tag":"ConnectTimeout","type":"*variable","value":"~*req.7"},{"path":"ReplyTimeout","tag":"ReplyTimeout","type":"*variable","value":"~*req.8"},{"path":"TLS","tag":"TLS","type":"*variable","value":"~*req.9"},{"path":"ClientKey","tag":"ClientKey","type":"*variable","value":"~*req.10"},{"path":"ClientCertificate","tag":"ClientCertificate","type":"*variable","value":"~*req.11"},{"path":"CaCertificate","tag":"CaCertificate","type":"*variable","value":"~*req.12"}],"file_name":"DispatcherHosts.csv","flags":null,"type":"*dispatcher_hosts"}],"dry_run":false,"enabled":false,"field_separator":",","id":"*default","lockfile_path":".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":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"0s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"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":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"0s","mysqlDSNParams":null,"mysqlLocation":"","pgSSLMode":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":0,"sqlMaxOpenConns":0},"out_stordb_password":"","out_stordb_port":"3306","out_stordb_type":"*mysql","out_stordb_user":"cgrates","users_filters":null},"radius_agent":{"client_dictionaries":{"*default":["/usr/share/cgrates/radius/dict/"]},"client_secrets":{"*default":"CGRateS.org"},"coa_template":"*coa","dmr_template":"*dmr","enabled":false,"listeners":[{"acct_address":"127.0.0.1:1813","auth_address":"127.0.0.1:1812","network":"udp"}],"request_processors":[],"requests_cache_key":"","sessions_conns":["*internal"]},"rals":{"balance_rating_subject":{"*any":"*zero1ns","*voice":"*zero1s"},"enabled":false,"fallback_depth":3,"max_computed_usage":{"*any":"189h0m0s","*data":"107374182400","*mms":"10000","*sms":"10000","*voice":"72h0m0s"},"max_increments":1000000,"remove_expired":true,"rp_subject_prefix_matching":false,"sessions_conns":[],"stats_conns":[],"thresholds_conns":[]},"rankings":{"enabled":false},"registrarc":{"dispatchers":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]},"rpc":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]}},"resources":{"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*units":1,"*usageID":""},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"attributes_conns":[],"default_ratio":1,"enabled":false,"indexed_selects":true,"nested_fields":false,"opts":{"*context":"*routes","*ignoreErrors":false,"*maxCost":""},"prefix_indexed_fields":[],"rals_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*bijson_localhost":{"conns":[{"address":"127.0.0.1:2014","transport":"*birpc_json"}],"poolSize":0,"strategy":"*first"},"*birpc_internal":{"conns":[{"address":"*birpc_internal","transport":""}],"poolSize":0,"strategy":"*first"},"*internal":{"conns":[{"address":"*internal","transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"address":"127.0.0.1:2012","transport":"*json"}],"poolSize":0,"strategy":"*first"}},"schedulers":{"cdrs_conns":[],"dynaprepaid_actionplans":[],"enabled":false,"filters":[],"stats_conns":[],"thresholds_conns":[]},"sentrypeer":{"Audience":"https://sentrypeer.com/api","ClientID":"","ClientSecret":"","GrantType":"client_credentials","IpUrl":"https://sentrypeer.com/api/ip-addresses","NumberUrl":"https://sentrypeer.com/api/phone-numbers","TokenURL":"https://authz.sentrypeer.com/oauth/token"},"sessions":{"alterable_fields":[],"attributes_conns":[],"backup_interval":"0","cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":2,"debit_interval":"0","default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":false,"listen_bigob":"","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","stale_chan_max_extra_usage":"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,"opts":{"*profileIDs":[],"*profileIgnoreFilters":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":"CGRateS.org","db_port":3306,"db_type":"*mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*session_costs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_account_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_action_triggers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_attributes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_chargers":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destination_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_destinations":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_hosts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_dispatcher_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rankings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rates":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_plans":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_rating_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_routes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_shared_groups":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_stats":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_timings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*tp_trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","pgSchema":"","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"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"}],"*cdrLog":[{"mandatory":true,"path":"*cdr.ToR","tag":"ToR","type":"*variable","value":"~*req.BalanceType"},{"mandatory":true,"path":"*cdr.OriginHost","tag":"OriginHost","type":"*constant","value":"127.0.0.1"},{"mandatory":true,"path":"*cdr.RequestType","tag":"RequestType","type":"*constant","value":"*none"},{"mandatory":true,"path":"*cdr.Tenant","tag":"Tenant","type":"*variable","value":"~*req.Tenant"},{"mandatory":true,"path":"*cdr.Account","tag":"Account","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Subject","tag":"Subject","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Cost","tag":"Cost","type":"*variable","value":"~*req.Cost"},{"mandatory":true,"path":"*cdr.Source","tag":"Source","type":"*constant","value":"*cdrLog"},{"mandatory":true,"path":"*cdr.Usage","tag":"Usage","type":"*constant","value":"1"},{"mandatory":true,"path":"*cdr.RunID","tag":"RunID","type":"*variable","value":"~*req.ActionType"},{"mandatory":true,"path":"*cdr.SetupTime","tag":"SetupTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.AnswerTime","tag":"AnswerTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.PreRated","tag":"PreRated","type":"*constant","value":"true"}],"*coa":[{"path":"*radDAReq.User-Name","tag":"User-Name","type":"*variable","value":"~*oreq.User-Name"},{"path":"*radDAReq.NAS-IP-Address","tag":"NAS-IP-Address","type":"*variable","value":"~*oreq.NAS-IP-Address"},{"path":"*radDAReq.Acct-Session-Id","tag":"Acct-Session-Id","type":"*variable","value":"~*oreq.Acct-Session-Id"},{"path":"*radDAReq.Filter-Id","tag":"Filter-Id","type":"*variable","value":"~*req.CustomFilter"}],"*dmr":[{"path":"*radDAReq.User-Name","tag":"User-Name","type":"*variable","value":"~*oreq.User-Name"},{"path":"*radDAReq.NAS-IP-Address","tag":"NAS-IP-Address","type":"*variable","value":"~*oreq.NAS-IP-Address"},{"path":"*radDAReq.Acct-Session-Id","tag":"Acct-Session-Id","type":"*variable","value":"~*oreq.Acct-Session-Id"},{"path":"*radDAReq.Reply-Message","tag":"Reply-Message","type":"*variable","value":"~*req.DisconnectCause"}],"*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,"opts":{"*profileIDs":[],"*profileIgnoreFilters":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},"trends":{"enabled":false,"stats_conns":[]}}` if err != nil { t.Fatal(err) } @@ -5966,12 +5966,12 @@ func TestConfignewCGRConfigFromPathWithoutEnv(t *testing.T) { } } -func TestCgrCfgJSONDefaultSagSCfg(t *testing.T) { - want := &SagSCfg{ +func TestCgrCfgJSONDefaultRankingSCfg(t *testing.T) { + want := &RankingSCfg{ Enabled: false, StatSConns: []string{}, } - got := cgrCfg.SagSCfg() + got := cgrCfg.RankingSCfg() if reflect.DeepEqual(got, want) { t.Errorf("received: %+v, expecting: %+v", got, want) } @@ -6024,11 +6024,11 @@ func TestV1GetConfigAsJsonTrendS_JSON(t *testing.T) { } } -func TestV1GetConfigAsJsonSAGS_JSON(t *testing.T) { +func TestV1GetConfigAsJsonRANKINGS_JSON(t *testing.T) { var reply string - expected := `{"sags":{"enabled":false}}` + expected := `{"rankings":{"enabled":false}}` cfgCgr := NewDefaultCGRConfig() - if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Section: SAGS_JSON}, &reply); err != nil { + if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Section: RANKINGS_JSON}, &reply); err != nil { t.Error(err) } else if expected != reply { t.Errorf("Expected %+v \n, received %+v", expected, reply) @@ -6051,15 +6051,15 @@ func TestV1GetConfigTRENDS_JSON(t *testing.T) { } } -func TestV1GetConfigSAGS_JSON(t *testing.T) { +func TestV1GetConfigRANKINGS_JSON(t *testing.T) { var reply map[string]any expected := map[string]any{ - SAGS_JSON: map[string]any{ + RANKINGS_JSON: map[string]any{ utils.EnabledCfg: false, }, } cfgCgr := NewDefaultCGRConfig() - if err := cfgCgr.V1GetConfig(context.Background(), &SectionWithAPIOpts{Section: SAGS_JSON}, &reply); err != nil { + if err := cfgCgr.V1GetConfig(context.Background(), &SectionWithAPIOpts{Section: RANKINGS_JSON}, &reply); err != nil { t.Error(err) } else if !reflect.DeepEqual(reply, expected) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(reply)) diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 131ef900b..4543ec23f 100644 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -674,7 +674,7 @@ type TrendsJsonCfg struct { Thresholds_conns *[]string } -type SagsJsonCfg struct { +type RankingsJsonCfg struct { Enabled *bool Stats_conns *[]string } diff --git a/config/sagscfg.go b/config/rankingscfg.go similarity index 87% rename from config/sagscfg.go rename to config/rankingscfg.go index 446060dfb..a344483a8 100644 --- a/config/sagscfg.go +++ b/config/rankingscfg.go @@ -19,12 +19,12 @@ package config import "github.com/cgrates/cgrates/utils" -type SagSCfg struct { +type RankingSCfg struct { Enabled bool StatSConns []string } -func (sgsCfg *SagSCfg) loadFromJSONCfg(jsnCfg *SagsJsonCfg) (err error) { +func (sgsCfg *RankingSCfg) loadFromJSONCfg(jsnCfg *RankingsJsonCfg) (err error) { if jsnCfg == nil { return } @@ -43,7 +43,7 @@ func (sgsCfg *SagSCfg) loadFromJSONCfg(jsnCfg *SagsJsonCfg) (err error) { return } -func (sgsCfg *SagSCfg) AsMapInterface() (initialMP map[string]any) { +func (sgsCfg *RankingSCfg) AsMapInterface() (initialMP map[string]any) { initialMP = map[string]any{ utils.EnabledCfg: sgsCfg.Enabled, } @@ -60,8 +60,8 @@ func (sgsCfg *SagSCfg) AsMapInterface() (initialMP map[string]any) { return } -func (sgscfg *SagSCfg) Clone() (cln *SagSCfg) { - cln = &SagSCfg{ +func (sgscfg *RankingSCfg) Clone() (cln *RankingSCfg) { + cln = &RankingSCfg{ Enabled: sgscfg.Enabled, } if sgscfg.StatSConns != nil { diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql index 136ecbf1c..2af8c6047 100644 --- a/data/storage/mysql/create_tariffplan_tables.sql +++ b/data/storage/mysql/create_tariffplan_tables.sql @@ -296,11 +296,11 @@ CREATE TABLE tp_stats ( -- --- Table structure for tabls `tp_sags` +-- Table structure for tabls `tp_rankings` -- -DROP TABLE IF EXISTS tp_sags; -CREATE TABLE tp_sags( +DROP TABLE IF EXISTS tp_rankings; +CREATE TABLE tp_rankings( `pk` int(11) NOT NULL AUTO_INCREMENT, `tpid` varchar(64) NOT NULL, `tenant` varchar(64) NOT NULL, @@ -314,7 +314,7 @@ CREATE TABLE tp_sags( `created_at` TIMESTAMP, PRIMARY KEY (`pk`), KEY `tpid` (`tpid`), - UNIQUE KEY `unique_tp_sags` (`tpid`,`tenant`,`id`,`stat_ids`) + UNIQUE KEY `unique_tp_rankings` (`tpid`,`tenant`,`id`,`stat_ids`) ); -- diff --git a/data/storage/postgres/create_tariffplan_tables.sql b/data/storage/postgres/create_tariffplan_tables.sql index 037d4fe1c..5b6d0f93c 100644 --- a/data/storage/postgres/create_tariffplan_tables.sql +++ b/data/storage/postgres/create_tariffplan_tables.sql @@ -290,11 +290,11 @@ CREATE INDEX tp_stats_idx ON tp_stats (tpid); CREATE INDEX tp_stats_unique ON tp_stats ("tpid","tenant", "id", "filter_ids","metric_ids"); -- --- Table structure for table `tp_sags` +-- Table structure for table `tp_rankings` -- -DROP TABLE IF EXISTS tp_sags; -CREATE TABLE tp_sags( +DROP TABLE IF EXISTS tp_rankings; +CREATE TABLE tp_rankings( "pk" SERIAL PRIMARY KEY, "tpid" varchar(64) NOT NULL, "tenant" varchar(64) NOT NULL, @@ -307,8 +307,8 @@ CREATE TABLE tp_sags( "threshold_ids" varchar(64) NOT NULL, "created_at" TIMESTAMP WITH TIME ZONE ); -CREATE INDEX tp_sags_idx ON tp_sags (tpid); -CREATE INDEX tp_sags_unique ON tp_sags ("tpid","tenant", "id","stat_ids"); +CREATE INDEX tp_rankings_idx ON tp_rankings (tpid); +CREATE INDEX tp_rankings_unique ON tp_rankings ("tpid","tenant", "id","stat_ids"); -- -- Table structure for tabls `tp_trends` diff --git a/data/tariffplans/testtp/Sags.csv b/data/tariffplans/testtp/Rankings.csv similarity index 64% rename from data/tariffplans/testtp/Sags.csv rename to data/tariffplans/testtp/Rankings.csv index d8d80feb5..3669b3acd 100644 --- a/data/tariffplans/testtp/Sags.csv +++ b/data/tariffplans/testtp/Rankings.csv @@ -1,2 +1,2 @@ #Tenant[0],Id[1],QueryInterval[2],StatIDs[2],MetricIDs[3],Sorting[4],SortingParameters[5],ThresholdIDs[6] -cgrates.org,SAGS1,15m,Stats2;Stats3;Stats4,Metric1;Metric3,*asc,,TD1;THD2 \ No newline at end of file +cgrates.org,RANK1,15m,Stats2;Stats3;Stats4,Metric1;Metric3,*asc,,TD1;THD2 \ No newline at end of file diff --git a/dispatchers/caches_it_test.go b/dispatchers/caches_it_test.go index a20519232..886847229 100644 --- a/dispatchers/caches_it_test.go +++ b/dispatchers/caches_it_test.go @@ -217,7 +217,7 @@ func testDspChcPrecacheStatus(t *testing.T) { utils.MetaAPIBan: utils.MetaReady, utils.CacheRadiusPackets: utils.MetaReady, utils.CacheReplicationHosts: utils.MetaReady, - utils.CacheSagProfiles: utils.MetaReady, + utils.CacheRankingProfiles: utils.MetaReady, } if err := dispEngine.RPC.Call(context.Background(), utils.CacheSv1PrecacheStatus, utils.AttrCacheIDsWithAPIOpts{ diff --git a/engine/caches.go b/engine/caches.go index 34fa9ee83..a255f449c 100644 --- a/engine/caches.go +++ b/engine/caches.go @@ -57,8 +57,8 @@ func init() { gob.Register(new(StatQueueProfileWithAPIOpts)) gob.Register(new(StoredStatQueue)) gob.Register(new(StatQueueProfileWithAPIOpts)) - // SagS - gob.Register(new(SagProfile)) + // RankingS + gob.Register(new(RankingProfile)) // RouteS gob.Register(new(RouteProfile)) gob.Register(new(RouteProfileWithAPIOpts)) diff --git a/engine/datadbmock.go b/engine/datadbmock.go index fcd7b3b4e..a16345d3b 100644 --- a/engine/datadbmock.go +++ b/engine/datadbmock.go @@ -38,13 +38,12 @@ type DataDBMock struct { GetStatQueueProfileDrvF func(tenant, id string) (sq *StatQueueProfile, err error) SetStatQueueProfileDrvF func(sq *StatQueueProfile) (err error) RemStatQueueProfileDrvF func(tenant, id string) (err error) - SetSagProfileDrvF func(sq *SagProfile) (err error) - GetSagProfileDrvF func(tenant string, id string) (sq *SagProfile, err error) - RemSagProfileDrvF func(tenant string, id string) (err error) + SetRankingProfileDrvF func(sq *RankingProfile) (err error) + GetRankingProfileDrvF func(tenant string, id string) (sq *RankingProfile, err error) + RemRankingProfileDrvF func(tenant string, id string) (err error) SetTrendProfileDrvF func(sq *TrendProfile) (err error) GetTrendProfileDrvF func(tenant string, id string) (sq *TrendProfile, err error) RemTrendProfileDrvF func(tenant string, id string) (err error) - GetSagsProfileDrvF func(tenant, id string) (sg *SagProfile, err error) GetActionPlanDrvF func(key string) (ap *ActionPlan, err error) SetActionPlanDrvF func(key string, ap *ActionPlan) (err error) RemoveActionPlanDrvF func(key string) (err error) @@ -337,23 +336,23 @@ func (dbM *DataDBMock) RemStatQueueProfileDrv(tenant, id string) (err error) { return utils.ErrNotImplemented } -func (dbM *DataDBMock) GetSagProfileDrv(tenant, id string) (sg *SagProfile, err error) { +func (dbM *DataDBMock) GetRankingProfileDrv(tenant, id string) (sg *RankingProfile, err error) { if dbM.GetStatQueueProfileDrvF != nil { - return dbM.GetSagProfileDrvF(tenant, id) + return dbM.GetRankingProfileDrvF(tenant, id) } return nil, utils.ErrNotImplemented } -func (dbM *DataDBMock) SetSagProfileDrv(sg *SagProfile) (err error) { - if dbM.SetSagProfileDrvF(sg) != nil { - return dbM.SetSagProfileDrvF(sg) +func (dbM *DataDBMock) SetRankingProfileDrv(sg *RankingProfile) (err error) { + if dbM.SetRankingProfileDrvF(sg) != nil { + return dbM.SetRankingProfileDrvF(sg) } return utils.ErrNotImplemented } -func (dbM *DataDBMock) RemSagProfileDrv(tenant string, id string) (err error) { - if dbM.RemSagProfileDrvF != nil { - return dbM.RemSagProfileDrvF(tenant, id) +func (dbM *DataDBMock) RemRankingProfileDrv(tenant string, id string) (err error) { + if dbM.RemRankingProfileDrvF != nil { + return dbM.RemRankingProfileDrvF(tenant, id) } return utils.ErrNotImplemented } diff --git a/engine/datamanager.go b/engine/datamanager.go index 66c21558e..65bb0d459 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -60,7 +60,7 @@ var ( utils.StatQueueProfilePrefix: {}, utils.ThresholdPrefix: {}, utils.ThresholdProfilePrefix: {}, - utils.SagsProfilePrefix: {}, + utils.RankingsProfilePrefix: {}, utils.FilterPrefix: {}, utils.RouteProfilePrefix: {}, utils.AttributeProfilePrefix: {}, @@ -189,9 +189,9 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b lkID := guardian.Guardian.GuardIDs("", config.CgrConfig().GeneralCfg().LockingTimeout, statQueueLockKey(tntID.Tenant, tntID.ID)) _, err = dm.GetStatQueue(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) guardian.Guardian.UnguardIDs(lkID) - case utils.SagsProfilePrefix: + case utils.RankingsProfilePrefix: tntID := utils.NewTenantID(dataID) - _, err = dm.GetSagProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) + _, err = dm.GetRankingProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.TimingsPrefix: _, err = dm.GetTiming(dataID, true, utils.NonTransactional) case utils.ThresholdProfilePrefix: @@ -1338,7 +1338,7 @@ func (dm *DataManager) RemoveTrendProfile(tenant, id string) (err error) { if oldSgs == nil { return utils.ErrNotFound } - if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSagProfiles]; itm.Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRankingProfiles]; itm.Replicate { replicate(dm.connMgr, config.CgrConfig().DataDbCfg().RplConns, config.CgrConfig().DataDbCfg().RplFiltered, utils.TrendsProfilePrefix, utils.ConcatenatedKey(tenant, id), // this are used to get the host IDs from cache @@ -1351,23 +1351,23 @@ func (dm *DataManager) RemoveTrendProfile(tenant, id string) (err error) { return } -func (dm *DataManager) GetSagProfile(tenant, id string, cacheRead, cacheWrite bool, transactionID string) (sgp *SagProfile, err error) { +func (dm *DataManager) GetRankingProfile(tenant, id string, cacheRead, cacheWrite bool, transactionID string) (rgp *RankingProfile, err error) { tntID := utils.ConcatenatedKey(tenant, id) if cacheRead { - if x, ok := Cache.Get(utils.CacheSagProfiles, tntID); ok { + if x, ok := Cache.Get(utils.CacheRankingProfiles, tntID); ok { if x == nil { return nil, utils.ErrNotFound } - return x.(*SagProfile), nil + return x.(*RankingProfile), nil } } if dm == nil { err = utils.ErrNoDatabaseConn return } - sgp, err = dm.dataDB.GetSagProfileDrv(tenant, id) + rgp, err = dm.dataDB.GetRankingProfileDrv(tenant, id) if err != nil { - if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSagProfiles]; err == utils.ErrNotFound && itm.Remote { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRankingProfiles]; err == utils.ErrNotFound && itm.Remote { if err = dm.connMgr.Call(context.TODO(), config.CgrConfig().DataDbCfg().RmtConns, utils.ReplicatorSv1GetSagProfile, &utils.TenantIDWithAPIOpts{ @@ -1375,24 +1375,23 @@ func (dm *DataManager) GetSagProfile(tenant, id string, cacheRead, cacheWrite bo APIOpts: utils.GenerateDBItemOpts(itm.APIKey, itm.RouteID, utils.EmptyString, utils.FirstNonEmpty(config.CgrConfig().DataDbCfg().RmtConnID, config.CgrConfig().GeneralCfg().NodeID)), - }, &sgp); err == nil { - err = dm.dataDB.SetSagProfileDrv(sgp) + }, &rgp); err == nil { + err = dm.dataDB.SetRankingProfileDrv(rgp) } } if err != nil { err = utils.CastRPCErr(err) if err == utils.ErrNotFound && cacheWrite { - if errCh := Cache.Set(utils.CacheSagProfiles, tntID, nil, nil, + if errCh := Cache.Set(utils.CacheRankingProfiles, tntID, nil, nil, cacheCommit(transactionID), transactionID); errCh != nil { return nil, errCh } } return nil, err - } } if cacheWrite { - if errCh := Cache.Set(utils.CacheSagProfiles, tntID, sgp, nil, + if errCh := Cache.Set(utils.CacheRankingProfiles, tntID, rgp, nil, cacheCommit(transactionID), transactionID); errCh != nil { return nil, errCh } @@ -1400,45 +1399,45 @@ func (dm *DataManager) GetSagProfile(tenant, id string, cacheRead, cacheWrite bo return } -func (dm *DataManager) SetSagProfile(sgp *SagProfile) (err error) { +func (dm *DataManager) SetRankingProfile(sgp *RankingProfile) (err error) { if dm == nil { return utils.ErrNoDatabaseConn } - if err = dm.DataDB().SetSagProfileDrv(sgp); err != nil { + if err = dm.DataDB().SetRankingProfileDrv(sgp); err != nil { return } - if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSagProfiles]; itm.Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRankingProfiles]; itm.Replicate { err = replicate(dm.connMgr, config.CgrConfig().DataDbCfg().RplConns, config.CgrConfig().DataDbCfg().RplFiltered, - utils.SagsProfilePrefix, sgp.TenantID(), + utils.RankingsProfilePrefix, sgp.TenantID(), utils.ReplicatorSv1SetSagProfile, - &SagProfileWithAPIOpts{ - SagProfile: sgp, + &RankingProfileWithAPIOpts{ + RankingProfile: sgp, APIOpts: utils.GenerateDBItemOpts(itm.APIKey, itm.RouteID, config.CgrConfig().DataDbCfg().RplCache, utils.EmptyString)}) } return } -func (dm *DataManager) RemoveSagProfile(tenant, id string) (err error) { +func (dm *DataManager) RemoveRankingProfile(tenant, id string) (err error) { if dm == nil { return utils.ErrNoDatabaseConn } - oldSgs, err := dm.GetSagProfile(tenant, id, true, false, utils.NonTransactional) + oldSgs, err := dm.GetRankingProfile(tenant, id, true, false, utils.NonTransactional) if err != nil && err != utils.ErrNotFound { return err } - if err = dm.DataDB().RemSagProfileDrv(tenant, id); err != nil { + if err = dm.DataDB().RemRankingProfileDrv(tenant, id); err != nil { return } if oldSgs == nil { return utils.ErrNotFound } - if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSagProfiles]; itm.Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRankingProfiles]; itm.Replicate { replicate(dm.connMgr, config.CgrConfig().DataDbCfg().RplConns, config.CgrConfig().DataDbCfg().RplFiltered, - utils.SagsProfilePrefix, utils.ConcatenatedKey(tenant, id), // this are used to get the host IDs from cache - utils.ReplicatorSv1RemoveSagProfile, + utils.RankingsProfilePrefix, utils.ConcatenatedKey(tenant, id), // this are used to get the host IDs from cache + utils.ReplicatorSv1RemoveRankingProfile, &utils.TenantIDWithAPIOpts{ TenantID: &utils.TenantID{Tenant: tenant, ID: id}, APIOpts: utils.GenerateDBItemOpts(itm.APIKey, itm.RouteID, diff --git a/engine/libsags.go b/engine/libsags.go index 89e8cca5b..0625d5f93 100644 --- a/engine/libsags.go +++ b/engine/libsags.go @@ -24,12 +24,12 @@ import ( "github.com/cgrates/cgrates/utils" ) -type SagProfileWithAPIOpts struct { - *SagProfile +type RankingProfileWithAPIOpts struct { + *RankingProfile APIOpts map[string]any } -type SagProfile struct { +type RankingProfile struct { Tenant string ID string QueryInterval time.Duration @@ -40,6 +40,6 @@ type SagProfile struct { ThresholdIDs []string } -func (sgp *SagProfile) TenantID() string { +func (sgp *RankingProfile) TenantID() string { return utils.ConcatenatedKey(sgp.Tenant, sgp.ID) } diff --git a/engine/libtest.go b/engine/libtest.go index 5610b992b..29a970a8c 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -242,13 +242,13 @@ cgrates.org,TestStats,,,,,2,*sum#~*req.Usage,,true,true,20, cgrates.org,TestStats2,FLTR_1,2014-07-29T15:00:00Z,100,1s,2,*sum#~*req.Value;*sum#~*req.Usage;*average#~*req.Value;*average#~*req.Usage,,true,true,20,Th cgrates.org,TestStats2,,,,,2,*sum#~*req.Cost;*average#~*req.Cost,,true,true,20, ` - SagsCSVContent = ` + RankingsCSVContent = ` #Tenant[0],Id[1],QueryInterval[2],StatIDs[2],MetricIDs[3],Sorting[4],SortingParameters[5],ThresholdIDs[6] -cgrates.org,SAGS1,15m,Stats2;Stats3;Stats4,Metric1;Metric3,*asc,,THD1;THD2 +cgrates.org,Ranking1,15m,Stats2;Stats3;Stats4,Metric1;Metric3,*asc,,THD1;THD2 ` TrendsCSVContent = ` #Tenant[0],Id[1],QueryInterval[2],StatID[3],QueueLength[4],TTL[5],PurgeFilterIDs[6],Trend[7],ThresholdIDs[7] -cgrates.org,TRENDS1,5m,Stats2,-1,-1,,*average,TD1;THD2 +cgrates.org,TREND1,5m,Stats2,-1,-1,,*average,TD1;THD2 ` ThresholdsCSVContent = ` #Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],MaxHits[4],MinHits[5],MinSleep[6],Blocker[7],Weight[8],ActionIDs[9],Async[10] @@ -529,7 +529,7 @@ func GetDefaultEmptyCacheStats() map[string]*ltcache.CacheStats { utils.CacheStatFilterIndexes: {}, utils.CacheStatQueueProfiles: {}, utils.CacheStatQueues: {}, - utils.CacheSagProfiles: {}, + utils.CacheRankingProfiles: {}, utils.CacheSTIR: {}, utils.CacheRouteFilterIndexes: {}, utils.CacheRouteProfiles: {}, diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 55e947d1d..d9c60bb2b 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -42,7 +42,7 @@ func init() { DestinationsCSVContent, TimingsCSVContent, RatesCSVContent, DestinationRatesCSVContent, RatingPlansCSVContent, RatingProfilesCSVContent, SharedGroupsCSVContent, ActionsCSVContent, ActionPlansCSVContent, ActionTriggersCSVContent, AccountActionsCSVContent, - ResourcesCSVContent, StatsCSVContent, TrendsCSVContent, SagsCSVContent, ThresholdsCSVContent, FiltersCSVContent, + ResourcesCSVContent, StatsCSVContent, TrendsCSVContent, RankingsCSVContent, ThresholdsCSVContent, FiltersCSVContent, RoutesCSVContent, AttributesCSVContent, ChargersCSVContent, DispatcherCSVContent, DispatcherHostCSVContent), testTPID, "", nil, nil, false) if err != nil { @@ -90,8 +90,8 @@ func init() { if err := csvr.LoadStats(); err != nil { log.Print("error in LoadStats:", err) } - if err := csvr.LoadSags(); err != nil { - log.Print("error in LoadSags:", err) + if err := csvr.LoadRankings(); err != nil { + log.Print("error in LoadRankings:", err) } if err := csvr.LoadThresholds(); err != nil { log.Print("error in LoadThresholds:", err) @@ -1079,12 +1079,12 @@ func TestLoadStatQueueProfiles(t *testing.T) { } } -func TestLoadSagsProfiles(t *testing.T) { - eSags := map[utils.TenantID]*utils.TPSagsProfile{ - {Tenant: "cgrates.org", ID: "SAGS1"}: { +func TestLoadRankingProfiles(t *testing.T) { + eRankings := map[utils.TenantID]*utils.TPRankingProfile{ + {Tenant: "cgrates.org", ID: "Ranking1"}: { TPid: testTPID, Tenant: "cgrates.org", - ID: "SAGS1", + ID: "Ranking1", QueryInterval: "15m", StatIDs: []string{"Stats2", "Stats3", "Stats4"}, MetricIDs: []string{"Metric1", "Metric3"}, @@ -1092,13 +1092,13 @@ func TestLoadSagsProfiles(t *testing.T) { ThresholdIDs: []string{"THD1", "THD2"}, }, } - sgkey := utils.TenantID{Tenant: "cgrates.org", ID: "SAGS1"} - if len(eSags) != len(csvr.sgProfiles) { - t.Errorf("Failed to load SagProfiles: %+v", csvr.sgProfiles) - } else if diff := cmp.Diff(eSags[sgkey], csvr.sgProfiles[sgkey], cmpopts.SortSlices(func(a, b string) bool { + rgkey := utils.TenantID{Tenant: "cgrates.org", ID: "RANKING1"} + if len(eRankings) != len(csvr.rgProfiles) { + t.Errorf("Failed to load RankingProfiles: %+v", csvr.rgProfiles) + } else if diff := cmp.Diff(eRankings[rgkey], csvr.rgProfiles[rgkey], cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != "" { - t.Errorf("Wrong TPSagsProfiles (-expected +got):\n%s", diff) + t.Errorf("Wrong TPRankingProfiles (-expected +got):\n%s", diff) } } diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 823d87da6..49064cba1 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1460,25 +1460,25 @@ func StatQueueProfileToAPI(st *StatQueueProfile) (tpST *utils.TPStatProfile) { return } -type SagsMdls []*SagsMdl +type RankingsMdls []*RankingsMdl -func (tps SagsMdls) CSVHeader() (result []string) { +func (tps RankingsMdls) CSVHeader() (result []string) { return []string{"#" + utils.Tenant, utils.ID, utils.StatIDs, utils.MetricIDs, utils.Sorting, utils.SortingParameters, utils.ThresholdIDs} } -func (models SagsMdls) AsTPSags() (result []*utils.TPSagsProfile) { +func (models RankingsMdls) AsTPRanking() (result []*utils.TPRankingProfile) { thresholdMap := make(map[string]utils.StringSet) metricsMap := make(map[string]utils.StringSet) sortingParameterMap := make(map[string]utils.StringSet) statsMap := make(map[string]utils.StringSet) - msg := make(map[string]*utils.TPSagsProfile) + msg := make(map[string]*utils.TPRankingProfile) for _, model := range models { key := &utils.TenantID{Tenant: model.Tenant, ID: model.ID} sg, found := msg[key.TenantID()] if !found { - sg = &utils.TPSagsProfile{ + sg = &utils.TPRankingProfile{ Tenant: model.Tenant, TPid: model.Tpid, ID: model.ID, @@ -1518,7 +1518,7 @@ func (models SagsMdls) AsTPSags() (result []*utils.TPSagsProfile) { } msg[key.TenantID()] = sg } - result = make([]*utils.TPSagsProfile, len(msg)) + result = make([]*utils.TPRankingProfile, len(msg)) i := 0 for tntID, sg := range msg { result[i] = sg @@ -1531,12 +1531,12 @@ func (models SagsMdls) AsTPSags() (result []*utils.TPSagsProfile) { return } -func APItoModelSag(tpSG *utils.TPSagsProfile) (mdls SagsMdls) { +func APItoModelTPRanking(tpSG *utils.TPRankingProfile) (mdls RankingsMdls) { if tpSG == nil { return } if len(tpSG.StatIDs) == 0 { - mdl := &SagsMdl{ + mdl := &RankingsMdl{ Tpid: tpSG.TPid, Tenant: tpSG.Tenant, ID: tpSG.ID, @@ -1566,7 +1566,7 @@ func APItoModelSag(tpSG *utils.TPSagsProfile) (mdls SagsMdls) { mdls = append(mdls, mdl) } for i, stat := range tpSG.StatIDs { - mdl := &SagsMdl{ + mdl := &RankingsMdl{ Tpid: tpSG.TPid, Tenant: tpSG.Tenant, ID: tpSG.ID, @@ -1599,8 +1599,8 @@ func APItoModelSag(tpSG *utils.TPSagsProfile) (mdls SagsMdls) { return } -func APItoSags(tpSG *utils.TPSagsProfile) (sg *SagProfile, err error) { - sg = &SagProfile{ +func APItoRanking(tpSG *utils.TPRankingProfile) (sg *RankingProfile, err error) { + sg = &RankingProfile{ Tenant: tpSG.Tenant, ID: tpSG.ID, StatIDs: make([]string, len(tpSG.StatIDs)), @@ -1621,8 +1621,8 @@ func APItoSags(tpSG *utils.TPSagsProfile) (sg *SagProfile, err error) { return sg, nil } -func SagProfileToAPI(sg *SagProfile) (tpSG *utils.TPSagsProfile) { - tpSG = &utils.TPSagsProfile{ +func RankingProfileToAPI(sg *RankingProfile) (tpSG *utils.TPRankingProfile) { + tpSG = &utils.TPRankingProfile{ Tenant: sg.Tenant, ID: sg.ID, StatIDs: make([]string, len(sg.StatIDs)), diff --git a/engine/models.go b/engine/models.go index e40221018..de39434fe 100644 --- a/engine/models.go +++ b/engine/models.go @@ -283,7 +283,7 @@ func (StatMdl) TableName() string { return utils.TBLTPStats } -type SagsMdl struct { +type RankingsMdl struct { PK uint `gorm:"primary_key"` Tpid string Tenant string `index:"0" re:".*"` @@ -297,8 +297,8 @@ type SagsMdl struct { CreatedAt time.Time } -func (SagsMdl) TableName() string { - return utils.TBLTPSags +func (RankingsMdl) TableName() string { + return utils.TBLTPRankings } type TrendsMdl struct { diff --git a/engine/storage_csv.go b/engine/storage_csv.go index f7cbec79a..8548a4a76 100644 --- a/engine/storage_csv.go +++ b/engine/storage_csv.go @@ -59,7 +59,7 @@ type CSVStorage struct { resProfilesFn []string statsFn []string trendsFn []string - sagsFn []string + rankingsFn []string thresholdsFn []string filterFn []string routeProfilesFn []string @@ -74,7 +74,7 @@ func NewCSVStorage(sep rune, destinationsFn, timingsFn, ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, - resProfilesFn, statsFn, trendsFn, sagsFn, thresholdsFn, filterFn, routeProfilesFn, + resProfilesFn, statsFn, trendsFn, rankingsFn, thresholdsFn, filterFn, routeProfilesFn, attributeProfilesFn, chargerProfilesFn, dispatcherProfilesFn, dispatcherHostsFn []string) *CSVStorage { return &CSVStorage{ sep: sep, @@ -93,7 +93,7 @@ func NewCSVStorage(sep rune, resProfilesFn: resProfilesFn, statsFn: statsFn, trendsFn: trendsFn, - sagsFn: sagsFn, + rankingsFn: rankingsFn, thresholdsFn: thresholdsFn, filterFn: filterFn, routeProfilesFn: routeProfilesFn, @@ -124,7 +124,7 @@ func NewFileCSVStorage(sep rune, dataPath string) (*CSVStorage, error) { resourcesPaths := appendName(allFoldersPath, utils.ResourcesCsv) statsPaths := appendName(allFoldersPath, utils.StatsCsv) trendsPaths := appendName(allFoldersPath, utils.TrendsCsv) - sagsPaths := appendName(allFoldersPath, utils.SagsCsv) + rankingsPaths := appendName(allFoldersPath, utils.RankingsCsv) thresholdsPaths := appendName(allFoldersPath, utils.ThresholdsCsv) filtersPaths := appendName(allFoldersPath, utils.FiltersCsv) routesPaths := appendName(allFoldersPath, utils.RoutesCsv) @@ -147,7 +147,7 @@ func NewFileCSVStorage(sep rune, dataPath string) (*CSVStorage, error) { resourcesPaths, statsPaths, trendsPaths, - sagsPaths, + rankingsPaths, thresholdsPaths, filtersPaths, routesPaths, @@ -163,13 +163,13 @@ func NewStringCSVStorage(sep rune, destinationsFn, timingsFn, ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, - resProfilesFn, statsFn, trendsFn, sagsFn, thresholdsFn, filterFn, routeProfilesFn, + resProfilesFn, statsFn, trendsFn, rankingsFn, thresholdsFn, filterFn, routeProfilesFn, attributeProfilesFn, chargerProfilesFn, dispatcherProfilesFn, dispatcherHostsFn string) *CSVStorage { c := NewCSVStorage(sep, []string{destinationsFn}, []string{timingsFn}, []string{ratesFn}, []string{destinationratesFn}, []string{destinationratetimingsFn}, []string{ratingprofilesFn}, []string{sharedgroupsFn}, []string{actionsFn}, []string{actiontimingsFn}, []string{actiontriggersFn}, []string{accountactionsFn}, - []string{resProfilesFn}, []string{statsFn}, []string{trendsFn}, []string{sagsFn}, []string{thresholdsFn}, []string{filterFn}, + []string{resProfilesFn}, []string{statsFn}, []string{trendsFn}, []string{rankingsFn}, []string{thresholdsFn}, []string{filterFn}, []string{routeProfilesFn}, []string{attributeProfilesFn}, []string{chargerProfilesFn}, []string{dispatcherProfilesFn}, []string{dispatcherHostsFn}) c.generator = NewCsvString @@ -241,7 +241,7 @@ func NewURLCSVStorage(sep rune, dataPath string) *CSVStorage { var resourcesPaths []string var statsPaths []string var trendsPaths []string - var sagsPaths []string + var rankingsPaths []string var thresholdsPaths []string var filtersPaths []string var routesPaths []string @@ -266,7 +266,7 @@ func NewURLCSVStorage(sep rune, dataPath string) *CSVStorage { resourcesPaths = append(resourcesPaths, joinURL(baseURL, utils.ResourcesCsv)) statsPaths = append(statsPaths, joinURL(baseURL, utils.StatsCsv)) trendsPaths = append(trendsPaths, joinURL(baseURL, utils.TrendsCsv)) - sagsPaths = append(sagsPaths, joinURL(baseURL, utils.SagsCsv)) + rankingsPaths = append(rankingsPaths, joinURL(baseURL, utils.RankingsCsv)) thresholdsPaths = append(thresholdsPaths, joinURL(baseURL, utils.ThresholdsCsv)) filtersPaths = append(filtersPaths, joinURL(baseURL, utils.FiltersCsv)) routesPaths = append(routesPaths, joinURL(baseURL, utils.RoutesCsv)) @@ -305,8 +305,8 @@ func NewURLCSVStorage(sep rune, dataPath string) *CSVStorage { statsPaths = append(statsPaths, baseURL) case strings.HasSuffix(baseURL, utils.TrendsCsv): trendsPaths = append(trendsPaths, baseURL) - case strings.HasSuffix(baseURL, utils.SagsCsv): - sagsPaths = append(sagsPaths, baseURL) + case strings.HasSuffix(baseURL, utils.RankingsCsv): + rankingsPaths = append(rankingsPaths, baseURL) case strings.HasSuffix(baseURL, utils.ThresholdsCsv): thresholdsPaths = append(thresholdsPaths, baseURL) case strings.HasSuffix(baseURL, utils.FiltersCsv): @@ -339,7 +339,7 @@ func NewURLCSVStorage(sep rune, dataPath string) *CSVStorage { resourcesPaths, statsPaths, trendsPaths, - sagsPaths, + rankingsPaths, thresholdsPaths, filtersPaths, routesPaths, @@ -589,16 +589,16 @@ func (csvs *CSVStorage) GetTPTrends(tpid, tenant, id string) ([]*utils.TPTrendsP return tpTrends.AsTPTrends(), nil } -func (csvs *CSVStorage) GetTPSags(tpid, tenant, id string) ([]*utils.TPSagsProfile, error) { - var tpSags SagsMdls - if err := csvs.proccesData(SagsMdl{}, csvs.sagsFn, func(tp any) { - tPsags := tp.(SagsMdl) - tPsags.Tpid = tpid - tpSags = append(tpSags, &tPsags) +func (csvs *CSVStorage) GetTPRankings(tpid, tenant, id string) ([]*utils.TPRankingProfile, error) { + var tpRankings RankingsMdls + if err := csvs.proccesData(RankingsMdl{}, csvs.rankingsFn, func(tp any) { + tPrankings := tp.(RankingsMdl) + tPrankings.Tpid = tpid + tpRankings = append(tpRankings, &tPrankings) }); err != nil { return nil, err } - return tpSags.AsTPSags(), nil + return tpRankings.AsTPRanking(), nil } func (csvs *CSVStorage) GetTPThresholds(tpid, tenant, id string) ([]*utils.TPThresholdProfile, error) { diff --git a/engine/storage_interface.go b/engine/storage_interface.go index 1338c3f02..4183b065f 100644 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -101,9 +101,9 @@ type DataDB interface { GetStatQueueDrv(tenant, id string) (sq *StatQueue, err error) SetStatQueueDrv(ssq *StoredStatQueue, sq *StatQueue) (err error) RemStatQueueDrv(tenant, id string) (err error) - SetSagProfileDrv(sq *SagProfile) (err error) - GetSagProfileDrv(tenant string, id string) (sq *SagProfile, err error) - RemSagProfileDrv(tenant string, id string) (err error) + SetRankingProfileDrv(sq *RankingProfile) (err error) + GetRankingProfileDrv(tenant string, id string) (sq *RankingProfile, err error) + RemRankingProfileDrv(tenant string, id string) (err error) SetTrendProfileDrv(sq *TrendProfile) (err error) GetTrendProfileDrv(tenant string, id string) (sq *TrendProfile, err error) RemTrendProfileDrv(tenant string, id string) (err error) @@ -180,7 +180,7 @@ type LoadReader interface { GetTPResources(string, string, string) ([]*utils.TPResourceProfile, error) GetTPStats(string, string, string) ([]*utils.TPStatProfile, error) GetTPTrends(string, string, string) ([]*utils.TPTrendsProfile, error) - GetTPSags(string, string, string) ([]*utils.TPSagsProfile, error) + GetTPRankings(string, string, string) ([]*utils.TPRankingProfile, error) GetTPThresholds(string, string, string) ([]*utils.TPThresholdProfile, error) GetTPFilters(string, string, string) ([]*utils.TPFilterProfile, error) GetTPRoutes(string, string, string) ([]*utils.TPRouteProfile, error) @@ -206,7 +206,7 @@ type LoadWriter interface { SetTPResources([]*utils.TPResourceProfile) error SetTPStats([]*utils.TPStatProfile) error SetTPTrends([]*utils.TPTrendsProfile) error - SetTPSags([]*utils.TPSagsProfile) error + SetTPRankings([]*utils.TPRankingProfile) error SetTPThresholds([]*utils.TPThresholdProfile) error SetTPFilters([]*utils.TPFilterProfile) error SetTPRoutes([]*utils.TPRouteProfile) error diff --git a/engine/storage_internal_datadb.go b/engine/storage_internal_datadb.go index f4358f9b4..dea0807f9 100644 --- a/engine/storage_internal_datadb.go +++ b/engine/storage_internal_datadb.go @@ -610,22 +610,22 @@ func (iDB *InternalDB) GetTrendProfileDrv(tenant, id string) (sg *TrendProfile, return x.(*TrendProfile), nil } -func (iDB *InternalDB) SetSagProfileDrv(sgp *SagProfile) (err error) { - iDB.db.Set(utils.CacheSagProfiles, sgp.TenantID(), sgp, nil, true, utils.NonTransactional) +func (iDB *InternalDB) SetRankingProfileDrv(sgp *RankingProfile) (err error) { + iDB.db.Set(utils.CacheRankingProfiles, sgp.TenantID(), sgp, nil, true, utils.NonTransactional) return nil } -func (iDB *InternalDB) RemSagProfileDrv(tenant, id string) (err error) { - iDB.db.Remove(utils.CacheSagProfiles, utils.ConcatenatedKey(tenant, id), true, utils.NonTransactional) +func (iDB *InternalDB) RemRankingProfileDrv(tenant, id string) (err error) { + iDB.db.Remove(utils.CacheRankingProfiles, utils.ConcatenatedKey(tenant, id), true, utils.NonTransactional) return nil } -func (iDB *InternalDB) GetSagProfileDrv(tenant, id string) (sg *SagProfile, err error) { - x, ok := iDB.db.Get(utils.CacheSagProfiles, utils.ConcatenatedKey(tenant, id)) +func (iDB *InternalDB) GetRankingProfileDrv(tenant, id string) (sg *RankingProfile, err error) { + x, ok := iDB.db.Get(utils.CacheRankingProfiles, utils.ConcatenatedKey(tenant, id)) if !ok || x == nil { return nil, utils.ErrNotFound } - return x.(*SagProfile), nil + return x.(*RankingProfile), nil } func (iDB *InternalDB) GetThresholdProfileDrv(tenant, id string) (tp *ThresholdProfile, err error) { diff --git a/engine/storage_internal_stordb.go b/engine/storage_internal_stordb.go index f1db5104d..0a29c18d5 100644 --- a/engine/storage_internal_stordb.go +++ b/engine/storage_internal_stordb.go @@ -425,7 +425,7 @@ func (iDB *InternalDB) GetTPTrends(tpid string, tenant string, id string) (trend return } -func (iDB *InternalDB) GetTPSags(tpid string, tenant string, id string) (sags []*utils.TPSagsProfile, err error) { +func (iDB *InternalDB) GetTPRankings(tpid string, tenant string, id string) (rankings []*utils.TPRankingProfile, err error) { key := tpid if tenant != utils.EmptyString { key += utils.ConcatenatedKeySep + tenant @@ -433,15 +433,15 @@ func (iDB *InternalDB) GetTPSags(tpid string, tenant string, id string) (sags [] if id != utils.EmptyString { key += utils.ConcatenatedKeySep + id } - ids := iDB.db.GetItemIDs(utils.CacheTBLTPSags, key) + ids := iDB.db.GetItemIDs(utils.CacheTBLTPRankings, key) for _, id := range ids { - x, ok := iDB.db.Get(utils.CacheTBLTPSags, id) + x, ok := iDB.db.Get(utils.CacheTBLTPRankings, id) if !ok || x == nil { return nil, utils.ErrNotFound } - sags = append(sags, x.(*utils.TPSagsProfile)) + rankings = append(rankings, x.(*utils.TPRankingProfile)) } - if len(sags) == 0 { + if len(rankings) == 0 { return nil, utils.ErrNotFound } return @@ -781,12 +781,12 @@ func (iDB *InternalDB) SetTPStats(stats []*utils.TPStatProfile) (err error) { } return } -func (iDB *InternalDB) SetTPSags(sags []*utils.TPSagsProfile) (err error) { - if len(sags) == 0 { +func (iDB *InternalDB) SetTPRankings(rankings []*utils.TPRankingProfile) (err error) { + if len(rankings) == 0 { return nil } - for _, sag := range sags { - iDB.db.Set(utils.CacheTBLTPSags, utils.ConcatenatedKey(sag.TPid, sag.Tenant, sag.ID), sag, nil, cacheCommit(utils.NonTransactional), utils.NonTransactional) + for _, ranking := range rankings { + iDB.db.Set(utils.CacheTBLTPRankings, utils.ConcatenatedKey(ranking.TPid, ranking.Tenant, ranking.ID), ranking, nil, cacheCommit(utils.NonTransactional), utils.NonTransactional) } return } diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 43a78f4fb..59561ea12 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -66,7 +66,7 @@ const ( ColSqs = "statqueues" ColTrs = "trend_profiles" ColSqp = "statqueue_profiles" - ColSgp = "sag_profiles" + ColRgp = "ranking_profiles" ColTps = "threshold_profiles" ColThs = "thresholds" ColFlt = "filters" @@ -302,14 +302,14 @@ func (ms *MongoStorage) ensureIndexesForCol(col string) error { // exported for switch col { case ColAct, ColApl, ColAAp, ColAtr, ColRpl, ColDst, ColRds, ColLht, ColIndx: err = ms.enusureIndex(col, true, "key") - case ColRsP, ColRes, ColSqs, ColSgp, ColTrs, ColSqp, ColTps, ColThs, ColRts, ColAttr, ColFlt, ColCpp, ColDpp, ColDph: + case ColRsP, ColRes, ColSqs, ColRgp, ColTrs, ColSqp, ColTps, ColThs, ColRts, ColAttr, ColFlt, ColCpp, ColDpp, ColDph: err = ms.enusureIndex(col, true, "tenant", "id") case ColRpf, ColShg, ColAcc: err = ms.enusureIndex(col, true, "id") // StorDB case utils.TBLTPTimings, utils.TBLTPDestinations, utils.TBLTPDestinationRates, utils.TBLTPRatingPlans, - utils.TBLTPSharedGroups, utils.TBLTPActions, utils.TBLTPSags, + utils.TBLTPSharedGroups, utils.TBLTPActions, utils.TBLTPRankings, utils.TBLTPActionPlans, utils.TBLTPActionTriggers, utils.TBLTPStats, utils.TBLTPResources, utils.TBLTPDispatchers, utils.TBLTPDispatcherHosts, utils.TBLTPChargers, @@ -348,13 +348,13 @@ func (ms *MongoStorage) EnsureIndexes(cols ...string) error { cols = []string{ ColAct, ColApl, ColAAp, ColAtr, ColRpl, ColDst, ColRds, ColLht, ColIndx, ColRsP, ColRes, ColSqs, ColSqp, ColTps, ColThs, ColRts, ColAttr, ColFlt, ColCpp, - ColDpp, ColRpf, ColShg, ColAcc, ColSgp, ColTrs, + ColDpp, ColRpf, ColShg, ColAcc, ColRgp, ColTrs, } } else { cols = []string{ utils.TBLTPTimings, utils.TBLTPDestinations, utils.TBLTPDestinationRates, utils.TBLTPRatingPlans, utils.TBLTPSharedGroups, utils.TBLTPActions, utils.TBLTPActionPlans, - utils.TBLTPActionTriggers, utils.TBLTPSags, utils.TBLTPStats, utils.TBLTPResources, utils.TBLTPRatingProfiles, + utils.TBLTPActionTriggers, utils.TBLTPRankings, utils.TBLTPStats, utils.TBLTPResources, utils.TBLTPRatingProfiles, utils.CDRsTBL, utils.SessionCostsTBL, } } @@ -435,8 +435,8 @@ func (ms *MongoStorage) RemoveKeysForPrefix(prefix string) error { colName = ColTps case utils.StatQueueProfilePrefix: colName = ColSqp - case utils.SagsProfilePrefix: - colName = ColSgp + case utils.RankingsProfilePrefix: + colName = ColRgp case utils.TrendsProfilePrefix: colName = ColTrs case utils.ThresholdPrefix: @@ -604,8 +604,8 @@ func (ms *MongoStorage) GetKeysForPrefix(prefix string) (keys []string, err erro keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRes, utils.ResourcesPrefix, subject, tntID) case utils.StatQueuePrefix: keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSqs, utils.StatQueuePrefix, subject, tntID) - case utils.SagsProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSgp, utils.SagsProfilePrefix, subject, tntID) + case utils.RankingsProfilePrefix: + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRgp, utils.RankingsProfilePrefix, subject, tntID) case utils.TrendsProfilePrefix: keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTrs, utils.TrendsProfilePrefix, subject, tntID) case utils.StatQueueProfilePrefix: @@ -680,7 +680,7 @@ func (ms *MongoStorage) HasDataDrv(category, subject, tenant string) (has bool, count, err = ms.getCol(ColSqs).CountDocuments(sctx, bson.M{"tenant": tenant, "id": subject}) case utils.StatQueueProfilePrefix: count, err = ms.getCol(ColSqp).CountDocuments(sctx, bson.M{"tenant": tenant, "id": subject}) - case utils.SagsProfilePrefix: + case utils.RankingsProfilePrefix: count, err = ms.getCol(ColSqp).CountDocuments(sctx, bson.M{"tenant": tenant, "id": subject}) case utils.ThresholdPrefix: count, err = ms.getCol(ColThs).CountDocuments(sctx, bson.M{"tenant": tenant, "id": subject}) @@ -1528,31 +1528,31 @@ func (ms *MongoStorage) RemStatQueueDrv(tenant, id string) error { }) } -func (ms *MongoStorage) GetSagProfileDrv(tenant, id string) (*SagProfile, error) { - sgProfile := new(SagProfile) +func (ms *MongoStorage) GetRankingProfileDrv(tenant, id string) (*RankingProfile, error) { + rgProfile := new(RankingProfile) err := ms.query(func(sctx mongo.SessionContext) error { - sr := ms.getCol(ColSgp).FindOne(sctx, bson.M{"tenant": tenant, "id": id}) - decodeErr := sr.Decode(sgProfile) + sr := ms.getCol(ColRgp).FindOne(sctx, bson.M{"tenant": tenant, "id": id}) + decodeErr := sr.Decode(rgProfile) if errors.Is(decodeErr, mongo.ErrNoDocuments) { return utils.ErrNotFound } return decodeErr }) - return sgProfile, err + return rgProfile, err } -func (ms *MongoStorage) SetSagProfileDrv(sgp *SagProfile) (err error) { +func (ms *MongoStorage) SetRankingProfileDrv(sgp *RankingProfile) (err error) { return ms.query(func(sctx mongo.SessionContext) error { - _, err := ms.getCol(ColSgp).UpdateOne(sctx, bson.M{"tenant": sgp.Tenant, "id": sgp.ID}, + _, err := ms.getCol(ColRgp).UpdateOne(sctx, bson.M{"tenant": sgp.Tenant, "id": sgp.ID}, bson.M{"$set": sgp}, options.Update().SetUpsert(true)) return err }) } -func (ms *MongoStorage) RemSagProfileDrv(tenant, id string) (err error) { +func (ms *MongoStorage) RemRankingProfileDrv(tenant, id string) (err error) { return ms.query(func(sctx mongo.SessionContext) error { - dr, err := ms.getCol(ColSgp).DeleteOne(sctx, bson.M{"tenant": tenant, "id": id}) + dr, err := ms.getCol(ColRgp).DeleteOne(sctx, bson.M{"tenant": tenant, "id": id}) if dr.DeletedCount == 0 { return utils.ErrNotFound } diff --git a/engine/storage_mongo_stordb.go b/engine/storage_mongo_stordb.go index d2a664696..afd37c9c8 100644 --- a/engine/storage_mongo_stordb.go +++ b/engine/storage_mongo_stordb.go @@ -472,7 +472,7 @@ func (ms *MongoStorage) GetTPTrends(tpid string, tenant string, id string) ([]*u return results, err } -func (ms *MongoStorage) GetTPSags(tpid string, tenant string, id string) ([]*utils.TPSagsProfile, error) { +func (ms *MongoStorage) GetTPRankings(tpid string, tenant string, id string) ([]*utils.TPRankingProfile, error) { filter := bson.M{ "tpid": tpid, } @@ -482,14 +482,14 @@ func (ms *MongoStorage) GetTPSags(tpid string, tenant string, id string) ([]*uti if tenant != "" { filter["tenant"] = tenant } - var results []*utils.TPSagsProfile + var results []*utils.TPRankingProfile err := ms.query(func(sctx mongo.SessionContext) error { - cur, err := ms.getCol(utils.TBLTPSags).Find(sctx, filter) + cur, err := ms.getCol(utils.TBLTPRankings).Find(sctx, filter) if err != nil { return err } for cur.Next(sctx) { - var el utils.TPSagsProfile + var el utils.TPRankingProfile err := cur.Decode(&el) if err != nil { return err @@ -1297,13 +1297,13 @@ func (ms *MongoStorage) SetTPTrends(tpTrends []*utils.TPTrendsProfile) (err erro }) } -func (ms *MongoStorage) SetTPSags(tpSags []*utils.TPSagsProfile) (err error) { - if len(tpSags) == 0 { +func (ms *MongoStorage) SetTPRankings(tpRankings []*utils.TPRankingProfile) (err error) { + if len(tpRankings) == 0 { return } return ms.query(func(sctx mongo.SessionContext) (err error) { - for _, tp := range tpSags { - _, err := ms.getCol(utils.TBLTPSags).UpdateOne(sctx, bson.M{"tpid": tp.TPid, "id": tp.ID}, + for _, tp := range tpRankings { + _, err := ms.getCol(utils.TBLTPRankings).UpdateOne(sctx, bson.M{"tpid": tp.TPid, "id": tp.ID}, bson.M{"$set": tp}, options.Update().SetUpsert(true)) if err != nil { return err diff --git a/engine/storage_redis.go b/engine/storage_redis.go index ad64ddb02..0644a3ea9 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -962,17 +962,17 @@ func (rs *RedisStorage) RemTrendProfileDrv(tenant string, id string) (err error) return rs.Cmd(nil, redis_DEL, utils.TrendsProfilePrefix+utils.ConcatenatedKey(tenant, id)) } -func (rs *RedisStorage) SetSagProfileDrv(sg *SagProfile) (err error) { +func (rs *RedisStorage) SetRankingProfileDrv(sg *RankingProfile) (err error) { var result []byte if result, err = rs.ms.Marshal(sg); err != nil { return } - return rs.Cmd(nil, redis_SET, utils.SagsProfilePrefix+utils.ConcatenatedKey(sg.Tenant, sg.ID), string(result)) + return rs.Cmd(nil, redis_SET, utils.RankingsProfilePrefix+utils.ConcatenatedKey(sg.Tenant, sg.ID), string(result)) } -func (rs *RedisStorage) GetSagProfileDrv(tenant string, id string) (sg *SagProfile, err error) { +func (rs *RedisStorage) GetRankingProfileDrv(tenant string, id string) (sg *RankingProfile, err error) { var values []byte - if err = rs.Cmd(&values, redis_GET, utils.SagsProfilePrefix+utils.ConcatenatedKey(tenant, id)); err != nil { + if err = rs.Cmd(&values, redis_GET, utils.RankingsProfilePrefix+utils.ConcatenatedKey(tenant, id)); err != nil { return } else if len(values) == 0 { err = utils.ErrNotFound @@ -981,8 +981,8 @@ func (rs *RedisStorage) GetSagProfileDrv(tenant string, id string) (sg *SagProfi err = rs.ms.Unmarshal(values, &sg) return } -func (rs *RedisStorage) RemSagProfileDrv(tenant string, id string) (err error) { - return rs.Cmd(nil, redis_DEL, utils.SagsProfilePrefix+utils.ConcatenatedKey(tenant, id)) +func (rs *RedisStorage) RemRankingProfileDrv(tenant string, id string) (err error) { + return rs.Cmd(nil, redis_DEL, utils.RankingsProfilePrefix+utils.ConcatenatedKey(tenant, id)) } // GetThresholdProfileDrv retrieves a ThresholdProfile from dataDB diff --git a/engine/storage_sql.go b/engine/storage_sql.go index b09b22a9f..844d1426e 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -137,7 +137,7 @@ func (sqls *SQLStorage) GetTpIds(colName string) ([]string, error) { utils.TBLTPAccountActions, utils.TBLTPResources, utils.TBLTPStats, - utils.TBLTPSags, + utils.TBLTPRankings, utils.TBLTPThresholds, utils.TBLTPFilters, utils.TBLTPActionPlans, @@ -239,7 +239,7 @@ func (sqls *SQLStorage) RemTpData(table, tpid string, args map[string]string) er if len(table) == 0 { // Remove tpid out of all tables for _, tblName := range []string{utils.TBLTPTimings, utils.TBLTPDestinations, utils.TBLTPRates, utils.TBLTPDestinationRates, utils.TBLTPRatingPlans, utils.TBLTPRatingProfiles, - utils.TBLTPSharedGroups, utils.TBLTPActions, utils.TBLTPActionTriggers, utils.TBLTPSags, + utils.TBLTPSharedGroups, utils.TBLTPActions, utils.TBLTPActionTriggers, utils.TBLTPRankings, utils.TBLTPAccountActions, utils.TBLTPResources, utils.TBLTPStats, utils.TBLTPThresholds, utils.TBLTPFilters, utils.TBLTPActionPlans, utils.TBLTPRoutes, utils.TBLTPAttributes, utils.TBLTPChargers, utils.TBLTPDispatchers, utils.TBLTPDispatcherHosts} { @@ -577,17 +577,17 @@ func (sqls *SQLStorage) SetTPStats(sts []*utils.TPStatProfile) error { return nil } -func (sqls *SQLStorage) SetTPSags(sgs []*utils.TPSagsProfile) error { - if len(sgs) == 0 { +func (sqls *SQLStorage) SetTPRankings(rgs []*utils.TPRankingProfile) error { + if len(rgs) == 0 { return nil } tx := sqls.db.Begin() - for _, sg := range sgs { - if err := tx.Where(&SagsMdl{Tpid: sg.TPid, ID: sg.ID}).Delete(SagsMdl{}).Error; err != nil { + for _, sg := range rgs { + if err := tx.Where(&RankingsMdl{Tpid: sg.TPid, ID: sg.ID}).Delete(RankingsMdl{}).Error; err != nil { tx.Rollback() return err } - for _, msg := range APItoModelSag(sg) { + for _, msg := range APItoModelTPRanking(sg) { if err := tx.Create(&msg).Error; err != nil { tx.Rollback() return err @@ -1480,8 +1480,8 @@ func (sqls *SQLStorage) GetTPTrends(tpid, tenant, id string) ([]*utils.TPTrendsP return asrs, nil } -func (sqls *SQLStorage) GetTPSags(tpid string, tenant string, id string) ([]*utils.TPSagsProfile, error) { - var sgs SagsMdls +func (sqls *SQLStorage) GetTPRankings(tpid string, tenant string, id string) ([]*utils.TPRankingProfile, error) { + var sgs RankingsMdls q := sqls.db.Where("tpid = ?", tpid) if len(id) != 0 { q = q.Where("id = ?", id) @@ -1492,7 +1492,7 @@ func (sqls *SQLStorage) GetTPSags(tpid string, tenant string, id string) ([]*uti if err := q.Find(&sgs).Error; err != nil { return nil, err } - asgs := sgs.AsTPSags() + asgs := sgs.AsTPRanking() if len(asgs) == 0 { return asgs, utils.ErrNotFound } diff --git a/engine/tpexporter.go b/engine/tpexporter.go index d2cbeacfb..8d7cfd234 100644 --- a/engine/tpexporter.go +++ b/engine/tpexporter.go @@ -293,16 +293,16 @@ func (tpExp *TPExporter) Run() error { } } - storDataSags, err := tpExp.storDb.GetTPSags(tpExp.tpID, "", "") + storDataRankings, err := tpExp.storDb.GetTPRankings(tpExp.tpID, "", "") if err != nil && err.Error() != utils.ErrNotFound.Error() { - utils.Logger.Warning(fmt.Sprintf("<%s> error: %s,when getting %s from stordb for export", utils.ApierS, err, utils.TpSags)) + utils.Logger.Warning(fmt.Sprintf("<%s> error: %s,when getting %s from stordb for export", utils.ApierS, err, utils.TpRankings)) } - if len(storDataSags) != 0 { - toExportMap[utils.SagsCsv] = make([]any, 0, len(storDataSags)) - for _, sd := range storDataSags { - sdModels := APItoModelSag(sd) + if len(storDataRankings) != 0 { + toExportMap[utils.RankingsCsv] = make([]any, 0, len(storDataRankings)) + for _, sd := range storDataRankings { + sdModels := APItoModelTPRanking(sd) for _, sdModel := range sdModels { - toExportMap[utils.SagsCsv] = append(toExportMap[utils.SagsCsv], sdModel) + toExportMap[utils.RankingsCsv] = append(toExportMap[utils.RankingsCsv], sdModel) } } } diff --git a/engine/tpimporter_csv.go b/engine/tpimporter_csv.go index 0e03bc3a6..7e6f4f406 100644 --- a/engine/tpimporter_csv.go +++ b/engine/tpimporter_csv.go @@ -54,7 +54,7 @@ var fileHandlers = map[string]func(*TPCSVImporter, string) error{ utils.ResourcesCsv: (*TPCSVImporter).importResources, utils.StatsCsv: (*TPCSVImporter).importStats, utils.TrendsCsv: (*TPCSVImporter).importTrends, - utils.SagsCsv: (*TPCSVImporter).importSags, + utils.RankingsCsv: (*TPCSVImporter).importRankings, utils.ThresholdsCsv: (*TPCSVImporter).importThresholds, utils.FiltersCsv: (*TPCSVImporter).importFilters, utils.RoutesCsv: (*TPCSVImporter).importRoutes, @@ -298,15 +298,15 @@ func (tpImp *TPCSVImporter) importTrends(fn string) error { return tpImp.StorDb.SetTPTrends(srs) } -func (tpImp *TPCSVImporter) importSags(fn string) error { +func (tpImp *TPCSVImporter) importRankings(fn string) error { if tpImp.Verbose { log.Printf("Processing file: <%s>", fn) } - sgs, err := tpImp.csvr.GetTPSags(tpImp.TPid, "", "") + sgs, err := tpImp.csvr.GetTPRankings(tpImp.TPid, "", "") if err != nil { return err } - return tpImp.StorDb.SetTPSags(sgs) + return tpImp.StorDb.SetTPRankings(sgs) } func (tpImp *TPCSVImporter) importThresholds(fn string) error { diff --git a/engine/tpreader.go b/engine/tpreader.go index ef9279c72..c9b3d1ce1 100644 --- a/engine/tpreader.go +++ b/engine/tpreader.go @@ -50,7 +50,7 @@ type TpReader struct { resProfiles map[utils.TenantID]*utils.TPResourceProfile sqProfiles map[utils.TenantID]*utils.TPStatProfile trProfiles map[utils.TenantID]*utils.TPTrendsProfile - sgProfiles map[utils.TenantID]*utils.TPSagsProfile + rgProfiles map[utils.TenantID]*utils.TPRankingProfile thProfiles map[utils.TenantID]*utils.TPThresholdProfile filters map[utils.TenantID]*utils.TPFilterProfile routeProfiles map[utils.TenantID]*utils.TPRouteProfile @@ -97,7 +97,7 @@ func (tpr *TpReader) Init() { tpr.accountActions = make(map[string]*Account) tpr.resProfiles = make(map[utils.TenantID]*utils.TPResourceProfile) tpr.sqProfiles = make(map[utils.TenantID]*utils.TPStatProfile) - tpr.sgProfiles = make(map[utils.TenantID]*utils.TPSagsProfile) + tpr.rgProfiles = make(map[utils.TenantID]*utils.TPRankingProfile) tpr.thProfiles = make(map[utils.TenantID]*utils.TPThresholdProfile) tpr.routeProfiles = make(map[utils.TenantID]*utils.TPRouteProfile) tpr.attributeProfiles = make(map[utils.TenantID]*utils.TPAttributeProfile) @@ -1154,21 +1154,21 @@ func (tpr *TpReader) LoadTrends() error { return tpr.LoadTrendsFiltered("") } -func (tpr *TpReader) LoadSagsFiltered(tag string) error { - tps, err := tpr.lr.GetTPSags(tpr.tpid, "", tag) +func (tpr *TpReader) LoadRankingsFiltered(tag string) error { + tps, err := tpr.lr.GetTPRankings(tpr.tpid, "", tag) if err != nil { return err } - mapSgs := make(map[utils.TenantID]*utils.TPSagsProfile) + mapSgs := make(map[utils.TenantID]*utils.TPRankingProfile) for _, sg := range tps { mapSgs[utils.TenantID{Tenant: sg.Tenant, ID: sg.ID}] = sg } - tpr.sgProfiles = mapSgs + tpr.rgProfiles = mapSgs return nil } -func (tpr *TpReader) LoadSags() error { - return tpr.LoadSagsFiltered("") +func (tpr *TpReader) LoadRankings() error { + return tpr.LoadRankingsFiltered("") } func (tpr *TpReader) LoadThresholdsFiltered(tag string) (err error) { @@ -1357,7 +1357,7 @@ func (tpr *TpReader) LoadAll() (err error) { if err = tpr.LoadTrends(); err != nil && err.Error() != utils.NotFoundCaps { return } - if err = tpr.LoadSags(); err != nil && err.Error() != utils.NotFoundCaps { + if err = tpr.LoadRankings(); err != nil && err.Error() != utils.NotFoundCaps { return } if err = tpr.LoadThresholds(); err != nil && err.Error() != utils.NotFoundCaps { @@ -1631,22 +1631,22 @@ func (tpr *TpReader) WriteToDatabase(verbose, disableReverse bool) (err error) { } } if verbose { - log.Print("SagProfiles:") + log.Print("RankingProfiles:") } - for _, tpSG := range tpr.sgProfiles { - var sg *SagProfile - if sg, err = APItoSags(tpSG); err != nil { + for _, tpSG := range tpr.rgProfiles { + var sg *RankingProfile + if sg, err = APItoRanking(tpSG); err != nil { return } - if err = tpr.dm.SetSagProfile(sg); err != nil { + if err = tpr.dm.SetRankingProfile(sg); err != nil { return } if verbose { log.Print("\t", sg.TenantID()) } } - if len(tpr.sgProfiles) != 0 { - loadIDs[utils.CacheSagProfiles] = loadID + if len(tpr.rgProfiles) != 0 { + loadIDs[utils.CacheRankingProfiles] = loadID } if verbose { log.Print("ThresholdProfiles:") @@ -1952,10 +1952,10 @@ func (tpr *TpReader) GetLoadedIds(categ string) ([]string, error) { i++ } return keys, nil - case utils.SagsProfilePrefix: - keys := make([]string, len(tpr.sgProfiles)) + case utils.RankingsProfilePrefix: + keys := make([]string, len(tpr.rgProfiles)) i := 0 - for k := range tpr.sgProfiles { + for k := range tpr.rgProfiles { keys[i] = k.TenantID() i++ } @@ -2133,10 +2133,10 @@ func (tpr *TpReader) RemoveFromDatabase(verbose, disableReverse bool) (err error } } if verbose { - log.Printf("SagProfiles:") + log.Printf("RankingProfiles:") } - for _, tpSgs := range tpr.sgProfiles { - if err = tpr.dm.RemoveSagProfile(tpSgs.Tenant, tpSgs.ID); err != nil { + for _, tpSgs := range tpr.rgProfiles { + if err = tpr.dm.RemoveRankingProfile(tpSgs.Tenant, tpSgs.ID); err != nil { return } if verbose { @@ -2291,8 +2291,8 @@ func (tpr *TpReader) RemoveFromDatabase(verbose, disableReverse bool) (err error loadIDs[utils.CacheStatQueueProfiles] = loadID loadIDs[utils.CacheStatQueues] = loadID } - if len(tpr.sgProfiles) != 0 { - loadIDs[utils.CacheSagProfiles] = loadID + if len(tpr.rgProfiles) != 0 { + loadIDs[utils.CacheRankingProfiles] = loadID } if len(tpr.thProfiles) != 0 { loadIDs[utils.CacheThresholdProfiles] = loadID @@ -2339,7 +2339,7 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, opts map[string]a rspIDs, _ := tpr.GetLoadedIds(utils.ResourceProfilesPrefix) aatIDs, _ := tpr.GetLoadedIds(utils.ActionTriggerPrefix) stqpIDs, _ := tpr.GetLoadedIds(utils.StatQueueProfilePrefix) - sgIDS, _ := tpr.GetLoadedIds(utils.SagsProfilePrefix) + sgIDS, _ := tpr.GetLoadedIds(utils.RankingsProfilePrefix) trspfIDs, _ := tpr.GetLoadedIds(utils.ThresholdProfilePrefix) flrIDs, _ := tpr.GetLoadedIds(utils.FilterPrefix) routeIDs, _ := tpr.GetLoadedIds(utils.RouteProfilePrefix) @@ -2365,7 +2365,7 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, opts map[string]a utils.CacheActionTriggers: aatIDs, utils.CacheStatQueues: stqpIDs, utils.CacheStatQueueProfiles: stqpIDs, - utils.CacheSagProfiles: sgIDS, + utils.CacheRankingProfiles: sgIDS, utils.CacheThresholds: trspfIDs, utils.CacheThresholdProfiles: trspfIDs, utils.CacheFilters: flrIDs, diff --git a/engine/tpreader_test.go b/engine/tpreader_test.go index b73c0011b..746afe288 100644 --- a/engine/tpreader_test.go +++ b/engine/tpreader_test.go @@ -949,7 +949,7 @@ func TestTPReaderReloadCache(t *testing.T) { StatsQueueIDs: []string{"cgrates.org:statProfilesID"}, ThresholdIDs: []string{"cgrates.org:thresholdProfilesID"}, AccountActionPlanIDs: []string{"AccountActionPlansID"}, - SagProfileIDs: []string{"cgrates.org:sagProfilesID"}, + RankingProfileIDs: []string{"cgrates.org:rankingProfilesID"}, ReverseDestinationIDs: []string{}, } rpcInternal := make(chan birpc.ClientConnector, 1) @@ -1026,8 +1026,8 @@ func TestTPReaderReloadCache(t *testing.T) { acntActionPlans: map[string][]string{ "AccountActionPlansID": {}, }, - sgProfiles: map[utils.TenantID]*utils.TPSagsProfile{ - {Tenant: "cgrates.org", ID: "sagProfilesID"}: {}, + rgProfiles: map[utils.TenantID]*utils.TPRankingProfile{ + {Tenant: "cgrates.org", ID: "rankingProfilesID"}: {}, }, dm: NewDataManager(NewInternalDB(nil, nil, false, cfg.DataDbCfg().Items), config.CgrConfig().CacheCfg(), connMgr), } diff --git a/engine/z_loader_it_test.go b/engine/z_loader_it_test.go index 50687ed72..5e2c2483c 100644 --- a/engine/z_loader_it_test.go +++ b/engine/z_loader_it_test.go @@ -422,12 +422,12 @@ func testLoaderITWriteToDatabase(t *testing.T) { t.Errorf("Expecting: %v, received: %v", sts, rcv) } } - for tenantid, sg := range loader.sgProfiles { - rcv, err := loader.dm.GetSagProfile(tenantid.Tenant, tenantid.ID, false, false, utils.NonTransactional) + for tenantid, sg := range loader.rgProfiles { + rcv, err := loader.dm.GetRankingProfile(tenantid.Tenant, tenantid.ID, false, false, utils.NonTransactional) if err != nil { - t.Errorf("Failed GetSagsProfile, tenant: %s, id: %s, error: %s ", tenantid.Tenant, tenantid.ID, err.Error()) + t.Errorf("Failed GetRankingProfile, tenant: %s, id: %s, error: %s ", tenantid.Tenant, tenantid.ID, err.Error()) } - sgs, err := APItoSags(sg) + sgs, err := APItoRanking(sg) if !reflect.DeepEqual(sgs, rcv) { t.Errorf("Expecting: %v, received: %v", sgs, rcv) } diff --git a/general_tests/acntacts_test.go b/general_tests/acntacts_test.go index 86896e3bf..ed03156f7 100644 --- a/general_tests/acntacts_test.go +++ b/general_tests/acntacts_test.go @@ -51,7 +51,7 @@ ENABLE_ACNT,*enable_account,,,,,,,,,,,,,false,false,10` resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -60,7 +60,7 @@ ENABLE_ACNT,*enable_account,,,,,,,,,,,,,false,false,10` csvr, err := engine.NewTpReader(dbAcntActs.DataDB(), engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, accountActions, - resLimits, stats, trends, sags, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) + resLimits, stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) } diff --git a/general_tests/all_cfg_sect_rld_it_test.go b/general_tests/all_cfg_sect_rld_it_test.go index a8aa7d057..5e0f25f36 100644 --- a/general_tests/all_cfg_sect_rld_it_test.go +++ b/general_tests/all_cfg_sect_rld_it_test.go @@ -384,7 +384,7 @@ func testSectConfigSReloadCaches(t *testing.T) { } else if reply != utils.OK { t.Errorf("Expected OK received: %+v", reply) } - cfgStr := `{"caches":{"partitions":{"*account_action_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*rating_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sag_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*tmp_rating_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"1m0s"},"*uch":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]}}` + cfgStr := `{"caches":{"partitions":{"*account_action_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_triggers":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*destinations":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*diameter_messages":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*dispatcher_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_loads":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatcher_routes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*dispatchers":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*radius_packets":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*rating_plans":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rating_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_destinations":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*ranking_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*shared_groups":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*timings":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*tmp_rating_profiles":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"1m0s"},"*uch":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]}}` var rpl string if err := testSectRPC.Call(context.Background(), utils.ConfigSv1GetConfigAsJSON, &config.SectionWithAPIOpts{ Tenant: "cgrates.org", diff --git a/general_tests/auth_test.go b/general_tests/auth_test.go index 7db79861d..0419a14cb 100644 --- a/general_tests/auth_test.go +++ b/general_tests/auth_test.go @@ -55,7 +55,7 @@ func TestAuthLoadCsvError(t *testing.T) { resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -63,7 +63,7 @@ func TestAuthLoadCsvError(t *testing.T) { chargerProfiles := `` csvr, err := engine.NewTpReader(dbAuth.DataDB(), engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, accountActions, - resLimits, stats, trends, sags, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) + resLimits, stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) } @@ -91,7 +91,7 @@ cgrates.org,call,*any,2013-01-06T00:00:00Z,RP_ANY,` resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -99,7 +99,7 @@ cgrates.org,call,*any,2013-01-06T00:00:00Z,RP_ANY,` chargerProfiles := `` csvr, err := engine.NewTpReader(dbAuth.DataDB(), engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, accountActions, - resLimits, stats, trends, sags, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) + resLimits, stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) } diff --git a/general_tests/ddazmbl1_test.go b/general_tests/ddazmbl1_test.go index 06e1183a2..9070b26ee 100644 --- a/general_tests/ddazmbl1_test.go +++ b/general_tests/ddazmbl1_test.go @@ -59,7 +59,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10` resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -69,7 +69,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10` engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, accountActions, - resLimits, stats, trends, sags, thresholds, filters, suppliers, + resLimits, stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) diff --git a/general_tests/ddazmbl2_test.go b/general_tests/ddazmbl2_test.go index ddc741f09..335e853fc 100644 --- a/general_tests/ddazmbl2_test.go +++ b/general_tests/ddazmbl2_test.go @@ -59,7 +59,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10` resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -68,7 +68,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10` csvr, err := engine.NewTpReader(dataDB2.DataDB(), engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, accountActions, resLimits, - stats, trends, sags, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) + stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) } diff --git a/general_tests/ddazmbl3_test.go b/general_tests/ddazmbl3_test.go index ad8207368..fbbc4fa78 100644 --- a/general_tests/ddazmbl3_test.go +++ b/general_tests/ddazmbl3_test.go @@ -57,7 +57,7 @@ cgrates.org,call,discounted_minutes,2013-01-06T00:00:00Z,RP_UK_Mobile_BIG5_PKG,` resLimits := `` stats := `` trends := `` - sags := `` + rankings := `` thresholds := `` filters := `` suppliers := `` @@ -65,7 +65,7 @@ cgrates.org,call,discounted_minutes,2013-01-06T00:00:00Z,RP_UK_Mobile_BIG5_PKG,` chargerProfiles := `` csvr, err := engine.NewTpReader(dataDB3.DataDB(), engine.NewStringCSVStorage(utils.CSVSep, destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, actions, actionPlans, actionTriggers, - accountActions, resLimits, stats, trends, sags, + accountActions, resLimits, stats, trends, rankings, thresholds, filters, suppliers, attrProfiles, chargerProfiles, ``, ""), "", "", nil, nil, false) if err != nil { t.Error(err) diff --git a/loaders/loader.go b/loaders/loader.go index 89f5331f1..0b6ec5c46 100644 --- a/loaders/loader.go +++ b/loaders/loader.go @@ -435,33 +435,33 @@ func (ldr *Loader) storeLoadedData(loaderType string, } } } - case utils.MetaSags: - cacheIDs = []string{utils.CacheSagFilterIndexes} + case utils.MetaRankings: + cacheIDs = []string{utils.CacheRankingFilterIndexes} for _, lDataSet := range lds { - stsModels := make(engine.SagsMdls, len(lDataSet)) + stsModels := make(engine.RankingsMdls, len(lDataSet)) for i, ld := range lDataSet { - stsModels[i] = new(engine.SagsMdl) + stsModels[i] = new(engine.RankingsMdl) if err = utils.UpdateStructWithIfaceMap(stsModels[i], ld); err != nil { return } } - for _, tpSgs := range stsModels.AsTPSags() { - sgsPrf, err := engine.APItoSags(tpSgs) + for _, tpSgs := range stsModels.AsTPRanking() { + sgsPrf, err := engine.APItoRanking(tpSgs) if err != nil { return err } if ldr.dryRun { utils.Logger.Info( - fmt.Sprintf("<%s-%s> DRY_RUN: StatsQueueProfile: %s", + fmt.Sprintf("<%s-%s> DRY_RUN: RankingProfile: %s", utils.LoaderS, ldr.ldrID, utils.ToJSON(sgsPrf))) continue } // get IDs so we can reload in cache ids = append(ids, sgsPrf.TenantID()) - if err := ldr.dm.SetSagProfile(sgsPrf); err != nil { + if err := ldr.dm.SetRankingProfile(sgsPrf); err != nil { return err } - cacheArgs[utils.CacheSagFilterIndexes] = ids + cacheArgs[utils.CacheRankingFilterIndexes] = ids } } case utils.MetaThresholds: @@ -773,22 +773,22 @@ func (ldr *Loader) removeLoadedData(loaderType string, lds map[string][]LoaderDa cacheArgs[utils.CacheStatQueues] = ids } } - case utils.MetaSags: - cacheIDs = []string{utils.CacheSagFilterIndexes} + case utils.MetaRankings: + cacheIDs = []string{utils.CacheRankingFilterIndexes} for tntID := range lds { if ldr.dryRun { utils.Logger.Info( - fmt.Sprintf("<%s-%s> DRY_RUN: StatsQueueProfileID: %s", + fmt.Sprintf("<%s-%s> DRY_RUN: RankingProfileID: %s", utils.LoaderS, ldr.ldrID, tntID)) } else { tntIDStruct := utils.NewTenantID(tntID) // get IDs so we can reload in cache ids = append(ids, tntID) - if err := ldr.dm.RemoveSagProfile(tntIDStruct.Tenant, + if err := ldr.dm.RemoveRankingProfile(tntIDStruct.Tenant, tntIDStruct.ID); err != nil { return err } - cacheArgs[utils.CacheSagProfiles] = ids + cacheArgs[utils.CacheRankingProfiles] = ids } } case utils.MetaThresholds: diff --git a/services/datadb_it_test.go b/services/datadb_it_test.go index e140a3b2a..adac9b9a9 100644 --- a/services/datadb_it_test.go +++ b/services/datadb_it_test.go @@ -122,7 +122,7 @@ func TestDataDBReload(t *testing.T) { utils.MetaStatQueues: {Limit: -1}, utils.MetaResources: {Limit: -1}, utils.MetaStatQueueProfiles: {Limit: -1}, - utils.MetaSagProfiles: {Limit: -1}, + utils.MetaRankingProfiles: {Limit: -1}, utils.MetaTrendProfiles: {Limit: -1}, utils.MetaThresholds: {Limit: -1}, utils.MetaThresholdProfiles: {Limit: -1}, diff --git a/services/sags.go b/services/rankings.go similarity index 79% rename from services/sags.go rename to services/rankings.go index ecaa64808..381fe25f2 100644 --- a/services/sags.go +++ b/services/rankings.go @@ -31,14 +31,14 @@ import ( "github.com/cgrates/cgrates/utils" ) -// NewSagsService returns the SagS Service -func NewSagService(cfg *config.CGRConfig, dm *DataDBService, +// NewRankingService returns the RankingS Service +func NewRankingService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *cores.Server, internalSagSChan chan birpc.ClientConnector, + server *cores.Server, internalRankingSChan chan birpc.ClientConnector, connMgr *engine.ConnManager, anz *AnalyzerService, srvDep map[string]*sync.WaitGroup) servmanager.Service { - return &SagService{ - connChan: internalSagSChan, + return &RankingService{ + connChan: internalRankingSChan, cfg: cfg, dm: dm, cacheS: cacheS, @@ -50,7 +50,7 @@ func NewSagService(cfg *config.CGRConfig, dm *DataDBService, } } -type SagService struct { +type RankingService struct { sync.RWMutex cfg *config.CGRConfig dm *DataDBService @@ -64,7 +64,7 @@ type SagService struct { } // Start should handle the sercive start -func (sag *SagService) Start() error { +func (sag *RankingService) Start() error { if sag.IsRunning() { return utils.ErrServiceAlreadyRunning } @@ -80,8 +80,8 @@ func (sag *SagService) Start() error { dbchan <- datadb utils.Logger.Info(fmt.Sprintf("<%s> starting <%s> subsystem", - utils.CoreS, utils.SagS)) - srv, err := engine.NewService(v1.NewSagSv1()) + utils.CoreS, utils.RankingS)) + srv, err := engine.NewService(v1.NewRankingSv1()) if err != nil { return err } @@ -95,12 +95,12 @@ func (sag *SagService) Start() error { } // Reload handles the change of config -func (sag *SagService) Reload() (err error) { +func (sag *RankingService) Reload() (err error) { return } // Shutdown stops the service -func (sag *SagService) Shutdown() (err error) { +func (sag *RankingService) Shutdown() (err error) { defer sag.srvDep[utils.DataDB].Done() sag.Lock() defer sag.Unlock() @@ -109,18 +109,18 @@ func (sag *SagService) Shutdown() (err error) { } // IsRunning returns if the service is running -func (sag *SagService) IsRunning() bool { +func (sag *RankingService) IsRunning() bool { sag.RLock() defer sag.RUnlock() return false } // ServiceName returns the service name -func (sag *SagService) ServiceName() string { - return utils.SagS +func (sag *RankingService) ServiceName() string { + return utils.RankingS } // ShouldRun returns if the service should be running -func (sag *SagService) ShouldRun() bool { - return sag.cfg.SagSCfg().Enabled +func (sag *RankingService) ShouldRun() bool { + return sag.cfg.RankingSCfg().Enabled } diff --git a/servmanager/servmanager.go b/servmanager/servmanager.go index c59cdba0f..8c9040038 100644 --- a/servmanager/servmanager.go +++ b/servmanager/servmanager.go @@ -197,8 +197,8 @@ func (srvMngr *ServiceManager) handleReload() { go srvMngr.reloadService(utils.StatS) case <-srvMngr.GetConfig().GetReloadChan(config.TRENDS_JSON): go srvMngr.reloadService(utils.TrendS) - case <-srvMngr.GetConfig().GetReloadChan(config.SAGS_JSON): - go srvMngr.reloadService(utils.SagS) + case <-srvMngr.GetConfig().GetReloadChan(config.RANKINGS_JSON): + go srvMngr.reloadService(utils.RankingS) case <-srvMngr.GetConfig().GetReloadChan(config.RESOURCES_JSON): go srvMngr.reloadService(utils.ResourceS) case <-srvMngr.GetConfig().GetReloadChan(config.RouteSJson): diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 1a71d014e..12c36f90d 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -987,8 +987,8 @@ type TPStatProfile struct { ThresholdIDs []string } -// TPSagProfile is used in APIs to manage remotely offline SagProfile -type TPSagsProfile struct { +// TPRankingProfile is used in APIs to manage remotely offline RankingProfile +type TPRankingProfile struct { TPid string Tenant string ID string @@ -1322,7 +1322,7 @@ func NewAttrReloadCacheWithOpts() *AttrReloadCacheWithAPIOpts { ResourceIDs: []string{MetaAny}, StatsQueueIDs: []string{MetaAny}, StatsQueueProfileIDs: []string{MetaAny}, - SagProfileIDs: []string{MetaAny}, + RankingProfileIDs: []string{MetaAny}, ThresholdIDs: []string{MetaAny}, ThresholdProfileIDs: []string{MetaAny}, FilterIDs: []string{MetaAny}, @@ -1362,7 +1362,7 @@ func NewAttrReloadCacheWithOptsFromMap(arg map[string][]string, tnt string, opts ResourceIDs: arg[CacheResources], StatsQueueIDs: arg[CacheStatQueues], StatsQueueProfileIDs: arg[CacheStatQueueProfiles], - SagProfileIDs: arg[CacheSagProfiles], + RankingProfileIDs: arg[CacheRankingProfiles], ThresholdIDs: arg[CacheThresholds], ThresholdProfileIDs: arg[CacheThresholdProfiles], FilterIDs: arg[CacheFilters], @@ -1400,7 +1400,7 @@ type AttrReloadCacheWithAPIOpts struct { ResourceIDs []string `json:",omitempty"` StatsQueueIDs []string `json:",omitempty"` StatsQueueProfileIDs []string `json:",omitempty"` - SagProfileIDs []string `json:",omitempty"` + RankingProfileIDs []string `json:",omitempty"` ThresholdIDs []string `json:",omitempty"` ThresholdProfileIDs []string `json:",omitempty"` FilterIDs []string `json:",omitempty"` @@ -1438,7 +1438,7 @@ func (a *AttrReloadCacheWithAPIOpts) Map() map[string][]string { CacheStatQueueProfiles: a.StatsQueueProfileIDs, CacheThresholds: a.ThresholdIDs, CacheThresholdProfiles: a.ThresholdProfileIDs, - CacheSagProfiles: a.SagProfileIDs, + CacheRankingProfiles: a.RankingProfileIDs, CacheFilters: a.FilterIDs, CacheRouteProfiles: a.RouteProfileIDs, CacheAttributeProfiles: a.AttributeProfileIDs, diff --git a/utils/apitpdata_test.go b/utils/apitpdata_test.go index 90501956f..ba51b48a5 100644 --- a/utils/apitpdata_test.go +++ b/utils/apitpdata_test.go @@ -997,7 +997,7 @@ func TestNewAttrReloadCacheWithOpts(t *testing.T) { ChargerFilterIndexIDs: []string{MetaAny}, DispatcherFilterIndexIDs: []string{MetaAny}, FilterIndexIDs: []string{MetaAny}, - SagProfileIDs: []string{MetaAny}, + RankingProfileIDs: []string{MetaAny}, } eMap := NewAttrReloadCacheWithOpts() if !reflect.DeepEqual(eMap, newAttrReloadCache) { diff --git a/utils/consts.go b/utils/consts.go index c8850d5a9..fdf59c612 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -38,7 +38,7 @@ var ( DataDBPartitions = NewStringSet([]string{CacheDestinations, CacheReverseDestinations, CacheRatingPlans, CacheRatingProfiles, CacheDispatcherProfiles, CacheDispatcherHosts, CacheChargerProfiles, CacheActions, CacheActionTriggers, CacheSharedGroups, CacheTimings, - CacheResourceProfiles, CacheResources, CacheEventResources, CacheStatQueueProfiles, CacheSagProfiles, CacheStatQueues, + CacheResourceProfiles, CacheResources, CacheEventResources, CacheStatQueueProfiles, CacheRankingProfiles, CacheStatQueues, CacheThresholdProfiles, CacheThresholds, CacheFilters, CacheRouteProfiles, CacheAttributeProfiles, CacheResourceFilterIndexes, CacheStatFilterIndexes, CacheThresholdFilterIndexes, CacheRouteFilterIndexes, CacheAttributeFilterIndexes, CacheChargerFilterIndexes, CacheDispatcherFilterIndexes, CacheLoadIDs, @@ -47,7 +47,7 @@ var ( StorDBPartitions = NewStringSet([]string{CacheTBLTPTimings, CacheTBLTPDestinations, CacheTBLTPRates, CacheTBLTPDestinationRates, CacheTBLTPRatingPlans, CacheTBLTPRatingProfiles, CacheTBLTPSharedGroups, CacheTBLTPActions, CacheTBLTPActionPlans, CacheTBLTPActionTriggers, CacheTBLTPAccountActions, CacheTBLTPResources, - CacheTBLTPStats, CacheTBLTPThresholds, CacheTBLTPSags, CacheTBLTPFilters, CacheSessionCostsTBL, CacheCDRsTBL, + CacheTBLTPStats, CacheTBLTPThresholds, CacheTBLTPRankings, CacheTBLTPFilters, CacheSessionCostsTBL, CacheCDRsTBL, CacheTBLTPRoutes, CacheTBLTPAttributes, CacheTBLTPChargers, CacheTBLTPDispatchers, CacheTBLTPDispatcherHosts, CacheVersions}) @@ -69,7 +69,7 @@ var ( CacheTimings: TimingsPrefix, CacheStatQueueProfiles: StatQueueProfilePrefix, CacheStatQueues: StatQueuePrefix, - CacheSagProfiles: SagsProfilePrefix, + CacheRankingProfiles: RankingsProfilePrefix, CacheTrendProfiles: TrendsProfilePrefix, CacheThresholdProfiles: ThresholdProfilePrefix, CacheThresholds: ThresholdPrefix, @@ -138,7 +138,7 @@ var ( TBLTPResources: CacheTBLTPResources, TBLTPStats: CacheTBLTPStats, TBLTPTrends: CacheTBLTPTrends, - TBLTPSags: CacheTBLTPSags, + TBLTPRankings: CacheTBLTPRankings, TBLTPThresholds: CacheTBLTPThresholds, TBLTPFilters: CacheTBLTPFilters, SessionCostsTBL: CacheSessionCostsTBL, @@ -306,7 +306,7 @@ const ( DispatcherHostPrefix = "dph_" ThresholdProfilePrefix = "thp_" StatQueuePrefix = "stq_" - SagsProfilePrefix = "sgp_" + RankingsProfilePrefix = "rgp_" TrendsProfilePrefix = "trp_" LoadIDPrefix = "lid_" SessionsBackupPrefix = "sbk_" @@ -405,7 +405,7 @@ const ( MetaRefund = "*refund" MetaStats = "*stats" MetaTrends = "*trends" - MetaSags = "*sags" + MetaRankings = "*rankings" MetaResponder = "*responder" MetaCore = "*core" MetaServiceManager = "*servicemanager" @@ -975,7 +975,7 @@ const ( MetaResourceProfile = "*resource_profiles" MetaStatQueueProfiles = "*statqueue_profiles" MetaStatQueues = "*statqueues" - MetaSagProfiles = "*sag_profiles" + MetaRankingProfiles = "*ranking_profiles" MetaTrendProfiles = "*trend_profiles" MetaThresholdProfiles = "*threshold_profiles" MetaRouteProfiles = "*route_profiles" @@ -1032,7 +1032,7 @@ const ( SessionS = "SessionS" StatService = "StatS" TrendS = "TrendS" - SagS = "SagS" + RankingS = "RankingS" ThresholdS = "ThresholdS" ) @@ -1156,7 +1156,7 @@ const ( TpAttributes = "TpAttributes" TpStats = "TpStats" TpTrends = "TpTrends" - TpSags = "TpSags" + TpRankings = "TpRankings" TpSharedGroups = "TpSharedGroups" TpRatingProfiles = "TpRatingProfiles" TpResources = "TpResources" @@ -1182,7 +1182,7 @@ const ( ThresholdSv1 = "ThresholdSv1" StatSv1 = "StatSv1" TrendSv1 = "TrendSv1" - SagSv1 = "SagSv1" + RankingSv1 = "RankingSv1" ResourceSv1 = "ResourceSv1" RouteSv1 = "RouteSv1" AttributeSv1 = "AttributeSv1" @@ -1310,7 +1310,7 @@ const ( ReplicatorSv1RemoveFilter = "ReplicatorSv1.RemoveFilter" ReplicatorSv1RemoveThresholdProfile = "ReplicatorSv1.RemoveThresholdProfile" ReplicatorSv1RemoveStatQueueProfile = "ReplicatorSv1.RemoveStatQueueProfile" - ReplicatorSv1RemoveSagProfile = "ReplicatorSv1.RemoveSagProfile" + ReplicatorSv1RemoveRankingProfile = "ReplicatorSv1.RemoveRankingProfile" ReplicatorSv1RemoveTrendProfile = "ReplicatorSv1.RemoveTrendProfile" ReplicatorSv1RemoveTiming = "ReplicatorSv1.RemoveTiming" ReplicatorSv1RemoveResource = "ReplicatorSv1.RemoveResource" @@ -1441,9 +1441,9 @@ const ( APIerSv1SetTPStat = "APIerSv1.SetTPStat" APIerSv1GetTPStat = "APIerSv1.GetTPStat" APIerSv1RemoveTPStat = "APIerSv1.RemoveTPStat" - APIerSv1SetTPSag = "APIerSv1.SetTPSag" - APIerSv1GetTPSag = "APIerSv1.GetTPSag" - APIerSv1RemoveTPSag = "APIerSv1.RemoveTPSag" + APIerSv1SetTPRanking = "APIerSv1.SetTPRanking" + APIerSv1GetTPRanking = "APIerSv1.GetTPRanking" + APIerSv1RemoveTPRanking = "APIerSv1.RemoveTPRanking" APIerSv1SetTPTrend = "APIerSv1.SetTPTrend" APIerSv1GetTPTrend = "APIerSv1.GetTPTrend" APIerSv1RemoveTPTrend = "APIerSv1.RemoveTPTrend" @@ -1677,13 +1677,13 @@ const ( TrendSv1Ping = "TrendSv1.Ping" ) -// SagS APIs +// RankingS APIs const ( - APIerSv1SetSagProfile = "APIerSv1.SetSagProfile" - APIerSv1RemoveSagProfile = "APIerSv1.RemoveSagProfile" - APIerSv1GetSagProfile = "APIerSv1.GetSagProfile" - APIerSv1GetSagProfileIDs = "APIerSv1.GetSagProfileIDs" - SagSv1Ping = "SagSv1.Ping" + APIerSv1SetRankingProfile = "APIerSv1.SetRankingProfile" + APIerSv1RemoveRankingProfile = "APIerSv1.RemoveRankingProfile" + APIerSv1GetRankingProfile = "APIerSv1.GetRankingProfile" + APIerSv1GetRankingProfileIDs = "APIerSv1.GetRankingProfileIDs" + RankingSv1Ping = "RankingSv1.Ping" ) // ResourceS APIs @@ -1900,7 +1900,7 @@ const ( ResourcesCsv = "Resources.csv" StatsCsv = "Stats.csv" TrendsCsv = "Trends.csv" - SagsCsv = "Sags.csv" + RankingsCsv = "Rankings.csv" ThresholdsCsv = "Thresholds.csv" FiltersCsv = "Filters.csv" RoutesCsv = "Routes.csv" @@ -1925,7 +1925,7 @@ const ( TBLTPAccountActions = "tp_account_actions" TBLTPResources = "tp_resources" TBLTPStats = "tp_stats" - TBLTPSags = "tp_sags" + TBLTPRankings = "tp_rankings" TBLTPTrends = "tp_trends" TBLTPThresholds = "tp_thresholds" TBLTPFilters = "tp_filters" @@ -1957,7 +1957,7 @@ const ( CacheEventResources = "*event_resources" CacheStatQueueProfiles = "*statqueue_profiles" CacheStatQueues = "*statqueues" - CacheSagProfiles = "*sag_profiles" + CacheRankingProfiles = "*ranking_profiles" CacheTrendProfiles = "*trend_profiles" CacheThresholdProfiles = "*threshold_profiles" CacheThresholds = "*thresholds" @@ -1973,7 +1973,7 @@ const ( CacheResourceFilterIndexes = "*resource_filter_indexes" CacheStatFilterIndexes = "*stat_filter_indexes" CacheThresholdFilterIndexes = "*threshold_filter_indexes" - CacheSagFilterIndexes = "sag_filter_indexes" + CacheRankingFilterIndexes = "ranking_filter_indexes" CacheRouteFilterIndexes = "*route_filter_indexes" CacheAttributeFilterIndexes = "*attribute_filter_indexes" CacheChargerFilterIndexes = "*charger_filter_indexes" @@ -2013,7 +2013,7 @@ const ( CacheTBLTPResources = "*tp_resources" CacheTBLTPStats = "*tp_stats" CacheTBLTPTrends = "*tp_trends" - CacheTBLTPSags = "*tp_sags" + CacheTBLTPRankings = "*tp_rankings" CacheTBLTPThresholds = "*tp_thresholds" CacheTBLTPFilters = "*tp_filters" CacheSessionCostsTBL = "*session_costs"