func TestSMSLoadCsvTpSmsChrg1(t *testing.T) { timings := `ALWAYS,*any,*any,*any,*any,00:00:00` rates := `RT_SMS_5c,0,0.005,1,1,0` destinationRates := `DR_SMS_1,*any,RT_SMS_5c,*up,4,0,` ratingPlans := `RP_SMS1,DR_SMS_1,ALWAYS,10` ratingProfiles := `*out,cgrates.org,sms,*any,2012-01-01T00:00:00Z,RP_SMS1,,` csvr := engine.NewTpReader(ratingDb, acntDb, engine.NewStringCSVStorage(',', "", timings, rates, destinationRates, ratingPlans, ratingProfiles, "", "", "", "", "", "", "", "", "", "", ""), "", "") if err := csvr.LoadTimings(); err != nil { t.Fatal(err) } if err := csvr.LoadRates(); err != nil { t.Fatal(err) } if err := csvr.LoadDestinationRates(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingPlans(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingProfiles(); err != nil { t.Fatal(err) } csvr.WriteToDatabase(false, false, false) cache2go.Flush() ratingDb.PreloadRatingCache() acntDb.PreloadAccountingCache() if cachedRPlans := cache2go.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 { t.Error("Wrong number of cached rating plans found", cachedRPlans) } if cachedRProfiles := cache2go.CountEntries(utils.RATING_PROFILE_PREFIX); cachedRProfiles != 0 { t.Error("Wrong number of cached rating profiles found", cachedRProfiles) } }
func TestCosts1LoadCsvTp(t *testing.T) { timings := `ALWAYS,*any,*any,*any,*any,00:00:00 ASAP,*any,*any,*any,*any,*asap` dests := `GERMANY,+49 GERMANY_MOBILE,+4915 GERMANY_MOBILE,+4916 GERMANY_MOBILE,+4917` rates := `RT_1CENT,0,1,1s,1s,0s RT_DATA_2c,0,0.002,10,10,0 RT_SMS_5c,0,0.005,1,1,0` destinationRates := `DR_RETAIL,GERMANY,RT_1CENT,*up,4,0, DR_RETAIL,GERMANY_MOBILE,RT_1CENT,*up,4,0, DR_DATA_1,*any,RT_DATA_2c,*up,4,0, DR_SMS_1,*any,RT_SMS_5c,*up,4,0,` ratingPlans := `RP_RETAIL,DR_RETAIL,ALWAYS,10 RP_DATA1,DR_DATA_1,ALWAYS,10 RP_SMS1,DR_SMS_1,ALWAYS,10` ratingProfiles := `*out,cgrates.org,call,*any,2012-01-01T00:00:00Z,RP_RETAIL,, *out,cgrates.org,data,*any,2012-01-01T00:00:00Z,RP_DATA1,, *out,cgrates.org,sms,*any,2012-01-01T00:00:00Z,RP_SMS1,,` csvr := engine.NewTpReader(ratingDb, acntDb, engine.NewStringCSVStorage(',', dests, timings, rates, destinationRates, ratingPlans, ratingProfiles, "", "", "", "", "", "", "", "", "", "", ""), "", "") if err := csvr.LoadTimings(); err != nil { t.Fatal(err) } if err := csvr.LoadDestinations(); err != nil { t.Fatal(err) } if err := csvr.LoadRates(); err != nil { t.Fatal(err) } if err := csvr.LoadDestinationRates(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingPlans(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingProfiles(); err != nil { t.Fatal(err) } csvr.WriteToDatabase(false, false, false) cache2go.Flush() ratingDb.PreloadRatingCache() acntDb.PreloadAccountingCache() if cachedRPlans := cache2go.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 3 { t.Error("Wrong number of cached rating plans found", cachedRPlans) } if cachedRProfiles := cache2go.CountEntries(utils.RATING_PROFILE_PREFIX); cachedRProfiles != 0 { t.Error("Wrong number of cached rating profiles found", cachedRProfiles) } }
func TestAuthLoadCsv(t *testing.T) { timings := `` destinations := `DST_GERMANY_LANDLINE,49` rates := `RT_1CENTWITHCF,0.02,0.01,60s,60s,0s` destinationRates := `DR_GERMANY,DST_GERMANY_LANDLINE,RT_1CENTWITHCF,*up,8,, DR_ANY_1CNT,*any,RT_1CENTWITHCF,*up,8,,` ratingPlans := `RP_1,DR_GERMANY,*any,10 RP_ANY,DR_ANY_1CNT,*any,10` ratingProfiles := `*out,cgrates.org,call,testauthpostpaid1,2013-01-06T00:00:00Z,RP_1,, *out,cgrates.org,call,testauthpostpaid2,2013-01-06T00:00:00Z,RP_1,*any, *out,cgrates.org,call,*any,2013-01-06T00:00:00Z,RP_ANY,,` sharedGroups := `` lcrs := `` actions := `TOPUP10_AC,*topup_reset,,,,*monetary,*out,,*any,,,*unlimited,,0,10,false,false,10` actionPlans := `TOPUP10_AT,TOPUP10_AC,*asap,10` actionTriggers := `` accountActions := `cgrates.org,testauthpostpaid1,TOPUP10_AT,,,` derivedCharges := `` cdrStats := `` users := `` aliases := `` resLimits := `` csvr := engine.NewTpReader(ratingDbAuth, acntDbAuth, engine.NewStringCSVStorage(',', destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, lcrs, actions, actionPlans, actionTriggers, accountActions, derivedCharges, cdrStats, users, aliases, resLimits), "", "") if err := csvr.LoadAll(); err != nil { t.Fatal(err) } csvr.WriteToDatabase(false, false, false) if acnt, err := acntDbAuth.GetAccount("cgrates.org:testauthpostpaid1"); err != nil { t.Error(err) } else if acnt == nil { t.Error("No account saved") } cache2go.Flush() ratingDbAuth.PreloadRatingCache() acntDbAuth.PreloadAccountingCache() if cachedDests := cache2go.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 { t.Error("Wrong number of cached destinations found", cachedDests) } if cachedRPlans := cache2go.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 2 { t.Error("Wrong number of cached rating plans found", cachedRPlans) } if cachedRProfiles := cache2go.CountEntries(utils.RATING_PROFILE_PREFIX); cachedRProfiles != 0 { t.Error("Wrong number of cached rating profiles found", cachedRProfiles) } if cachedActions := cache2go.CountEntries(utils.ACTION_PREFIX); cachedActions != 0 { t.Error("Wrong number of cached actions found", cachedActions) } }
func (self *ApierV1) GetCacheStats(attrs utils.AttrCacheStats, reply *utils.CacheStats) error { cs := new(utils.CacheStats) cs.Destinations = cache2go.CountEntries(engine.DESTINATION_PREFIX) cs.RatingPlans = cache2go.CountEntries(engine.RATING_PLAN_PREFIX) cs.RatingProfiles = cache2go.CountEntries(engine.RATING_PROFILE_PREFIX) cs.Actions = cache2go.CountEntries(engine.ACTION_PREFIX) cs.SharedGroups = cache2go.CountEntries(engine.SHARED_GROUP_PREFIX) cs.RatingAliases = cache2go.CountEntries(engine.RP_ALIAS_PREFIX) cs.AccountAliases = cache2go.CountEntries(engine.ACC_ALIAS_PREFIX) cs.DerivedChargers = cache2go.CountEntries(engine.DERIVEDCHARGERS_PREFIX) *reply = *cs return nil }
func TestLoadCsvTpDtChrg1(t *testing.T) { timings := `TM1,*any,*any,*any,*any,00:00:00 TM2,*any,*any,*any,*any,01:00:00` rates := `RT_DATA_2c,0,0.002,10,10,0 RT_DATA_1c,0,0.001,10,10,0` destinationRates := `DR_DATA_1,*any,RT_DATA_2c,*up,4,0, DR_DATA_2,*any,RT_DATA_1c,*up,4,0,` ratingPlans := `RP_DATA1,DR_DATA_1,TM1,10 RP_DATA1,DR_DATA_2,TM2,10` ratingProfiles := `*out,cgrates.org,data,*any,2012-01-01T00:00:00Z,RP_DATA1,,` csvr := engine.NewTpReader(ratingDb, acntDb, engine.NewStringCSVStorage(',', "", timings, rates, destinationRates, ratingPlans, ratingProfiles, "", "", "", "", "", "", "", "", "", ""), "", "", 10) if err := csvr.LoadTimings(); err != nil { t.Fatal(err) } if err := csvr.LoadRates(); err != nil { t.Fatal(err) } if err := csvr.LoadDestinationRates(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingPlans(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingProfiles(); err != nil { t.Fatal(err) } csvr.WriteToDatabase(false, false) ratingDb.CacheRatingAll() acntDb.CacheAccountingAll() if cachedRPlans := cache2go.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 { t.Error("Wrong number of cached rating plans found", cachedRPlans) } if cachedRProfiles := cache2go.CountEntries(utils.RATING_PROFILE_PREFIX); cachedRProfiles != 1 { t.Error("Wrong number of cached rating profiles found", cachedRProfiles) } }
func (self *ApierV1) GetCacheStats(attrs utils.AttrCacheStats, reply *utils.CacheStats) error { cs := new(utils.CacheStats) cs.Destinations = cache2go.CountEntries(utils.DESTINATION_PREFIX) cs.RatingPlans = cache2go.CountEntries(utils.RATING_PLAN_PREFIX) cs.RatingProfiles = cache2go.CountEntries(utils.RATING_PROFILE_PREFIX) cs.Actions = cache2go.CountEntries(utils.ACTION_PREFIX) cs.ActionPlans = cache2go.CountEntries(utils.ACTION_PLAN_PREFIX) cs.SharedGroups = cache2go.CountEntries(utils.SHARED_GROUP_PREFIX) cs.DerivedChargers = cache2go.CountEntries(utils.DERIVEDCHARGERS_PREFIX) cs.LcrProfiles = cache2go.CountEntries(utils.LCR_PREFIX) cs.Aliases = cache2go.CountEntries(utils.ALIASES_PREFIX) if self.CdrStatsSrv != nil && self.Config.CDRStatsEnabled { var queueIds []string if err := self.CdrStatsSrv.GetQueueIds(0, &queueIds); err != nil { return utils.NewErrServerError(err) } cs.CdrStats = len(queueIds) } if self.Config.RaterUserServer == utils.INTERNAL { var ups engine.UserProfiles if err := self.Users.GetUsers(engine.UserProfile{}, &ups); err != nil { return utils.NewErrServerError(err) } cs.Users = len(ups) } if loadHistInsts, err := self.AccountDb.GetLoadHistory(1, false); err != nil || len(loadHistInsts) == 0 { if err != nil { // Not really an error here since we only count in cache utils.Logger.Err(fmt.Sprintf("ApierV1.GetCacheStats, error on GetLoadHistory: %s", err.Error())) } cs.LastLoadId = utils.NOT_AVAILABLE cs.LastLoadTime = utils.NOT_AVAILABLE } else { cs.LastLoadId = loadHistInsts[0].LoadId cs.LastLoadTime = loadHistInsts[0].LoadTime.Format(time.RFC3339) } *reply = *cs return nil }
func TestLoadCsvTp2(t *testing.T) { timings := `ALWAYS,*any,*any,*any,*any,00:00:00 ASAP,*any,*any,*any,*any,*asap` destinations := `DST_UK_Mobile_BIG5,447596 DST_UK_Mobile_BIG5,447956` rates := `RT_UK_Mobile_BIG5_PKG,0.01,0,20s,20s,0s RT_UK_Mobile_BIG5,0.01,0.10,1s,1s,0s` destinationRates := `DR_UK_Mobile_BIG5_PKG,DST_UK_Mobile_BIG5,RT_UK_Mobile_BIG5_PKG,*up,8,0, DR_UK_Mobile_BIG5,DST_UK_Mobile_BIG5,RT_UK_Mobile_BIG5,*up,8,0,` ratingPlans := `RP_UK_Mobile_BIG5_PKG,DR_UK_Mobile_BIG5_PKG,ALWAYS,10 RP_UK,DR_UK_Mobile_BIG5,ALWAYS,10` ratingProfiles := `*out,cgrates.org,call,*any,2013-01-06T00:00:00Z,RP_UK,, *out,cgrates.org,call,discounted_minutes,2013-01-06T00:00:00Z,RP_UK_Mobile_BIG5_PKG,,` sharedGroups := `` lcrs := `` actions := `TOPUP10_AC,*topup_reset,,,,*monetary,*out,,*any,,,*unlimited,,0,10,false,false,10 TOPUP10_AC1,*topup_reset,,,,*voice,*out,,DST_UK_Mobile_BIG5,discounted_minutes,,*unlimited,,40,10,false,false,10` actionPlans := `TOPUP10_AT,TOPUP10_AC,ASAP,10 TOPUP10_AT,TOPUP10_AC1,ASAP,10` actionTriggers := `` accountActions := `cgrates.org,12345,TOPUP10_AT,,,` derivedCharges := `` cdrStats := `` users := `` aliases := `` csvr := engine.NewTpReader(ratingDb2, acntDb2, engine.NewStringCSVStorage(',', destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, sharedGroups, lcrs, actions, actionPlans, actionTriggers, accountActions, derivedCharges, cdrStats, users, aliases), "", "", 10) if err := csvr.LoadDestinations(); err != nil { t.Fatal(err) } if err := csvr.LoadTimings(); err != nil { t.Fatal(err) } if err := csvr.LoadRates(); err != nil { t.Fatal(err) } if err := csvr.LoadDestinationRates(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingPlans(); err != nil { t.Fatal(err) } if err := csvr.LoadRatingProfiles(); err != nil { t.Fatal(err) } if err := csvr.LoadSharedGroups(); err != nil { t.Fatal(err) } if err := csvr.LoadLCRs(); err != nil { t.Fatal(err) } if err := csvr.LoadActions(); err != nil { t.Fatal(err) } if err := csvr.LoadActionPlans(); err != nil { t.Fatal(err) } if err := csvr.LoadActionTriggers(); err != nil { t.Fatal(err) } if err := csvr.LoadAccountActions(); err != nil { t.Fatal(err) } if err := csvr.LoadDerivedChargers(); err != nil { t.Fatal(err) } csvr.WriteToDatabase(false, false) if acnt, err := acntDb2.GetAccount("cgrates.org:12345"); err != nil { t.Error(err) } else if acnt == nil { t.Error("No account saved") } ratingDb2.CacheRatingAll() acntDb2.CacheAccountingAll() if cachedDests := cache2go.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 2 { t.Error("Wrong number of cached destinations found", cachedDests) } if cachedRPlans := cache2go.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 2 { t.Error("Wrong number of cached rating plans found", cachedRPlans) } if cachedRProfiles := cache2go.CountEntries(utils.RATING_PROFILE_PREFIX); cachedRProfiles != 2 { t.Error("Wrong number of cached rating profiles found", cachedRProfiles) } if cachedActions := cache2go.CountEntries(utils.ACTION_PREFIX); cachedActions != 2 { t.Error("Wrong number of cached actions found", cachedActions) } }
func (ms *MongoStorage) cacheRating(dKeys, rpKeys, rpfKeys, lcrKeys, dcsKeys, actKeys, shgKeys []string) (err error) { cache2go.BeginTransaction() keyResult := struct{ Key string }{} idResult := struct{ Id string }{} if dKeys == nil || (float64(cache2go.CountEntries(utils.DESTINATION_PREFIX))*utils.DESTINATIONS_LOAD_THRESHOLD < float64(len(dKeys))) { // if need to load more than a half of exiting keys load them all utils.Logger.Info("Caching all destinations") iter := ms.db.C(colDst).Find(nil).Select(bson.M{"id": 1}).Iter() dKeys = make([]string, 0) for iter.Next(&idResult) { dKeys = append(dKeys, utils.DESTINATION_PREFIX+idResult.Id) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.DESTINATION_PREFIX) } else if len(dKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching destinations: %v", dKeys)) CleanStalePrefixes(dKeys) } for _, key := range dKeys { if len(key) <= len(utils.DESTINATION_PREFIX) { utils.Logger.Warning(fmt.Sprintf("Got malformed destination id: %s", key)) continue } if _, err = ms.GetDestination(key[len(utils.DESTINATION_PREFIX):]); err != nil { cache2go.RollbackTransaction() return err } } if len(dKeys) != 0 { utils.Logger.Info("Finished destinations caching.") } if rpKeys == nil { utils.Logger.Info("Caching all rating plans") iter := ms.db.C(colRpl).Find(nil).Select(bson.M{"id": 1}).Iter() rpKeys = make([]string, 0) for iter.Next(&idResult) { rpKeys = append(rpKeys, utils.RATING_PLAN_PREFIX+idResult.Id) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.RATING_PLAN_PREFIX) } else if len(rpKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching rating plans: %v", rpKeys)) } for _, key := range rpKeys { cache2go.RemKey(key) if _, err = ms.GetRatingPlan(key[len(utils.RATING_PLAN_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(rpKeys) != 0 { utils.Logger.Info("Finished rating plans caching.") } if rpfKeys == nil { utils.Logger.Info("Caching all rating profiles") iter := ms.db.C(colRpf).Find(nil).Select(bson.M{"id": 1}).Iter() rpfKeys = make([]string, 0) for iter.Next(&idResult) { rpfKeys = append(rpfKeys, utils.RATING_PROFILE_PREFIX+idResult.Id) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.RATING_PROFILE_PREFIX) } else if len(rpfKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching rating profile: %v", rpfKeys)) } for _, key := range rpfKeys { cache2go.RemKey(key) if _, err = ms.GetRatingProfile(key[len(utils.RATING_PROFILE_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(rpfKeys) != 0 { utils.Logger.Info("Finished rating profile caching.") } if lcrKeys == nil { utils.Logger.Info("Caching LCR rules.") iter := ms.db.C(colLcr).Find(nil).Select(bson.M{"key": 1}).Iter() lcrKeys = make([]string, 0) for iter.Next(&keyResult) { lcrKeys = append(lcrKeys, utils.LCR_PREFIX+keyResult.Key) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.LCR_PREFIX) } else if len(lcrKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching LCR rules: %v", lcrKeys)) } for _, key := range lcrKeys { cache2go.RemKey(key) if _, err = ms.GetLCR(key[len(utils.LCR_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(lcrKeys) != 0 { utils.Logger.Info("Finished LCR rules caching.") } // DerivedChargers caching if dcsKeys == nil { utils.Logger.Info("Caching all derived chargers") iter := ms.db.C(colDcs).Find(nil).Select(bson.M{"key": 1}).Iter() dcsKeys = make([]string, 0) for iter.Next(&keyResult) { dcsKeys = append(dcsKeys, utils.DERIVEDCHARGERS_PREFIX+keyResult.Key) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.DERIVEDCHARGERS_PREFIX) } else if len(dcsKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching derived chargers: %v", dcsKeys)) } for _, key := range dcsKeys { cache2go.RemKey(key) if _, err = ms.GetDerivedChargers(key[len(utils.DERIVEDCHARGERS_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(dcsKeys) != 0 { utils.Logger.Info("Finished derived chargers caching.") } if actKeys == nil { cache2go.RemPrefixKey(utils.ACTION_PREFIX) } if actKeys == nil { utils.Logger.Info("Caching all actions") iter := ms.db.C(colAct).Find(nil).Select(bson.M{"key": 1}).Iter() actKeys = make([]string, 0) for iter.Next(&keyResult) { actKeys = append(actKeys, utils.ACTION_PREFIX+keyResult.Key) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.ACTION_PREFIX) } else if len(actKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching actions: %v", actKeys)) } for _, key := range actKeys { cache2go.RemKey(key) if _, err = ms.GetActions(key[len(utils.ACTION_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(actKeys) != 0 { utils.Logger.Info("Finished actions caching.") } if shgKeys == nil { cache2go.RemPrefixKey(utils.SHARED_GROUP_PREFIX) } if shgKeys == nil { utils.Logger.Info("Caching all shared groups") iter := ms.db.C(colShg).Find(nil).Select(bson.M{"id": 1}).Iter() shgKeys = make([]string, 0) for iter.Next(&idResult) { shgKeys = append(shgKeys, utils.SHARED_GROUP_PREFIX+idResult.Id) } if err := iter.Close(); err != nil { cache2go.RollbackTransaction() return err } } else if len(shgKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching shared groups: %v", shgKeys)) } for _, key := range shgKeys { cache2go.RemKey(key) if _, err = ms.GetSharedGroup(key[len(utils.SHARED_GROUP_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(shgKeys) != 0 { utils.Logger.Info("Finished shared groups caching.") } cache2go.CommitTransaction() return nil }
func (rs *RedisStorage) cacheRating(dKeys, rpKeys, rpfKeys, lcrKeys, dcsKeys, actKeys, shgKeys []string) (err error) { cache2go.BeginTransaction() if dKeys == nil || (float64(cache2go.CountEntries(utils.DESTINATION_PREFIX))*utils.DESTINATIONS_LOAD_THRESHOLD < float64(len(dKeys))) { // if need to load more than a half of exiting keys load them all utils.Logger.Info("Caching all destinations") if dKeys, err = rs.db.Keys(utils.DESTINATION_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.DESTINATION_PREFIX) } else if len(dKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching destinations: %v", dKeys)) CleanStalePrefixes(dKeys) } for _, key := range dKeys { if len(key) <= len(utils.DESTINATION_PREFIX) { utils.Logger.Warning(fmt.Sprintf("Got malformed destination id: %s", key)) continue } if _, err = rs.GetDestination(key[len(utils.DESTINATION_PREFIX):]); err != nil { cache2go.RollbackTransaction() return err } } if len(dKeys) != 0 { utils.Logger.Info("Finished destinations caching.") } if rpKeys == nil { utils.Logger.Info("Caching all rating plans") if rpKeys, err = rs.db.Keys(utils.RATING_PLAN_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.RATING_PLAN_PREFIX) } else if len(rpKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching rating plans: %v", rpKeys)) } for _, key := range rpKeys { cache2go.RemKey(key) if _, err = rs.GetRatingPlan(key[len(utils.RATING_PLAN_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(rpKeys) != 0 { utils.Logger.Info("Finished rating plans caching.") } if rpfKeys == nil { utils.Logger.Info("Caching all rating profiles") if rpfKeys, err = rs.db.Keys(utils.RATING_PROFILE_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.RATING_PROFILE_PREFIX) } else if len(rpfKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching rating profile: %v", rpfKeys)) } for _, key := range rpfKeys { cache2go.RemKey(key) if _, err = rs.GetRatingProfile(key[len(utils.RATING_PROFILE_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(rpfKeys) != 0 { utils.Logger.Info("Finished rating profile caching.") } if lcrKeys == nil { utils.Logger.Info("Caching LCR rules.") if lcrKeys, err = rs.db.Keys(utils.LCR_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.LCR_PREFIX) } else if len(lcrKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching LCR rules: %v", lcrKeys)) } for _, key := range lcrKeys { cache2go.RemKey(key) if _, err = rs.GetLCR(key[len(utils.LCR_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(lcrKeys) != 0 { utils.Logger.Info("Finished LCR rules caching.") } // DerivedChargers caching if dcsKeys == nil { utils.Logger.Info("Caching all derived chargers") if dcsKeys, err = rs.db.Keys(utils.DERIVEDCHARGERS_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.DERIVEDCHARGERS_PREFIX) } else if len(dcsKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching derived chargers: %v", dcsKeys)) } for _, key := range dcsKeys { cache2go.RemKey(key) if _, err = rs.GetDerivedChargers(key[len(utils.DERIVEDCHARGERS_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(dcsKeys) != 0 { utils.Logger.Info("Finished derived chargers caching.") } if actKeys == nil { cache2go.RemPrefixKey(utils.ACTION_PREFIX) } if actKeys == nil { utils.Logger.Info("Caching all actions") if actKeys, err = rs.db.Keys(utils.ACTION_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } cache2go.RemPrefixKey(utils.ACTION_PREFIX) } else if len(actKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching actions: %v", actKeys)) } for _, key := range actKeys { cache2go.RemKey(key) if _, err = rs.GetActions(key[len(utils.ACTION_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(actKeys) != 0 { utils.Logger.Info("Finished actions caching.") } if shgKeys == nil { cache2go.RemPrefixKey(utils.SHARED_GROUP_PREFIX) } if shgKeys == nil { utils.Logger.Info("Caching all shared groups") if shgKeys, err = rs.db.Keys(utils.SHARED_GROUP_PREFIX + "*"); err != nil { cache2go.RollbackTransaction() return err } } else if len(shgKeys) != 0 { utils.Logger.Info(fmt.Sprintf("Caching shared groups: %v", shgKeys)) } for _, key := range shgKeys { cache2go.RemKey(key) if _, err = rs.GetSharedGroup(key[len(utils.SHARED_GROUP_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if len(shgKeys) != 0 { utils.Logger.Info("Finished shared groups caching.") } cache2go.CommitTransaction() return nil }
func (ms *MapStorage) cacheRating(dKeys, rpKeys, rpfKeys, lcrKeys, dcsKeys, actKeys, aplKeys, shgKeys []string) error { cache2go.BeginTransaction() if dKeys == nil || (float64(cache2go.CountEntries(utils.DESTINATION_PREFIX))*utils.DESTINATIONS_LOAD_THRESHOLD < float64(len(dKeys))) { cache2go.RemPrefixKey(utils.DESTINATION_PREFIX) } else { CleanStalePrefixes(dKeys) } if rpKeys == nil { cache2go.RemPrefixKey(utils.RATING_PLAN_PREFIX) } if rpfKeys == nil { cache2go.RemPrefixKey(utils.RATING_PROFILE_PREFIX) } if lcrKeys == nil { cache2go.RemPrefixKey(utils.LCR_PREFIX) } if dcsKeys == nil { cache2go.RemPrefixKey(utils.DERIVEDCHARGERS_PREFIX) } if actKeys == nil { cache2go.RemPrefixKey(utils.ACTION_PREFIX) // Forced until we can fine tune it } if aplKeys == nil { cache2go.RemPrefixKey(utils.ACTION_PLAN_PREFIX) } if shgKeys == nil { cache2go.RemPrefixKey(utils.SHARED_GROUP_PREFIX) // Forced until we can fine tune it } for k, _ := range ms.dict { if strings.HasPrefix(k, utils.DESTINATION_PREFIX) { if _, err := ms.GetDestination(k[len(utils.DESTINATION_PREFIX):]); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.RATING_PLAN_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetRatingPlan(k[len(utils.RATING_PLAN_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.RATING_PROFILE_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetRatingProfile(k[len(utils.RATING_PROFILE_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.LCR_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetLCR(k[len(utils.LCR_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.DERIVEDCHARGERS_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetDerivedChargers(k[len(utils.DERIVEDCHARGERS_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.ACTION_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetActions(k[len(utils.ACTION_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.ACTION_PLAN_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetActionPlans(k[len(utils.ACTION_PLAN_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } if strings.HasPrefix(k, utils.SHARED_GROUP_PREFIX) { cache2go.RemKey(k) if _, err := ms.GetSharedGroup(k[len(utils.SHARED_GROUP_PREFIX):], true); err != nil { cache2go.RollbackTransaction() return err } } } cache2go.CommitTransaction() return nil }
func (self *ApierV1) GetCacheStats(attrs utils.AttrCacheStats, reply *utils.CacheStats) error { cs := new(utils.CacheStats) cs.Destinations = cache2go.CountEntries(utils.DESTINATION_PREFIX) cs.ReverseDestinations = cache2go.CountEntries(utils.REVERSE_DESTINATION_PREFIX) cs.RatingPlans = cache2go.CountEntries(utils.RATING_PLAN_PREFIX) cs.RatingProfiles = cache2go.CountEntries(utils.RATING_PROFILE_PREFIX) cs.Actions = cache2go.CountEntries(utils.ACTION_PREFIX) cs.ActionPlans = cache2go.CountEntries(utils.ACTION_PLAN_PREFIX) cs.SharedGroups = cache2go.CountEntries(utils.SHARED_GROUP_PREFIX) cs.DerivedChargers = cache2go.CountEntries(utils.DERIVEDCHARGERS_PREFIX) cs.LcrProfiles = cache2go.CountEntries(utils.LCR_PREFIX) cs.Aliases = cache2go.CountEntries(utils.ALIASES_PREFIX) cs.ReverseAliases = cache2go.CountEntries(utils.REVERSE_ALIASES_PREFIX) cs.ResourceLimits = cache2go.CountEntries(utils.ResourceLimitsPrefix) if self.CdrStatsSrv != nil { var queueIds []string if err := self.CdrStatsSrv.Call("CDRStatsV1.GetQueueIds", 0, &queueIds); err != nil { return utils.NewErrServerError(err) } cs.CdrStats = len(queueIds) } if self.Users != nil { var ups engine.UserProfiles if err := self.Users.Call("UsersV1.GetUsers", &engine.UserProfile{}, &ups); err != nil { return utils.NewErrServerError(err) } cs.Users = len(ups) } *reply = *cs return nil }