diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go index f37864d84..28f7b6853 100644 --- a/apier/v1/accounts.go +++ b/apier/v1/accounts.go @@ -364,7 +364,7 @@ func (apierSv1 *APIerSv1) GetAccounts(ctx *context.Context, attr *utils.AttrGetA var accountKeys []string var err error if len(attr.AccountIDs) == 0 { - if accountKeys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix + tnt); err != nil { + if accountKeys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix+tnt, utils.EmptyString); err != nil { return err } } else { @@ -777,7 +777,7 @@ func (apierSv1 *APIerSv1) GetAccountsCount(ctx *context.Context, attr *utils.Ten tnt = apierSv1.Config.GeneralCfg().DefaultTenant } var accountKeys []string - if accountKeys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix + tnt); err != nil { + if accountKeys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix+tnt, utils.EmptyString); err != nil { return } *reply = len(accountKeys) diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 6373b202d..3fc16dd80 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -526,7 +526,7 @@ func (apierSv1 *APIerSv1) GetRatingProfileIDs(ctx *context.Context, args *utils. tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.RatingProfilePrefix + "*out:" + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } @@ -1504,7 +1504,7 @@ func (apierSv1 *APIerSv1) ComputeActionPlanIndexes(ctx *context.Context, _ strin // GetActionPlanIDs returns list of ActionPlan IDs registered for a tenant func (apierSv1 *APIerSv1) GetActionPlanIDs(ctx *context.Context, args *utils.PaginatorWithTenant, attrPrfIDs *[]string) error { prfx := utils.ActionPlanPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix, args.Search) if err != nil { return err } @@ -1522,7 +1522,7 @@ func (apierSv1 *APIerSv1) GetActionPlanIDs(ctx *context.Context, args *utils.Pag // GetRatingPlanIDs returns list of RatingPlan IDs registered for a tenant func (apierSv1 *APIerSv1) GetRatingPlanIDs(ctx *context.Context, args *utils.PaginatorWithTenant, attrPrfIDs *[]string) error { prfx := utils.RatingPlanPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix, args.Search) if err != nil { return err } @@ -1571,7 +1571,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp switch item { case utils.MetaAttributes: prfx := utils.AttributeProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1609,7 +1609,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaChargers: prfx := utils.ChargerProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1647,7 +1647,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaDispatchers: prfx := utils.DispatcherProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1685,7 +1685,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaDispatcherHosts: prfx := utils.DispatcherHostPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1721,7 +1721,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaFilters: prfx := utils.FilterPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1759,7 +1759,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaResources: prfx := utils.ResourceProfilesPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1797,7 +1797,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaIPs: prfx := utils.IPProfilesPrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1835,7 +1835,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaStats: prfx := utils.StatQueueProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1873,7 +1873,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaRankings: prfx := utils.RankingsProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1907,7 +1907,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaTrends: prfx := utils.TrendsProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1942,7 +1942,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaRoutes: prfx := utils.RouteProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } @@ -1980,7 +1980,7 @@ func (apierSv1 *APIerSv1) ExportToFolder(ctx *context.Context, arg *utils.ArgExp csvWriter.Flush() case utils.MetaThresholds: prfx := utils.ThresholdProfilePrefix - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } diff --git a/apier/v1/attributes.go b/apier/v1/attributes.go index ccd845f57..94b459260 100644 --- a/apier/v1/attributes.go +++ b/apier/v1/attributes.go @@ -54,7 +54,7 @@ func (apierSv1 *APIerSv1) GetAttributeProfileIDs(ctx *context.Context, args *uti tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.AttributeProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } @@ -78,7 +78,7 @@ func (apierSv1 *APIerSv1) GetAttributeProfileCount(ctx *context.Context, args *u } var keys []string prfx := utils.AttributeProfilePrefix + tnt + utils.ConcatenatedKeySep - if keys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx); err != nil { + if keys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString); err != nil { return err } if len(keys) == 0 { diff --git a/apier/v1/attributes_it_test.go b/apier/v1/attributes_it_test.go index de8b676b2..c25aa5345 100644 --- a/apier/v1/attributes_it_test.go +++ b/apier/v1/attributes_it_test.go @@ -24,6 +24,7 @@ package v1 import ( "path" "reflect" + "slices" "sort" "testing" "time" @@ -876,6 +877,52 @@ func testAttributeSGetAttPrfIDs(t *testing.T) { } else if 10 < len(result) { t.Errorf("Expecting : %+v, received: %+v", expected, result) } + + expected = []string{"ATTR_1", "ATTR_2", "ATTR_3", "ATTR_Header", "ATTR_PASS", "ATTR_RAD"} + if err := attrSRPC.Call(context.Background(), utils.APIerSv1GetAttributeProfileIDs, &utils.PaginatorWithTenant{ + Tenant: "cgrates.org", + Search: "ATTR", // test for prefix + Paginator: utils.Paginator{Limit: utils.IntPointer(10)}, + }, &result); err != nil { + t.Error(err) + } + slices.Sort(result) + if !reflect.DeepEqual(expected, result) { + t.Errorf("Expecting : %+v, received: %+v", expected, result) + } + + expected = []string{"ATTR_2"} + if err := attrSRPC.Call(context.Background(), utils.APIerSv1GetAttributeProfileIDs, &utils.PaginatorWithTenant{ + Tenant: "cgrates.org", + Search: "_2", // test for suffix + Paginator: utils.Paginator{Limit: utils.IntPointer(10)}, + }, &result); err != nil { + t.Error(err) + } + if !reflect.DeepEqual(expected, result) { + t.Errorf("Expecting : %+v, received: %+v", expected, result) + } + + expected = []string{"ATTR_1", "ATTR_2", "ATTR_3", "ATTR_Header", "ATTR_PASS", "ATTR_RAD"} + if err := attrSRPC.Call(context.Background(), utils.APIerSv1GetAttributeProfileIDs, &utils.PaginatorWithTenant{ + Tenant: "cgrates.org", + Search: "TTR_", // test for middle of body + Paginator: utils.Paginator{Limit: utils.IntPointer(10)}, + }, &result); err != nil { + t.Error(err) + } + slices.Sort(result) + if !reflect.DeepEqual(expected, result) { + t.Errorf("Expecting : %+v, received: %+v", expected, result) + } + expected = []string{} + if err := attrSRPC.Call(context.Background(), utils.APIerSv1GetAttributeProfileIDs, &utils.PaginatorWithTenant{ + Tenant: "cgrates.org", + Search: "non matching string", // test for non matching + Paginator: utils.Paginator{Limit: utils.IntPointer(10)}, + }, &result); err == nil || err.Error() != utils.ErrNotFound.Error() { + t.Errorf("expected error <%v>, received <%v>", utils.ErrNotFound, err) + } } func testAttributeSSetAlsPrfBrokenReference(t *testing.T) { diff --git a/apier/v1/chargers.go b/apier/v1/chargers.go index 00f74a0ee..0c424e10e 100644 --- a/apier/v1/chargers.go +++ b/apier/v1/chargers.go @@ -51,7 +51,7 @@ func (apierSv1 *APIerSv1) GetChargerProfileIDs(ctx *context.Context, args *utils tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.ChargerProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go index 423552471..45b6233a6 100644 --- a/apier/v1/dispatcher.go +++ b/apier/v1/dispatcher.go @@ -57,7 +57,7 @@ func (apierSv1 *APIerSv1) GetDispatcherProfileIDs(ctx *context.Context, tenantAr tenant = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.DispatcherProfilePrefix + tenant + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, tenantArg.Search) if err != nil { return err } @@ -173,7 +173,7 @@ func (apierSv1 *APIerSv1) GetDispatcherHostIDs(ctx *context.Context, tenantArg * tenant = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.DispatcherHostPrefix + tenant + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, tenantArg.Search) if err != nil { return err } diff --git a/apier/v1/filters.go b/apier/v1/filters.go index 025a5b92b..eaf4c5020 100644 --- a/apier/v1/filters.go +++ b/apier/v1/filters.go @@ -89,7 +89,7 @@ func (apierSv1 *APIerSv1) GetFilterIDs(ctx *context.Context, args *utils.Paginat tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.FilterPrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/ips.go b/apier/v1/ips.go index 5925020fd..ef68a0769 100644 --- a/apier/v1/ips.go +++ b/apier/v1/ips.go @@ -92,7 +92,7 @@ func (a *APIerSv1) GetIPProfileIDs(ctx *context.Context, args *utils.PaginatorWi tnt = a.Config.GeneralCfg().DefaultTenant } prfx := utils.IPProfilesPrefix + tnt + utils.ConcatenatedKeySep - keys, err := a.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := a.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/rankings.go b/apier/v1/rankings.go index 6ee73ebfc..a50088d34 100644 --- a/apier/v1/rankings.go +++ b/apier/v1/rankings.go @@ -51,7 +51,7 @@ func (apierSv1 *APIerSv1) GetRankingProfileIDs(ctx *context.Context, args *utils tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.RankingsProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/resourcesv1.go b/apier/v1/resourcesv1.go index 66463c3a0..c23498268 100644 --- a/apier/v1/resourcesv1.go +++ b/apier/v1/resourcesv1.go @@ -89,7 +89,7 @@ func (apierSv1 *APIerSv1) GetResourceProfileIDs(ctx *context.Context, args *util tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.ResourceProfilesPrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/routes.go b/apier/v1/routes.go index 9f5c6020e..3b46f4968 100644 --- a/apier/v1/routes.go +++ b/apier/v1/routes.go @@ -51,7 +51,7 @@ func (apierSv1 *APIerSv1) GetRouteProfileIDs(ctx *context.Context, args *utils.P tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.RouteProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/stats.go b/apier/v1/stats.go index 7b1aa04a0..7fc1483f9 100644 --- a/apier/v1/stats.go +++ b/apier/v1/stats.go @@ -52,7 +52,7 @@ func (apierSv1 *APIerSv1) GetStatQueueProfileIDs(ctx *context.Context, args *uti tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.StatQueueProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } diff --git a/apier/v1/thresholds.go b/apier/v1/thresholds.go index f868c5719..99b8740a8 100644 --- a/apier/v1/thresholds.go +++ b/apier/v1/thresholds.go @@ -86,7 +86,7 @@ func (apierSv1 *APIerSv1) GetThresholdProfileIDs(ctx *context.Context, args *uti tnt = apierSv1.Config.GeneralCfg().DefaultTenant } prfx := utils.ThresholdProfilePrefix + tnt + utils.ConcatenatedKeySep - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, args.Search) if err != nil { return err } @@ -110,7 +110,7 @@ func (apierSv1 *APIerSv1) GetThresholdProfileCount(ctx *context.Context, args *u } var keys []string prfx := utils.ThresholdProfilePrefix + tnt + utils.ConcatenatedKeySep - if keys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx); err != nil { + if keys, err = apierSv1.DataManager.DataDB().GetKeysForPrefix(prfx, utils.EmptyString); err != nil { return err } if len(keys) == 0 { diff --git a/apier/v1/triggers.go b/apier/v1/triggers.go index 1600feb4f..9135394b2 100644 --- a/apier/v1/triggers.go +++ b/apier/v1/triggers.go @@ -364,7 +364,7 @@ func (apierSv1 *APIerSv1) GetActionTriggers(ctx *context.Context, attr *AttrGetA } } else { - keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix) + keys, err := apierSv1.DataManager.DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix, utils.EmptyString) if err != nil { return err } diff --git a/apier/v2/accounts.go b/apier/v2/accounts.go index 4b5280bef..458f1a748 100644 --- a/apier/v2/accounts.go +++ b/apier/v2/accounts.go @@ -38,7 +38,7 @@ func (apiv2 *APIerSv2) GetAccounts(ctx *context.Context, attr *utils.AttrGetAcco var accountKeys []string var err error if len(attr.AccountIDs) == 0 { - if accountKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix + tnt); err != nil { + if accountKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix+tnt, utils.EmptyString); err != nil { return err } } else { @@ -91,7 +91,7 @@ func (apiv2 *APIerSv2) GetAccountsCount(ctx *context.Context, attr *utils.AttrGe tnt = apiv2.Config.GeneralCfg().DefaultTenant } var accountKeys []string - if accountKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix + tnt); err != nil { + if accountKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.AccountPrefix+tnt, utils.EmptyString); err != nil { return err } if len(accountKeys) == 0 { diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 4264f2cf6..390e4757e 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -190,7 +190,7 @@ func (apiv2 *APIerSv2) GetActions(ctx *context.Context, attr *AttrGetActions, re var actionKeys []string var err error if len(attr.ActionIDs) == 0 { - if actionKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.ActionPrefix); err != nil { + if actionKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.ActionPrefix, utils.EmptyString); err != nil { return err } } else { @@ -240,7 +240,7 @@ type AttrGetActionsCount struct{} // returns ErrNotFound in case of 0 actions func (apiv2 *APIerSv2) GetActionsCount(ctx *context.Context, attr *AttrGetActionsCount, reply *int) (err error) { var actionKeys []string - if actionKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.ActionPrefix); err != nil { + if actionKeys, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.ActionPrefix, utils.EmptyString); err != nil { return err } *reply = len(actionKeys) @@ -258,7 +258,7 @@ type AttrGetDestinations struct { func (apiv2 *APIerSv2) GetDestinations(ctx *context.Context, attr *AttrGetDestinations, reply *[]*engine.Destination) (err error) { if len(attr.DestinationIDs) == 0 { // get all destination ids - if attr.DestinationIDs, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.DestinationPrefix); err != nil { + if attr.DestinationIDs, err = apiv2.DataManager.DataDB().GetKeysForPrefix(utils.DestinationPrefix, utils.EmptyString); err != nil { return } for i, destID := range attr.DestinationIDs { diff --git a/dispatchers/dispatchers_it_test.go b/dispatchers/dispatchers_it_test.go index 0c1fd51c3..911c5745a 100644 --- a/dispatchers/dispatchers_it_test.go +++ b/dispatchers/dispatchers_it_test.go @@ -147,7 +147,7 @@ func TestDispatcherServiceDispatcherProfileForEventGetDispatchertWithoutAuthenti rpcCl := map[string]chan birpc.ClientConnector{} connMng := engine.NewConnManager(cfg, rpcCl) dm := engine.NewDataManager(&engine.DataDBMock{ - GetKeysForPrefixF: func(string) ([]string, error) { + GetKeysForPrefixF: func(string, string) ([]string, error) { return []string{"dpp_cgrates.org:123"}, nil }, }, nil, connMng) diff --git a/dispatchers/dispatchers_test.go b/dispatchers/dispatchers_test.go index 08faff073..676fe74cd 100644 --- a/dispatchers/dispatchers_test.go +++ b/dispatchers/dispatchers_test.go @@ -38,7 +38,7 @@ func TestDispatcherServiceDispatcherProfileForEventGetDispatcherProfileNF(t *tes rpcCl := map[string]chan birpc.ClientConnector{} connMng := engine.NewConnManager(cfg, rpcCl) dm := engine.NewDataManager(&engine.DataDBMock{ - GetKeysForPrefixF: func(string) ([]string, error) { + GetKeysForPrefixF: func(string, string) ([]string, error) { return []string{"dpp_cgrates.org:123"}, nil }, }, nil, connMng) diff --git a/engine/attributes_test.go b/engine/attributes_test.go index 5766a4374..3865027ec 100644 --- a/engine/attributes_test.go +++ b/engine/attributes_test.go @@ -672,7 +672,7 @@ func TestAttributesattributeProfileForEventAnyCtxTrueErrMatching(t *testing.T) { lastID := "" dbm := &DataDBMock{ - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return nil, utils.ErrExists }, } diff --git a/engine/chargers_test.go b/engine/chargers_test.go index 8ef04e8ad..cc08ff6f9 100644 --- a/engine/chargers_test.go +++ b/engine/chargers_test.go @@ -610,7 +610,7 @@ func TestChargersmatchingChargerProfilesForEventErrGetChPrf(t *testing.T) { cfg.ChargerSCfg().NestedFields = false dbm := &DataDBMock{ - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return []string{":"}, nil }, } diff --git a/engine/datadbmock.go b/engine/datadbmock.go index d243bce32..15d35a890 100644 --- a/engine/datadbmock.go +++ b/engine/datadbmock.go @@ -23,7 +23,7 @@ import ( ) type DataDBMock struct { - GetKeysForPrefixF func(string) ([]string, error) + GetKeysForPrefixF func(string, string) ([]string, error) GetChargerProfileDrvF func(string, string) (*ChargerProfile, error) GetFilterDrvF func(string, string) (*Filter, error) GetIndexesDrvF func(idxItmType, tntCtx string, idxKeys ...string) (indexes map[string]utils.StringSet, err error) @@ -65,9 +65,9 @@ func (dbM *DataDBMock) Flush(string) error { return utils.ErrNotImplemented } -func (dbM *DataDBMock) GetKeysForPrefix(prf string) ([]string, error) { +func (dbM *DataDBMock) GetKeysForPrefix(prf string, srch string) ([]string, error) { if dbM.GetKeysForPrefixF != nil { - return dbM.GetKeysForPrefixF(prf) + return dbM.GetKeysForPrefixF(prf, srch) } return nil, utils.ErrNotImplemented } diff --git a/engine/datamanager.go b/engine/datamanager.go index de93ac9f0..3aaadbd27 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -142,7 +142,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b if mustBeCached { ids = Cache.GetItemIDs(utils.CachePrefixToInstance[prfx], utils.EmptyString) } else { - if ids, err = dm.DataDB().GetKeysForPrefix(prfx); err != nil { + if ids, err = dm.DataDB().GetKeysForPrefix(prfx, utils.EmptyString); err != nil { return utils.NewCGRError(utils.DataManager, utils.ServerErrorCaps, err.Error(), @@ -334,7 +334,7 @@ func (dm *DataManager) RebuildReverseForPrefix(prefix string) (err error) { return } var keys []string - if keys, err = dm.dataDB.GetKeysForPrefix(utils.DestinationPrefix); err != nil { + if keys, err = dm.dataDB.GetKeysForPrefix(utils.DestinationPrefix, utils.EmptyString); err != nil { return } for _, key := range keys { @@ -351,7 +351,7 @@ func (dm *DataManager) RebuildReverseForPrefix(prefix string) (err error) { return } var keys []string - if keys, err = dm.dataDB.GetKeysForPrefix(utils.ActionPlanPrefix); err != nil { + if keys, err = dm.dataDB.GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString); err != nil { return } accIDs := make(map[string][]string) @@ -1458,7 +1458,7 @@ func (dm *DataManager) GetTrendProfileIDs(tenants []string) (tps map[string][]st prfx := utils.TrendsProfilePrefix var keys []string if len(tenants) == 0 { - keys, err = dm.dataDB.GetKeysForPrefix(prfx) + keys, err = dm.dataDB.GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return } @@ -1466,7 +1466,7 @@ func (dm *DataManager) GetTrendProfileIDs(tenants []string) (tps map[string][]st for _, tenant := range tenants { var tntkeys []string tntPrfx := prfx + tenant + utils.ConcatenatedKeySep - tntkeys, err = dm.dataDB.GetKeysForPrefix(tntPrfx) + tntkeys, err = dm.dataDB.GetKeysForPrefix(tntPrfx, utils.EmptyString) if err != nil { return } @@ -1598,7 +1598,7 @@ func (dm *DataManager) GetRankingProfileIDs(tenants []string) (rns map[string][] prfx := utils.RankingsProfilePrefix var keys []string if len(tenants) == 0 { - keys, err = dm.dataDB.GetKeysForPrefix(prfx) + keys, err = dm.dataDB.GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return } @@ -1606,7 +1606,7 @@ func (dm *DataManager) GetRankingProfileIDs(tenants []string) (rns map[string][] for _, tenant := range tenants { var tntkeys []string tntPrfx := prfx + tenant + utils.ConcatenatedKeySep - tntkeys, err = dm.dataDB.GetKeysForPrefix(tntPrfx) + tntkeys, err = dm.dataDB.GetKeysForPrefix(tntPrfx, utils.EmptyString) if err != nil { return } diff --git a/engine/filterhelpers.go b/engine/filterhelpers.go index 26c4258c7..7688a11bd 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -50,7 +50,7 @@ func MatchingItemIDsForEvent(ev utils.MapStorage, stringFldIDs, prefixFldIDs, su guardian.Guardian.Guard(func() (_ error) { if !indexedSelects { var keysWithID []string - if keysWithID, err = dm.DataDB().GetKeysForPrefix(utils.CacheIndexesToPrefix[cacheID]); err != nil { + if keysWithID, err = dm.DataDB().GetKeysForPrefix(utils.CacheIndexesToPrefix[cacheID], utils.EmptyString); err != nil { return } var sliceIDs []string diff --git a/engine/libindex.go b/engine/libindex.go index 23642a54a..66c2a6db6 100644 --- a/engine/libindex.go +++ b/engine/libindex.go @@ -429,7 +429,7 @@ func ComputeIndexes(dm *DataManager, tnt, ctx, idxItmType string, IDs *[]string, Cache.Clear([]string{idxItmType}) } var ids []string - if ids, err = dm.DataDB().GetKeysForPrefix(utils.CacheIndexesToPrefix[idxItmType]); err != nil { + if ids, err = dm.DataDB().GetKeysForPrefix(utils.CacheIndexesToPrefix[idxItmType], utils.EmptyString); err != nil { return } for _, id := range ids { diff --git a/engine/libindex_health.go b/engine/libindex_health.go index 026fe2f15..56e6f30ce 100644 --- a/engine/libindex_health.go +++ b/engine/libindex_health.go @@ -102,7 +102,7 @@ func GetAccountActionPlansIndexHealth(dm *DataManager, objLimit, indexLimit int, } var acntIDs []string // start with the indexes and check the references - if acntIDs, err = dm.DataDB().GetKeysForPrefix(utils.AccountActionPlansPrefix); err != nil { + if acntIDs, err = dm.DataDB().GetKeysForPrefix(utils.AccountActionPlansPrefix, utils.EmptyString); err != nil { err = fmt.Errorf("error <%s> querying keys for accountActionPlans", err.Error()) return } @@ -133,7 +133,7 @@ func GetAccountActionPlansIndexHealth(dm *DataManager, objLimit, indexLimit int, } var apIDs []string // we have all the indexes in cache now do a reverse check - if apIDs, err = dm.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix); err != nil { + if apIDs, err = dm.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString); err != nil { err = fmt.Errorf("error <%s> querying keys for actionPlans", err.Error()) return } @@ -219,7 +219,7 @@ func GetReverseDestinationsIndexHealth(dm *DataManager, objLimit, indexLimit int } var prefixes []string // start with the indexes and check the references - if prefixes, err = dm.DataDB().GetKeysForPrefix(utils.ReverseDestinationPrefix); err != nil { + if prefixes, err = dm.DataDB().GetKeysForPrefix(utils.ReverseDestinationPrefix, utils.EmptyString); err != nil { err = fmt.Errorf("error <%s> querying keys for reverseDestinations", err.Error()) return } @@ -249,7 +249,7 @@ func GetReverseDestinationsIndexHealth(dm *DataManager, objLimit, indexLimit int } var dstIDs []string // we have all the indexes in cache now do a reverse check - if dstIDs, err = dm.DataDB().GetKeysForPrefix(utils.DestinationPrefix); err != nil { + if dstIDs, err = dm.DataDB().GetKeysForPrefix(utils.DestinationPrefix, utils.EmptyString); err != nil { err = fmt.Errorf("error <%s> querying keys for destinations", err.Error()) return } @@ -531,7 +531,7 @@ func GetFltrIdxHealth(dm *DataManager, fltrCache, fltrIdxCache, objCache *ltcach } objPrfx := utils.CacheIndexesToPrefix[indxType] var ids []string - if ids, err = dm.dataDB.GetKeysForPrefix(objPrfx); err != nil { + if ids, err = dm.dataDB.GetKeysForPrefix(objPrfx, utils.EmptyString); err != nil { return } missingFltrs := utils.StringSet{} // for checking multiple filters that are missing(to not append the same ID in case) @@ -560,7 +560,7 @@ func GetFltrIdxHealth(dm *DataManager, fltrCache, fltrIdxCache, objCache *ltcach // check the indexes( index->filter->obj relation) idxPrfx := utils.CacheInstanceToPrefix[indxType] var indexKeys []string - if indexKeys, err = dm.dataDB.GetKeysForPrefix(idxPrfx); err != nil { + if indexKeys, err = dm.dataDB.GetKeysForPrefix(idxPrfx, utils.EmptyString); err != nil { return } missingObj := utils.StringSet{} @@ -646,7 +646,7 @@ func getRevFltrIdxHealthFromObj(dm *DataManager, fltrCache, revFltrIdxCache, obj } objPrfx := utils.CacheIndexesToPrefix[indxType] var ids []string - if ids, err = dm.dataDB.GetKeysForPrefix(objPrfx); err != nil { + if ids, err = dm.dataDB.GetKeysForPrefix(objPrfx, utils.EmptyString); err != nil { return } for _, id := range ids { // get all the objects @@ -723,7 +723,7 @@ func getRevFltrIdxHealthFromObj(dm *DataManager, fltrCache, revFltrIdxCache, obj // getRevFltrIdxHealthFromReverse parses the reverse indexes and updates the reply func getRevFltrIdxHealthFromReverse(dm *DataManager, fltrCache, revFltrIdxCache *ltcache.Cache, objCaches map[string]*ltcache.Cache, rply map[string]*ReverseFilterIHReply) (_ map[string]*ReverseFilterIHReply, err error) { var revIndexKeys []string - if revIndexKeys, err = dm.dataDB.GetKeysForPrefix(utils.FilterIndexPrfx); err != nil { + if revIndexKeys, err = dm.dataDB.GetKeysForPrefix(utils.FilterIndexPrfx, utils.EmptyString); err != nil { return } missingObj := utils.StringSet{} diff --git a/engine/stats.go b/engine/stats.go index 24ec878e1..6d8f94081 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -549,7 +549,7 @@ func (sS *StatService) V1GetQueueIDs(ctx *context.Context, tenant string, qIDs * tenant = sS.cgrcfg.GeneralCfg().DefaultTenant } prfx := utils.StatQueuePrefix + tenant + utils.ConcatenatedKeySep - keys, err := sS.dm.DataDB().GetKeysForPrefix(prfx) + keys, err := sS.dm.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } diff --git a/engine/storage_interface.go b/engine/storage_interface.go index e8ec18551..ec3c7a2e6 100644 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -33,7 +33,7 @@ import ( type Storage interface { Close() Flush(string) error - GetKeysForPrefix(string) ([]string, error) + GetKeysForPrefix(string, string) ([]string, error) RemoveKeysForPrefix(string) error GetVersions(itm string) (vrs Versions, err error) SetVersions(vrs Versions, overwrite bool) (err error) diff --git a/engine/storage_internal_datadb.go b/engine/storage_internal_datadb.go index ea50e6309..53671e8f7 100644 --- a/engine/storage_internal_datadb.go +++ b/engine/storage_internal_datadb.go @@ -106,8 +106,9 @@ func (iDB *InternalDB) SelectDatabase(string) (err error) { return nil } -// GetKeysForPrefix returns the keys from cache that have the given prefix -func (iDB *InternalDB) GetKeysForPrefix(prefix string) (ids []string, err error) { +// GetKeysForPrefix returns the keys from cache that have the given prefix. If search is +// populated it will also match the string given in search parameter +func (iDB *InternalDB) GetKeysForPrefix(prefix, search string) (ids []string, err error) { keyLen := len(utils.DestinationPrefix) if len(prefix) < keyLen { err = fmt.Errorf("unsupported prefix in GetKeysForPrefix: %s", prefix) @@ -119,6 +120,15 @@ func (iDB *InternalDB) GetKeysForPrefix(prefix string) (ids []string, err error) for i := range ids { ids[i] = category + ids[i] } + if search != utils.EmptyString { + var matchingIds []string // contains only the ids matching prefix and search + for _, id := range ids { + if strings.Contains(id, search) { + matchingIds = append(matchingIds, id) + } + } + return matchingIds, err + } return } @@ -409,7 +419,7 @@ func (iDB *InternalDB) RemoveActionPlanDrv(key string) (err error) { func (iDB *InternalDB) GetAllActionPlansDrv() (ats map[string]*ActionPlan, err error) { var keys []string - if keys, err = iDB.GetKeysForPrefix(utils.ActionPlanPrefix); err != nil { + if keys, err = iDB.GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString); err != nil { return } diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index de1696dd7..6c9b63c0c 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -25,7 +25,9 @@ import ( "errors" "fmt" "io" + "maps" "reflect" + "regexp" "strings" "sync" "time" @@ -495,14 +497,31 @@ func (ms *MongoStorage) IsDBEmpty() (isEmpty bool, err error) { } func (ms *MongoStorage) getAllKeysMatchingField(sctx mongo.SessionContext, col, prefix, - subject, field string) (keys []string, err error) { + subject, field, search string) (keys []string, err error) { fieldResult := bson.M{} - iter, err := ms.getCol(col).Find(sctx, - bson.M{ - field: primitive.Regex{ - Pattern: subject, - }, + filter := bson.M{ + field: primitive.Regex{ + Pattern: subject, // filter only for subject }, + } + if search != utils.EmptyString { // include search string in the subject filter + filter = bson.M{ + "$and": []bson.M{ + { + field: primitive.Regex{ + Pattern: subject, + }, + }, + { + field: primitive.Regex{ + Pattern: ".*" + regexp.QuoteMeta(search) + ".*", + }, + }, + }, + } + } + iter, err := ms.getCol(col).Find(sctx, + filter, options.Find().SetProjection( bson.M{ field: 1, @@ -523,16 +542,33 @@ func (ms *MongoStorage) getAllKeysMatchingField(sctx mongo.SessionContext, col, } func (ms *MongoStorage) getAllKeysMatchingTenantID(sctx mongo.SessionContext, col, prefix, - subject string, tntID *utils.TenantID) (keys []string, err error) { + subject, search string, tntID *utils.TenantID) (keys []string, err error) { idResult := struct{ Tenant, ID string }{} elem := bson.M{} if tntID.Tenant != "" { elem["tenant"] = tntID.Tenant } + var idOpts []bson.M if tntID.ID != "" { - elem["id"] = primitive.Regex{ - Pattern: subject, - } + idOpts = append(idOpts, bson.M{ + "id": primitive.Regex{Pattern: subject}, + }) + } + if search != utils.EmptyString { + idOpts = append(idOpts, bson.M{ + "id": primitive.Regex{ + Pattern: ".*" + regexp.QuoteMeta(search) + ".*", + }, + }) + } + + switch len(idOpts) { + case 1: + // either id or search is populated + maps.Copy(elem, idOpts[0]) + case 2: + // id and search is populated + elem["$and"] = idOpts } iter, err := ms.getCol(col).Find(sctx, elem, options.Find().SetProjection(bson.M{"tenant": 1, "id": 1}), @@ -576,7 +612,7 @@ func (ms *MongoStorage) getAllIndexKeys(sctx mongo.SessionContext, prefix string } // GetKeysForPrefix retrieves keys matching the specified prefix across different categories. -func (ms *MongoStorage) GetKeysForPrefix(prefix string) (keys []string, err error) { +func (ms *MongoStorage) GetKeysForPrefix(prefix, search string) (keys []string, err error) { var category, subject string keyLen := len(utils.DestinationPrefix) if len(prefix) < keyLen { @@ -589,67 +625,67 @@ func (ms *MongoStorage) GetKeysForPrefix(prefix string) (keys []string, err erro var qryErr error switch category { case utils.DestinationPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColDst, utils.DestinationPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColDst, utils.DestinationPrefix, subject, "key", search) case utils.ReverseDestinationPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRds, utils.ReverseDestinationPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRds, utils.ReverseDestinationPrefix, subject, "key", search) case utils.RatingPlanPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRpl, utils.RatingPlanPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRpl, utils.RatingPlanPrefix, subject, "key", search) case utils.RatingProfilePrefix: if strings.HasPrefix(prefix[keyLen:], utils.MetaOut) { // Rewrite the id as it starts with '*' (from "*out"). subject = "^\\" + prefix[keyLen:] } - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRpf, utils.RatingProfilePrefix, subject, "id") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColRpf, utils.RatingProfilePrefix, subject, "id", search) case utils.ActionPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAct, utils.ActionPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAct, utils.ActionPrefix, subject, "key", search) case utils.ActionPlanPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColApl, utils.ActionPlanPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColApl, utils.ActionPlanPrefix, subject, "key", search) case utils.ActionTriggerPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAtr, utils.ActionTriggerPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAtr, utils.ActionTriggerPrefix, subject, "key", search) case utils.SharedGroupPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColShg, utils.SharedGroupPrefix, subject, "id") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColShg, utils.SharedGroupPrefix, subject, "id", search) case utils.AccountPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAcc, utils.AccountPrefix, subject, "id") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAcc, utils.AccountPrefix, subject, "id", search) case utils.ResourceProfilesPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRsP, utils.ResourceProfilesPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRsP, utils.ResourceProfilesPrefix, subject, search, tntID) case utils.ResourcesPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRes, utils.ResourcesPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRes, utils.ResourcesPrefix, subject, search, tntID) case utils.IPProfilesPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColIPp, utils.IPProfilesPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColIPp, utils.IPProfilesPrefix, subject, search, tntID) case utils.IPAllocationsPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColIPs, utils.IPAllocationsPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColIPs, utils.IPAllocationsPrefix, subject, search, tntID) case utils.StatQueuePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSqs, utils.StatQueuePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSqs, utils.StatQueuePrefix, subject, search, tntID) case utils.RankingsProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRgp, utils.RankingsProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRgp, utils.RankingsProfilePrefix, subject, search, tntID) case utils.TrendsProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTrp, utils.TrendsProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTrp, utils.TrendsProfilePrefix, subject, search, tntID) case utils.StatQueueProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSqp, utils.StatQueueProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColSqp, utils.StatQueueProfilePrefix, subject, search, tntID) case utils.AccountActionPlansPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAAp, utils.AccountActionPlansPrefix, subject, "key") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColAAp, utils.AccountActionPlansPrefix, subject, "key", search) case utils.TimingsPrefix: - keys, qryErr = ms.getAllKeysMatchingField(sctx, ColTmg, utils.TimingsPrefix, subject, "id") + keys, qryErr = ms.getAllKeysMatchingField(sctx, ColTmg, utils.TimingsPrefix, subject, "id", search) case utils.TrendPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTrd, utils.TrendPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTrd, utils.TrendPrefix, subject, search, tntID) case utils.RankingPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRnk, utils.RankingPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRnk, utils.RankingPrefix, subject, search, tntID) case utils.FilterPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColFlt, utils.FilterPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColFlt, utils.FilterPrefix, subject, search, tntID) case utils.ThresholdPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColThs, utils.ThresholdPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColThs, utils.ThresholdPrefix, subject, search, tntID) case utils.ThresholdProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTps, utils.ThresholdProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColTps, utils.ThresholdProfilePrefix, subject, search, tntID) case utils.RouteProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRts, utils.RouteProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColRts, utils.RouteProfilePrefix, subject, search, tntID) case utils.AttributeProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColAttr, utils.AttributeProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColAttr, utils.AttributeProfilePrefix, subject, search, tntID) case utils.ChargerProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColCpp, utils.ChargerProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColCpp, utils.ChargerProfilePrefix, subject, search, tntID) case utils.DispatcherProfilePrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColDpp, utils.DispatcherProfilePrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColDpp, utils.DispatcherProfilePrefix, subject, search, tntID) case utils.DispatcherHostPrefix: - keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColDph, utils.DispatcherHostPrefix, subject, tntID) + keys, qryErr = ms.getAllKeysMatchingTenantID(sctx, ColDph, utils.DispatcherHostPrefix, subject, search, tntID) case utils.AttributeFilterIndexes: keys, qryErr = ms.getAllIndexKeys(sctx, utils.AttributeFilterIndexes) case utils.ResourceFilterIndexes: @@ -1300,7 +1336,7 @@ func (ms *MongoStorage) RemoveActionPlanDrv(key string) error { } func (ms *MongoStorage) GetAllActionPlansDrv() (map[string]*ActionPlan, error) { - keys, err := ms.GetKeysForPrefix(utils.ActionPlanPrefix) + keys, err := ms.GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString) if err != nil { return nil, err } diff --git a/engine/storage_mysql_test.go b/engine/storage_mysql_test.go index 74ad596e0..67290656b 100644 --- a/engine/storage_mysql_test.go +++ b/engine/storage_mysql_test.go @@ -163,7 +163,7 @@ func TestRemoveKeysForPrefix(t *testing.T) { func TestGetKeysForPrefix(t *testing.T) { sqlStorage := SQLStorage{} testPrefix := "1" - keys, err := sqlStorage.GetKeysForPrefix(testPrefix) + keys, err := sqlStorage.GetKeysForPrefix(testPrefix, utils.EmptyString) if err != utils.ErrNotImplemented { t.Errorf("Expected error: %v, got: %v", utils.ErrNotImplemented, err) } diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 3077864d0..56b628527 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -221,7 +221,7 @@ func (rs *RedisStorage) SelectDatabase(dbName string) (err error) { func (rs *RedisStorage) IsDBEmpty() (resp bool, err error) { var keys []string - keys, err = rs.GetKeysForPrefix("") + keys, err = rs.GetKeysForPrefix(utils.EmptyString, utils.EmptyString) if err != nil { return } @@ -233,7 +233,7 @@ func (rs *RedisStorage) IsDBEmpty() (resp bool, err error) { func (rs *RedisStorage) RemoveKeysForPrefix(prefix string) (err error) { var keys []string - if keys, err = rs.GetKeysForPrefix(prefix); err != nil { + if keys, err = rs.GetKeysForPrefix(prefix, utils.EmptyString); err != nil { return } for _, key := range keys { @@ -272,7 +272,9 @@ func (rs *RedisStorage) RebbuildActionPlanKeys() (err error) { return } -func (rs *RedisStorage) GetKeysForPrefix(prefix string) ([]string, error) { +// GetKeysForPrefix returns the keys from redis that have the given prefix. If search is +// populated it will also match the string given in search parameter +func (rs *RedisStorage) GetKeysForPrefix(prefix, search string) ([]string, error) { var keys []string if prefix == utils.ActionPlanPrefix { if err := rs.Cmd(&keys, redis_SMEMBERS, utils.ActionPlanIndexes); err != nil { @@ -281,8 +283,14 @@ func (rs *RedisStorage) GetKeysForPrefix(prefix string) ([]string, error) { } else { // Use SCAN for other prefixes to avoid blocking Redis. var err error - if keys, err = rs.scanKeysForPrefix(prefix); err != nil { - return nil, fmt.Errorf("failed to scan keys for prefix %s: %v", prefix, err) + if search != utils.EmptyString { + if keys, err = rs.scanKeysForPrefixContaining(prefix, search); err != nil { + return nil, fmt.Errorf("failed to scan keys for matching <%s>: %v", search, err) + } + } else { + if keys, err = rs.scanKeysForPrefix(prefix); err != nil { + return nil, fmt.Errorf("failed to scan keys for prefix %s: %v", prefix, err) + } } } if len(keys) == 0 { @@ -294,6 +302,28 @@ func (rs *RedisStorage) GetKeysForPrefix(prefix string) ([]string, error) { return keys, nil } +// scanKeysForPrefixContaining performs a non-blocking scan for keys matching the given prefix and search value. +func (rs *RedisStorage) scanKeysForPrefixContaining(prefix, search string) ([]string, error) { + if search == utils.EmptyString { + return nil, nil + } + var keys []string + scanner := radix.NewScanner(rs.client, radix.ScanOpts{ + Command: redis_SCAN, + Pattern: prefix + utils.Meta + search + utils.Meta, // Match all keys with the given prefix and containing search value + }) + var key string + for scanner.Next(&key) { + if strings.Contains(key, search) { + keys = append(keys, key) + } + } + if err := scanner.Close(); err != nil { + return nil, err + } + return keys, nil +} + // scanKeysWithPrefix performs a non-blocking scan for keys matching the given prefix. func (rs *RedisStorage) scanKeysForPrefix(prefix string) ([]string, error) { var keys []string @@ -725,7 +755,7 @@ func (rs *RedisStorage) SetActionPlanDrv(key string, ats *ActionPlan) (err error func (rs *RedisStorage) GetAllActionPlansDrv() (ats map[string]*ActionPlan, err error) { var keys []string - if keys, err = rs.GetKeysForPrefix(utils.ActionPlanPrefix); err != nil { + if keys, err = rs.GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString); err != nil { return } if len(keys) == 0 { diff --git a/engine/storage_redis_test.go b/engine/storage_redis_test.go index aa33add40..f228c45f5 100644 --- a/engine/storage_redis_test.go +++ b/engine/storage_redis_test.go @@ -25,6 +25,8 @@ import ( "strconv" "testing" "time" + + "github.com/cgrates/cgrates/utils" ) func BenchmarkRedisScan(b *testing.B) { @@ -60,7 +62,7 @@ func BenchmarkRedisScan(b *testing.B) { for _, v := range prfx { b.Run(fmt.Sprintf("test case: prefix = %q", v), func(b *testing.B) { for b.Loop() { - rs.GetKeysForPrefix(v) + rs.GetKeysForPrefix(v, utils.EmptyString) } }) } diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 1c735c2fb..3702c05d8 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -72,7 +72,7 @@ func (rs *SQLStorage) SelectDatabase(dbName string) (err error) { return } -func (sqls *SQLStorage) GetKeysForPrefix(prefix string) ([]string, error) { +func (sqls *SQLStorage) GetKeysForPrefix(prefix, _ string) ([]string, error) { return nil, utils.ErrNotImplemented } diff --git a/engine/thresholds.go b/engine/thresholds.go index c084c3230..3e558daf5 100644 --- a/engine/thresholds.go +++ b/engine/thresholds.go @@ -669,7 +669,7 @@ func (tS *ThresholdService) V1GetThresholdIDs(ctx *context.Context, tenant strin tenant = tS.cgrcfg.GeneralCfg().DefaultTenant } prfx := utils.ThresholdPrefix + tenant + utils.ConcatenatedKeySep - keys, err := tS.dm.DataDB().GetKeysForPrefix(prfx) + keys, err := tS.dm.DataDB().GetKeysForPrefix(prfx, utils.EmptyString) if err != nil { return err } diff --git a/engine/version_test.go b/engine/version_test.go index 2dd1cf236..30f504016 100644 --- a/engine/version_test.go +++ b/engine/version_test.go @@ -144,7 +144,7 @@ func (sM *storageMock) Flush(string) error { return nil } -func (sM *storageMock) GetKeysForPrefix(string) ([]string, error) { +func (sM *storageMock) GetKeysForPrefix(string, string) ([]string, error) { return nil, nil } diff --git a/engine/z_chargers_test.go b/engine/z_chargers_test.go index bdccc96ad..0fdb10906 100644 --- a/engine/z_chargers_test.go +++ b/engine/z_chargers_test.go @@ -45,7 +45,7 @@ func TestChargersmatchingChargerProfilesForEventErrPass(t *testing.T) { FilterIDs: []string{"fltr1"}, }, nil }, - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return []string{s + "cgrates.org:chr1"}, nil }, GetFilterDrvF: func(s1, s2 string) (*Filter, error) { @@ -106,7 +106,7 @@ func TestChargersmatchingChargerProfilesForEventNotActive(t *testing.T) { }, }, nil }, - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return []string{s + "cgrates.org:chr1"}, nil }, GetFilterDrvF: func(s1, s2 string) (*Filter, error) { @@ -164,7 +164,7 @@ func TestChargersprocessEventNoConnIDs(t *testing.T) { FilterIDs: []string{"fltr1"}, }, nil }, - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return []string{s + "cgrates.org:chr1"}, nil }, GetFilterDrvF: func(s1, s2 string) (*Filter, error) { @@ -716,7 +716,7 @@ func TestChargersV1GetChargersForEventErr(t *testing.T) { cfg.ChargerSCfg().IndexedSelects = false dbm := &DataDBMock{ - GetKeysForPrefixF: func(s string) ([]string, error) { + GetKeysForPrefixF: func(s, _ string) ([]string, error) { return []string{":"}, nil }, } diff --git a/engine/z_onstor_it_test.go b/engine/z_onstor_it_test.go index a76efa551..8f42df2be 100644 --- a/engine/z_onstor_it_test.go +++ b/engine/z_onstor_it_test.go @@ -241,7 +241,7 @@ func testOnStorITCacheActionPlan(t *testing.T) { t.Error(err) } expectedCAp := []string{"apl_MORE_MINUTES"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCAp, itm) { t.Errorf("Expected : %+v, but received %+v", expectedCAp, itm) @@ -308,7 +308,7 @@ func testOnStorITCacheActionTriggers(t *testing.T) { t.Error(err) } expectedCAt := []string{"atr_testOnStorITCacheActionTrigger"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCAt, itm) { t.Errorf("Expected : %+v, but received %+v", expectedCAt, itm) @@ -368,7 +368,7 @@ func testOnStorITHasData(t *testing.T) { t.Error(err) } expectedRP := []string{"rpl_HasData"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(len(expectedRP), len(itm)) { t.Errorf("Expected : %+v, but received %+v", len(expectedRP), len(itm)) @@ -475,7 +475,7 @@ func testOnStorITRatingPlan(t *testing.T) { } } expectedRP := []string{"rpl_HasData", "rpl_CRUDRatingPlan"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingPlanPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(len(expectedRP), len(itm)) { t.Errorf("Expected : %+v, but received %+v", len(expectedRP), len(itm)) @@ -571,7 +571,7 @@ func testOnStorITRatingProfile(t *testing.T) { } expectedCRPl := []string{"rpf_*out:test:1:trp"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RatingProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCRPl, itm) { t.Errorf("Expected : %+v, but received %+v", expectedCRPl, itm) @@ -786,7 +786,7 @@ func testOnStorITActions(t *testing.T) { } } expectedCA := []string{"act_MINI"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ActionPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCA, itm) { t.Errorf("Expected : %+v, but received %+v", expectedCA, itm) @@ -1272,7 +1272,7 @@ func testOnStorITResourceProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(rL), utils.ToJSON(rcv)) } expectedR := []string{"rsp_cgrates.org:RL_TEST2"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedR, itm) { t.Errorf("Expected : %+v, but received %+v", expectedR, itm) @@ -1328,7 +1328,7 @@ func testOnStorITResource(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(res), utils.ToJSON(rcv)) } expectedT := []string{"res_cgrates.org:RL1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ResourcesPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ResourcesPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -1388,7 +1388,7 @@ func testOnStorITTiming(t *testing.T) { t.Errorf("Expecting: %v, received: %v", tmg, rcv) } expectedT := []string{"tmg_TEST"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.TimingsPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.TimingsPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -1534,7 +1534,7 @@ func testOnStorITStatQueueProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(sq), utils.ToJSON(rcv)) } expectedR := []string{"sqp_cgrates.org:test"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedR, itm) { t.Errorf("Expected : %+v, but received %+v", expectedR, itm) @@ -1599,7 +1599,7 @@ func testOnStorITStatQueue(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(sq), utils.ToJSON(rcv)) } expectedT := []string{"stq_cgrates.org:Test_StatQueue"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.StatQueuePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.StatQueuePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -1681,7 +1681,7 @@ func testOnStorITThresholdProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(th), utils.ToJSON(rcv)) } expectedR := []string{"thp_cgrates.org:test"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedR, itm) { t.Errorf("Expected : %+v, but received %+v", expectedR, itm) @@ -1731,7 +1731,7 @@ func testOnStorITThreshold(t *testing.T) { t.Errorf("Expecting: %v, received: %v", utils.ToJSON(th), utils.ToJSON(rcv)) } expectedT := []string{"thd_cgrates.org:TH1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ThresholdPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ThresholdPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -1799,7 +1799,7 @@ func testOnStorITFilter(t *testing.T) { t.Errorf("Expecting: %v, received: %v", fp, rcv) } expectedT := []string{"ftr_cgrates.org:Filter1", "ftr_cgrates.org:TestFilter2"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.FilterPrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.FilterPrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(len(expectedT), len(itm)) { t.Errorf("Expected : %+v, but received %+v", len(expectedT), len(itm)) @@ -1898,7 +1898,7 @@ func testOnStorITRouteProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", splProfile, rcv) } expectedT := []string{"rpp_cgrates.org:SPRF_1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RouteProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.RouteProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -1998,7 +1998,7 @@ func testOnStorITAttributeProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", attrProfile, rcv) } expectedT := []string{"alp_cgrates.org:AttrPrf1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -2164,7 +2164,7 @@ func testOnStorITChargerProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", cpp, rcv) } expectedT := []string{"cpp_cgrates.org:CPP_1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) @@ -2219,7 +2219,7 @@ func testOnStorITDispatcherProfile(t *testing.T) { t.Errorf("Expecting: %v, received: %v", dpp, rcv) } expectedT := []string{"dpp_cgrates.org:Dsp1"} - if itm, err := onStor.DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix); err != nil { + if itm, err := onStor.DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix, utils.EmptyString); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedT, itm) { t.Errorf("Expected : %+v, but received %+v", expectedT, itm) diff --git a/migrator/accounts.go b/migrator/accounts.go index e2a8eb2d5..966984f1b 100644 --- a/migrator/accounts.go +++ b/migrator/accounts.go @@ -37,7 +37,7 @@ const ( func (m *Migrator) migrateCurrentAccounts() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AccountPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AccountPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/action.go b/migrator/action.go index 0d9fe7d65..0f41bf414 100644 --- a/migrator/action.go +++ b/migrator/action.go @@ -41,7 +41,7 @@ type v1Actions []*v1Action func (m *Migrator) migrateCurrentActions() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/action_plan.go b/migrator/action_plan.go index 1f2c93e6d..854159116 100644 --- a/migrator/action_plan.go +++ b/migrator/action_plan.go @@ -46,7 +46,7 @@ func (at *v1ActionPlan) IsASAP() bool { func (m *Migrator) migrateCurrentActionPlans() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionPlanPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString) if err != nil { return } diff --git a/migrator/action_trigger.go b/migrator/action_trigger.go index a6606aa29..b829f6383 100644 --- a/migrator/action_trigger.go +++ b/migrator/action_trigger.go @@ -53,7 +53,7 @@ type v1ActionTriggers []*v1ActionTrigger func (m *Migrator) migrateCurrentActionTrigger() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ActionTriggerPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/attributes.go b/migrator/attributes.go index 09ba18fef..59ebbdec7 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -47,7 +47,7 @@ type v1AttributeProfile struct { func (m *Migrator) migrateCurrentAttributeProfile() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/chargers.go b/migrator/chargers.go index fc28e5566..b9f23820c 100644 --- a/migrator/chargers.go +++ b/migrator/chargers.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentCharger() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/destinations.go b/migrator/destinations.go index e9dfa5ede..a51141d92 100644 --- a/migrator/destinations.go +++ b/migrator/destinations.go @@ -28,7 +28,7 @@ import ( func (m *Migrator) migrateCurrentDestinations() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DestinationPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DestinationPrefix, utils.EmptyString) if err != nil { return err } @@ -95,7 +95,7 @@ func (m *Migrator) migrateDestinations() (err error) { func (m *Migrator) migrateCurrentReverseDestinations() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ReverseDestinationPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ReverseDestinationPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/dispatchers.go b/migrator/dispatchers.go index 8d805c794..b8fbe81d8 100644 --- a/migrator/dispatchers.go +++ b/migrator/dispatchers.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentDispatcher() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix, utils.EmptyString) if err != nil { return } @@ -59,7 +59,7 @@ func (m *Migrator) migrateCurrentDispatcher() (err error) { func (m *Migrator) migrateCurrentDispatcherHost() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherHostPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherHostPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/filters.go b/migrator/filters.go index c234e54e6..f18a4ae45 100644 --- a/migrator/filters.go +++ b/migrator/filters.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentRequestFilter() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.FilterPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.FilterPrefix, utils.EmptyString) if err != nil { return } @@ -361,7 +361,7 @@ func (m *Migrator) migrateFilters() (err error) { func (m *Migrator) migrateResourceProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix, utils.EmptyString) if err != nil { return err } @@ -390,7 +390,7 @@ func (m *Migrator) migrateResourceProfileFiltersV1() (err error) { func (m *Migrator) migrateStatQueueProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix, utils.EmptyString) if err != nil { return err } @@ -419,7 +419,7 @@ func (m *Migrator) migrateStatQueueProfileFiltersV1() (err error) { func (m *Migrator) migrateThresholdsProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString) if err != nil { return err } @@ -473,7 +473,7 @@ func (m *Migrator) migrateSupplierProfileFiltersV1() (err error) { func (m *Migrator) migrateAttributeProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return err } @@ -512,7 +512,7 @@ func (m *Migrator) migrateAttributeProfileFiltersV1() (err error) { func (m *Migrator) migrateChargerProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix, utils.EmptyString) if err != nil { return err } @@ -541,7 +541,7 @@ func (m *Migrator) migrateChargerProfileFiltersV1() (err error) { func (m *Migrator) migrateDispatcherProfileFiltersV1() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix, utils.EmptyString) if err != nil { return err } @@ -571,7 +571,7 @@ func (m *Migrator) migrateDispatcherProfileFiltersV1() (err error) { // migrate filters from v2 to v3 for items func (m *Migrator) migrateResourceProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting resource profile IDs", err.Error()) } @@ -602,7 +602,7 @@ func (m *Migrator) migrateResourceProfileFiltersV2() (err error) { func (m *Migrator) migrateStatQueueProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting statQueue profile IDs", err.Error()) } @@ -633,7 +633,7 @@ func (m *Migrator) migrateStatQueueProfileFiltersV2() (err error) { func (m *Migrator) migrateThresholdsProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting threshold profile IDs", err) } @@ -690,7 +690,7 @@ func (m *Migrator) migrateSupplierProfileFiltersV2() (err error) { func (m *Migrator) migrateAttributeProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting attribute profile IDs", err) } @@ -731,7 +731,7 @@ func (m *Migrator) migrateAttributeProfileFiltersV2() (err error) { func (m *Migrator) migrateChargerProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting charger profile IDs", err) } @@ -762,7 +762,7 @@ func (m *Migrator) migrateChargerProfileFiltersV2() (err error) { func (m *Migrator) migrateDispatcherProfileFiltersV2() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix, utils.EmptyString) if err != nil { return fmt.Errorf("error: <%s> when getting dispatcher profile IDs", err) } diff --git a/migrator/rating_plan.go b/migrator/rating_plan.go index 9a5201f0f..75357e7f6 100644 --- a/migrator/rating_plan.go +++ b/migrator/rating_plan.go @@ -28,7 +28,7 @@ import ( func (m *Migrator) migrateCurrentRatingPlans() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RatingPlanPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RatingPlanPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/rating_profile.go b/migrator/rating_profile.go index 07e986e4d..10e7f4c97 100644 --- a/migrator/rating_profile.go +++ b/migrator/rating_profile.go @@ -28,7 +28,7 @@ import ( func (m *Migrator) migrateCurrentRatingProfiles() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RatingProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RatingProfilePrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/resource.go b/migrator/resource.go index 0be4c0d6a..19c831baa 100644 --- a/migrator/resource.go +++ b/migrator/resource.go @@ -28,7 +28,7 @@ import ( func (m *Migrator) migrateCurrentResource() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/routes.go b/migrator/routes.go index 2bdaf447e..ca50b346c 100644 --- a/migrator/routes.go +++ b/migrator/routes.go @@ -110,7 +110,7 @@ func (m *Migrator) migrateFromSupplierToRoute() (err error) { func (m *Migrator) migrateCurrentRouteProfile() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RouteProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RouteProfilePrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/sharedgroup.go b/migrator/sharedgroup.go index 8e4dfa395..66b37b609 100644 --- a/migrator/sharedgroup.go +++ b/migrator/sharedgroup.go @@ -34,7 +34,7 @@ type v1SharedGroup struct { func (m *Migrator) migrateCurrentSharedGroups() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.SharedGroupPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.SharedGroupPrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/stats.go b/migrator/stats.go index 823391455..43a92d503 100644 --- a/migrator/stats.go +++ b/migrator/stats.go @@ -61,7 +61,7 @@ type v1Stat struct { func (m *Migrator) migrateCurrentStats() (err error) { //StatQueueProfile var ids []string - if ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix); err != nil { + if ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix, utils.EmptyString); err != nil { return err } for _, id := range ids { diff --git a/migrator/storage_redis.go b/migrator/storage_redis.go index 03d7245c4..f3e8366ab 100644 --- a/migrator/storage_redis.go +++ b/migrator/storage_redis.go @@ -56,7 +56,7 @@ func (v1rs *redisMigrator) DataManager() *engine.DataManager { // get func (v1rs *redisMigrator) getv1Account() (v1Acnt *v1Account, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(v1AccountDBPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(v1AccountDBPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -104,7 +104,7 @@ func (v1rs *redisMigrator) remV1Account(id string) (err error) { // get func (v1rs *redisMigrator) getv2Account() (v2Acnt *v2Account, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AccountPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AccountPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -152,7 +152,7 @@ func (v1rs *redisMigrator) remV2Account(id string) (err error) { // get func (v1rs *redisMigrator) getV1ActionPlans() (v1aps *v1ActionPlans, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionPlanPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionPlanPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -199,7 +199,7 @@ func (v1rs *redisMigrator) remV1ActionPlans(x *v1ActionPlans) (err error) { // get func (v1rs *redisMigrator) getV1Actions() (v1acs *v1Actions, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -247,7 +247,7 @@ func (v1rs *redisMigrator) remV1Actions(x v1Actions) (err error) { // get func (v1rs *redisMigrator) getV1ActionTriggers() (v1acts *v1ActionTriggers, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionTriggerPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionTriggerPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -294,7 +294,7 @@ func (v1rs *redisMigrator) remV1ActionTriggers(x *v1ActionTriggers) (err error) // get func (v1rs *redisMigrator) getV1SharedGroup() (v1sg *v1SharedGroup, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.SharedGroupPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.SharedGroupPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -335,7 +335,7 @@ func (v1rs *redisMigrator) setV1SharedGroup(x *v1SharedGroup) (err error) { // get func (v1rs *redisMigrator) getV1Stats() (v1st *v1Stat, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.CDRsStatsPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.CDRsStatsPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -361,7 +361,7 @@ func (v1rs *redisMigrator) getV1Stats() (v1st *v1Stat, err error) { func (v1rs *redisMigrator) getV3Stats() (v1st *engine.StatQueueProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.StatQueueProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.StatQueueProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -401,7 +401,7 @@ func (v1rs *redisMigrator) setV1Stats(x *v1Stat) (err error) { // get func (v1rs *redisMigrator) getV2Stats() (v2 *engine.StatQueue, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.StatQueuePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.StatQueuePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -442,7 +442,7 @@ func (v1rs *redisMigrator) setV2Stats(v2 *engine.StatQueue) (err error) { // get func (v1rs *redisMigrator) getV2ActionTrigger() (v2at *v2ActionTrigger, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionTriggerPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ActionTriggerPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -484,7 +484,7 @@ func (v1rs *redisMigrator) setV2ActionTrigger(x *v2ActionTrigger) (err error) { func (v1rs *redisMigrator) getV1AttributeProfile() (v1attrPrf *v1AttributeProfile, err error) { var v1attr *v1AttributeProfile if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -526,7 +526,7 @@ func (v1rs *redisMigrator) setV1AttributeProfile(x *v1AttributeProfile) (err err func (v1rs *redisMigrator) getV2ThresholdProfile() (v2T *v2Threshold, err error) { var v2Th *v2Threshold if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ThresholdProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -552,7 +552,7 @@ func (v1rs *redisMigrator) getV2ThresholdProfile() (v2T *v2Threshold, err error) func (v1rs *redisMigrator) getV3ThresholdProfile() (v2T *engine.ThresholdProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ThresholdProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -600,7 +600,7 @@ func (v1rs *redisMigrator) remV2ThresholdProfile(tenant, id string) (err error) func (v1rs *redisMigrator) getV1Alias() (v1a *v1Alias, err error) { v1a = &v1Alias{Values: make(v1AliasValues, 0)} if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(AliasesPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(AliasesPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -684,7 +684,7 @@ func (v1rs *redisMigrator) remV1Alias(key string) (err error) { // get func (v1rs *redisMigrator) getV1User() (v1u *v1UserProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.UsersPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.UsersPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -726,7 +726,7 @@ func (v1rs *redisMigrator) remV1User(key string) (err error) { // get func (v1rs *redisMigrator) getV1DerivedChargers() (v1d *v1DerivedChargersWithKey, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.DerivedChargersPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.DerivedChargersPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -774,7 +774,7 @@ func (v1rs *redisMigrator) remV1DerivedChargers(key string) (err error) { func (v1rs *redisMigrator) getV2AttributeProfile() (v2attrPrf *v2AttributeProfile, err error) { var v2attr *v2AttributeProfile if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -822,7 +822,7 @@ func (v1rs *redisMigrator) remV2AttributeProfile(tenant, id string) (err error) func (v1rs *redisMigrator) getV3AttributeProfile() (v3attrPrf *v3AttributeProfile, err error) { var v3attr *v3AttributeProfile if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -870,7 +870,7 @@ func (v1rs *redisMigrator) remV3AttributeProfile(tenant, id string) (err error) func (v1rs *redisMigrator) getV4AttributeProfile() (v3attrPrf *v4AttributeProfile, err error) { var v4attr *v4AttributeProfile if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -896,7 +896,7 @@ func (v1rs *redisMigrator) getV4AttributeProfile() (v3attrPrf *v4AttributeProfil func (v1rs *redisMigrator) getV5AttributeProfile() (v5attr *engine.AttributeProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.AttributeProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -943,7 +943,7 @@ func (v1rs *redisMigrator) remV4AttributeProfile(tenant, id string) (err error) // get func (v1rs *redisMigrator) getV1Filter() (v1Fltr *v1Filter, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.FilterPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.FilterPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -969,7 +969,7 @@ func (v1rs *redisMigrator) getV1Filter() (v1Fltr *v1Filter, err error) { func (v1rs *redisMigrator) getV4Filter() (v4Fltr *engine.Filter, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.FilterPrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.FilterPrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -1012,7 +1012,7 @@ func (v1rs *redisMigrator) remV1Filter(tenant, id string) (err error) { // SupplierMethods func (v1rs *redisMigrator) getSupplier() (spl *SupplierProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(SupplierProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(SupplierProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -1057,7 +1057,7 @@ func (v1rs *redisMigrator) remSupplier(tenant, id string) (err error) { func (v1rs *redisMigrator) getV1ChargerProfile() (v1chrPrf *engine.ChargerProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ChargerProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.ChargerProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -1083,7 +1083,7 @@ func (v1rs *redisMigrator) getV1ChargerProfile() (v1chrPrf *engine.ChargerProfil func (v1rs *redisMigrator) getV1DispatcherProfile() (v1chrPrf *engine.DispatcherProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.DispatcherProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.DispatcherProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { @@ -1109,7 +1109,7 @@ func (v1rs *redisMigrator) getV1DispatcherProfile() (v1chrPrf *engine.Dispatcher func (v1rs *redisMigrator) getV1RouteProfile() (v1chrPrf *engine.RouteProfile, err error) { if v1rs.qryIdx == nil { - v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.RouteProfilePrefix) + v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(utils.RouteProfilePrefix, utils.EmptyString) if err != nil { return } else if len(v1rs.dataKeys) == 0 { diff --git a/migrator/thresholds.go b/migrator/thresholds.go index 5aa88189a..716c12c7a 100644 --- a/migrator/thresholds.go +++ b/migrator/thresholds.go @@ -56,7 +56,7 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { } //ThresholdProfiles - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix, utils.EmptyString) if err != nil { return err } diff --git a/migrator/timings.go b/migrator/timings.go index ef6c0d91a..ae89c02d2 100644 --- a/migrator/timings.go +++ b/migrator/timings.go @@ -28,7 +28,7 @@ import ( func (m *Migrator) migrateCurrentTiming() (err error) { var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.TimingsPrefix) + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.TimingsPrefix, utils.EmptyString) if err != nil { return err } diff --git a/utils/coreutils.go b/utils/coreutils.go index 56c653411..c8d051d04 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -809,6 +809,7 @@ func NewTenantID(input string) *TenantID { type PaginatorWithTenant struct { Tenant string + Search string // Global matching pattern in items returned, partially used in some APIs Paginator }