From 41b0e75e9775b5bc6f9823511dc9a47a5198b513 Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 28 Dec 2016 14:37:36 +0100 Subject: [PATCH] StorageMongo - add missing GetPrefixForKey methods --- engine/storage_mongo_datadb.go | 54 ++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index e714744d2..39211b8a9 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -514,16 +514,14 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached return } -func (ms *MongoStorage) GetKeysForPrefix(prefix string) ([]string, error) { +func (ms *MongoStorage) GetKeysForPrefix(prefix string) (result []string, err error) { var category, subject string - length := len(utils.DESTINATION_PREFIX) - if len(prefix) >= length { - category = prefix[:length] // prefix lenght - subject = fmt.Sprintf("^%s", prefix[length:]) - } else { + keyLen := len(utils.DESTINATION_PREFIX) + if len(prefix) < keyLen { return nil, fmt.Errorf("unsupported prefix in GetKeysForPrefix: %s", prefix) } - var result []string + category = prefix[:keyLen] // prefix lenght + subject = fmt.Sprintf("^%s", prefix[keyLen:]) session := ms.session.Copy() defer session.Close() db := session.DB(ms.db) @@ -535,51 +533,75 @@ func (ms *MongoStorage) GetKeysForPrefix(prefix string) ([]string, error) { for iter.Next(&keyResult) { result = append(result, utils.DESTINATION_PREFIX+keyResult.Key) } - return result, nil + case utils.REVERSE_DESTINATION_PREFIX: + iter := db.C(colRds).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() + for iter.Next(&keyResult) { + result = append(result, utils.REVERSE_DESTINATION_PREFIX+keyResult.Key) + } case utils.RATING_PLAN_PREFIX: iter := db.C(colRpl).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() for iter.Next(&keyResult) { result = append(result, utils.RATING_PLAN_PREFIX+keyResult.Key) } - return result, nil case utils.RATING_PROFILE_PREFIX: iter := db.C(colRpf).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() for iter.Next(&idResult) { result = append(result, utils.RATING_PROFILE_PREFIX+idResult.Id) } - return result, nil case utils.ACTION_PREFIX: iter := db.C(colAct).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() for iter.Next(&keyResult) { result = append(result, utils.ACTION_PREFIX+keyResult.Key) } - return result, nil case utils.ACTION_PLAN_PREFIX: iter := db.C(colApl).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() for iter.Next(&keyResult) { result = append(result, utils.ACTION_PLAN_PREFIX+keyResult.Key) } - return result, nil case utils.ACTION_TRIGGER_PREFIX: iter := db.C(colAtr).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() for iter.Next(&keyResult) { result = append(result, utils.ACTION_TRIGGER_PREFIX+keyResult.Key) } - return result, nil + case utils.SHARED_GROUP_PREFIX: + iter := db.C(colShg).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() + for iter.Next(&idResult) { + result = append(result, utils.SHARED_GROUP_PREFIX+idResult.Id) + } + case utils.DERIVEDCHARGERS_PREFIX: + iter := db.C(colDcs).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() + for iter.Next(&keyResult) { + result = append(result, utils.DERIVEDCHARGERS_PREFIX+keyResult.Key) + } + case utils.LCR_PREFIX: + iter := db.C(colLcr).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() + for iter.Next(&keyResult) { + result = append(result, utils.LCR_PREFIX+keyResult.Key) + } case utils.ACCOUNT_PREFIX: iter := db.C(colAcc).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() for iter.Next(&idResult) { result = append(result, utils.ACCOUNT_PREFIX+idResult.Id) } - return result, nil case utils.ALIASES_PREFIX: iter := db.C(colAls).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() for iter.Next(&keyResult) { result = append(result, utils.ACTION_PLAN_PREFIX+keyResult.Key) } - return result, nil + case utils.REVERSE_ALIASES_PREFIX: + iter := db.C(colRls).Find(bson.M{"key": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"key": 1}).Iter() + for iter.Next(&keyResult) { + result = append(result, utils.REVERSE_ALIASES_PREFIX+keyResult.Key) + } + case utils.ResourceLimitsPrefix: + iter := db.C(colRL).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() + for iter.Next(&idResult) { + result = append(result, utils.ResourceLimitsPrefix+idResult.Id) + } + default: + err = fmt.Errorf("unsupported prefix in GetKeysForPrefix: %s", prefix) } - return result, fmt.Errorf("unsupported prefix in GetKeysForPrefix: %s", prefix) + return } func (ms *MongoStorage) HasData(category, subject string) (bool, error) {