From 799b85ca706b54e4f9c4465689397b94f4f5738d Mon Sep 17 00:00:00 2001 From: gezimbll Date: Thu, 22 Jan 2026 17:17:50 +0100 Subject: [PATCH] updated tpreader to remove trend and ranking profiles with -remove flag --- apier/v1/apier_it_test.go | 2 +- apier/v1/caches_it_test.go | 2 +- engine/datamanager.go | 4 ++-- engine/tpreader.go | 32 ++++++++++++++++++++++++++++++++ engine/tpreader_test.go | 4 ++++ 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/apier/v1/apier_it_test.go b/apier/v1/apier_it_test.go index d65c9af88..762f54f36 100644 --- a/apier/v1/apier_it_test.go +++ b/apier/v1/apier_it_test.go @@ -1671,7 +1671,7 @@ func testApierResetDataAfterLoadFromFolder(t *testing.T) { // expStats[utils.CacheActionPlans].Items = 7 expStats[utils.CacheActions].Items = 5 expStats[utils.CacheDestinations].Items = 3 - expStats[utils.CacheLoadIDs].Items = 19 + expStats[utils.CacheLoadIDs].Items = 20 expStats[utils.CacheRPCConnections].Items = 2 if err := rater.Call(context.Background(), utils.CacheSv1GetCacheStats, new(utils.AttrCacheIDsWithAPIOpts), &rcvStats); err != nil { t.Error("Got error on CacheSv1.GetCacheStats: ", err.Error()) diff --git a/apier/v1/caches_it_test.go b/apier/v1/caches_it_test.go index d83aae538..4efb5f73b 100644 --- a/apier/v1/caches_it_test.go +++ b/apier/v1/caches_it_test.go @@ -133,7 +133,7 @@ func testCacheSAfterLoadFromFolder(t *testing.T) { expStats := engine.GetDefaultEmptyCacheStats() expStats[utils.CacheActions].Items = 5 expStats[utils.CacheDestinations].Items = 3 - expStats[utils.CacheLoadIDs].Items = 19 + expStats[utils.CacheLoadIDs].Items = 20 expStats[utils.CacheRPCConnections].Items = 2 if err := chcRPC.Call(context.Background(), utils.CacheSv1GetCacheStats, &utils.AttrCacheIDsWithAPIOpts{}, &rcvStats); err != nil { t.Error("Got error on CacheSv1.GetCacheStats: ", err.Error()) diff --git a/engine/datamanager.go b/engine/datamanager.go index 3aaadbd27..19055d96b 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -1661,7 +1661,7 @@ func (dm *DataManager) RemoveRankingProfile(tenant, id string) (err error) { if dm == nil { return utils.ErrNoDatabaseConn } - oldSgs, err := dm.GetRankingProfile(tenant, id, true, false, utils.NonTransactional) + oldSgs, err := dm.GetRankingProfile(tenant, id, false, false, utils.NonTransactional) if err != nil && err != utils.ErrNotFound { return err } @@ -1680,7 +1680,7 @@ func (dm *DataManager) RemoveRankingProfile(tenant, id string) (err error) { APIOpts: utils.GenerateDBItemOpts(itm.APIKey, itm.RouteID, config.CgrConfig().DataDbCfg().RplCache, utils.EmptyString), }, itm) - return + return dm.RemoveRanking(tenant, id) } func (dm *DataManager) GetRanking(tenant, id string, cacheRead, cacheWrite bool, transactionID string) (rn *Ranking, err error) { tntID := utils.ConcatenatedKey(tenant, id) diff --git a/engine/tpreader.go b/engine/tpreader.go index 841abc993..89dc18582 100644 --- a/engine/tpreader.go +++ b/engine/tpreader.go @@ -99,6 +99,7 @@ func (tpr *TpReader) Init() { tpr.sqProfiles = make(map[utils.TenantID]*utils.TPStatProfile) tpr.rgProfiles = make(map[utils.TenantID]*utils.TPRankingProfile) tpr.thProfiles = make(map[utils.TenantID]*utils.TPThresholdProfile) + tpr.trProfiles = make(map[utils.TenantID]*utils.TPTrendsProfile) tpr.routeProfiles = make(map[utils.TenantID]*utils.TPRouteProfile) tpr.attributeProfiles = make(map[utils.TenantID]*utils.TPAttributeProfile) tpr.chargerProfiles = make(map[utils.TenantID]*utils.TPChargerProfile) @@ -1672,6 +1673,9 @@ func (tpr *TpReader) WriteToDatabase(verbose, disableReverse bool) (err error) { log.Print("\t", tr.TenantID()) } } + if len(tpr.trProfiles) != 0 { + loadIDs[utils.CacheTrendProfiles] = loadID + } if verbose { log.Print("RankingProfiles:") } @@ -1883,6 +1887,10 @@ func (tpr *TpReader) ShowStatistics() { log.Print("Stats: ", len(tpr.sqProfiles)) // thresholds log.Print("Thresholds: ", len(tpr.thProfiles)) + // trends + log.Print("Trends: ", len(tpr.trProfiles)) + // rankings + log.Print("Rankings: ", len(tpr.rgProfiles)) // filters log.Print("Filters: ", len(tpr.filters)) // Route profiles @@ -2012,6 +2020,14 @@ func (tpr *TpReader) GetLoadedIds(categ string) ([]string, error) { i++ } return keys, nil + case utils.TrendsProfilePrefix: + keys := make([]string, len(tpr.trProfiles)) + i := 0 + for k := range tpr.trProfiles { + keys[i] = k.TenantID() + i++ + } + return keys, nil case utils.ThresholdProfilePrefix: keys := make([]string, len(tpr.thProfiles)) i := 0 @@ -2206,6 +2222,17 @@ func (tpr *TpReader) RemoveFromDatabase(verbose, disableReverse bool) (err error log.Print("\t", utils.ConcatenatedKey(tpSgs.Tenant, tpSgs.ID)) } } + if verbose { + log.Print("TrendProfiles:") + } + for _, tpTR := range tpr.trProfiles { + if err = tpr.dm.RemoveTrendProfile(tpTR.Tenant, tpTR.ID); err != nil { + return + } + if verbose { + log.Print("\t", utils.ConcatenatedKey(tpTR.Tenant, tpTR.ID)) + } + } if verbose { log.Print("ThresholdProfiles:") } @@ -2361,6 +2388,9 @@ func (tpr *TpReader) RemoveFromDatabase(verbose, disableReverse bool) (err error if len(tpr.rgProfiles) != 0 { loadIDs[utils.CacheRankingProfiles] = loadID } + if len(tpr.trProfiles) != 0 { + loadIDs[utils.CacheTrendProfiles] = loadID + } if len(tpr.thProfiles) != 0 { loadIDs[utils.CacheThresholdProfiles] = loadID loadIDs[utils.CacheThresholds] = loadID @@ -2405,6 +2435,7 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, opts map[string]a aatIDs, _ := tpr.GetLoadedIds(utils.ActionTriggerPrefix) stqpIDs, _ := tpr.GetLoadedIds(utils.StatQueueProfilePrefix) sgIDS, _ := tpr.GetLoadedIds(utils.RankingsProfilePrefix) + trIDS, _ := tpr.GetLoadedIds(utils.TrendsProfilePrefix) trspfIDs, _ := tpr.GetLoadedIds(utils.ThresholdProfilePrefix) flrIDs, _ := tpr.GetLoadedIds(utils.FilterPrefix) routeIDs, _ := tpr.GetLoadedIds(utils.RouteProfilePrefix) @@ -2433,6 +2464,7 @@ func (tpr *TpReader) ReloadCache(caching string, verbose bool, opts map[string]a utils.CacheStatQueues: stqpIDs, utils.CacheStatQueueProfiles: stqpIDs, utils.CacheRankingProfiles: sgIDS, + utils.CacheTrendProfiles: trIDS, utils.CacheThresholds: trspfIDs, utils.CacheThresholdProfiles: trspfIDs, utils.CacheFilters: flrIDs, diff --git a/engine/tpreader_test.go b/engine/tpreader_test.go index da63a7f61..e31662acc 100644 --- a/engine/tpreader_test.go +++ b/engine/tpreader_test.go @@ -940,6 +940,7 @@ func TestTPReaderReloadCache(t *testing.T) { IPProfileIDs: []string{"cgrates.org:ipProfilesID"}, StatsQueueProfileIDs: []string{"cgrates.org:statProfilesID"}, ThresholdProfileIDs: []string{"cgrates.org:thresholdProfilesID"}, + TrendProfileIDs: []string{"cgrates.org:trendProfilesID"}, FilterIDs: []string{"cgrates.org:filtersID"}, RouteProfileIDs: []string{"cgrates.org:routeProfilesID"}, AttributeProfileIDs: []string{"cgrates.org:attributeProfilesID"}, @@ -1014,6 +1015,9 @@ func TestTPReaderReloadCache(t *testing.T) { thProfiles: map[utils.TenantID]*utils.TPThresholdProfile{ {Tenant: "cgrates.org", ID: "thresholdProfilesID"}: {}, }, + trProfiles: map[utils.TenantID]*utils.TPTrendsProfile{ + {Tenant: "cgrates.org", ID: "trendProfilesID"}: {}, + }, filters: map[utils.TenantID]*utils.TPFilterProfile{ {Tenant: "cgrates.org", ID: "filtersID"}: {}, },